Re: Unable to understand a piece of code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On Mon, 20 May 2019, 6:54 am Tobin C. Harding, <me@xxxxxxxx> wrote:
On Mon, May 20, 2019 at 05:37:41AM +0530, Amit Kumar wrote:
> HI,
>
> mm/slub.c: line 3973
> int __kmem_cache_shrink(struct kmem_cache *s)
> {
> int node;
> int i;
> struct kmem_cache_node *n;
> struct page *page;
> struct page *t;
> struct list_head discard;
> struct list_head promote[SHRINK_PROMOTE_MAX];
> unsigned long flags;
> int ret = 0;
>
> flush_all(s);
> for_each_kmem_cache_node(s, node, n) {
>
> How uninitialized variable node is being used in macro for_each_kmem_cache_node?
>
> node is a local variable with no extern and not initialized.
>
> mm/slab.h: line 490
> #define for_each_kmem_cache_node(__s, __node, __n) \
> for (__node = 0; __node < nr_node_ids; __node++) \

This _is_ the initialization of node. 
First thank you for your reply.
I just did not use my brain that node is initialized using __node inside for loop.
I know well macros are literally replaced and do not exist anymore after preprocessing.

Macros are kinda funky, there
isn't much more to say about that other than perhaps read up some more
about how macros work in C and read a bunch more macros in the kernel
e.g. include/linux/list.h

Good luck,
Tobin.
_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]

  Powered by Linux