Messages in this thread | | | Date | Tue, 16 May 2023 14:43:46 +0200 | Subject | Re: [PATCH RFC v2] Randomized slab caches for kmalloc() | From | Alexander Lobakin <> |
| |
From: Gong Ruiqi <gongruiqi1@huawei.com> Date: Mon, 15 May 2023 14:26:31 +0800
> > On 2023/05/11 22:54, Alexander Lobakin wrote:
[...]
> I tried this way of implementation but it didn't work: it did not > propagate from 16 to 1, but stopped in the middle. I think it's because > the macro is somehow (indirectly) self-referential and the preprocessor > won't expand it. Check this for more info: > > https://gcc.gnu.org/onlinedocs/cpp/Self-Referential-Macros.html
Ooops, I missed that, sorry. Thanks for the link!
> >> Also I'd rather not put commas ',' at the end of each macro, they're >> usually put outside where the macro is used. > > It seems here we have to put commas at the end. Not only it's to align > with how KMALLOC_{RCL,CGROUP,DMA}_NAME are implemented, but also > otherwise the expansion of INIT_KMALLOC_INFO would in some cases be like: > > { > .name[KMALLOC_NORMAL] = "kmalloc-" #__short_size, > , // an empty entry with a comma > } > > which would cause compilation error in kmalloc_info[]'s initialization.
+
> >>> +#endif >>> +#else // CONFIG_RANDOM_KMALLOC_CACHES >>> +#define KMALLOC_RANDOM_NAME(N, sz) >>> +#endif >>> + >>> #define INIT_KMALLOC_INFO(__size, __short_size) \ >>> { \ >>> .name[KMALLOC_NORMAL] = "kmalloc-" #__short_size, \ >>> KMALLOC_RCL_NAME(__short_size) \ >>> KMALLOC_CGROUP_NAME(__short_size) \ >>> KMALLOC_DMA_NAME(__short_size) \ >>> + KMALLOC_RANDOM_NAME(CONFIG_RANDOM_KMALLOC_CACHES_NR, __short_size) \ >> >> Can't those names be __initconst and here you'd just do one loop from 1 >> to KMALLOC_CACHES_NR, which would assign names? I'm not sure compilers >> will expand that one to a compile-time constant and assigning 69 >> different string pointers per one kmalloc size is a bit of a waste to me. > > I'm not sure if I understand the question correctly, but I believe these > names have been __initconst since kmalloc_info[] is already marked with > it. Please let me know if it doesn't answer your question.
Ah okay, it's just me trying to show off without looking at the code. I thought INIT_KMALLOC_INFO() is used somewhere in a function (from its name), but it's used to initialize const array, okay.
> >>> .size = __size, \ >>> } [...]
Thanks, Olek
| |