commit 21a3c96 uses node_start/end_pfn(nid) for detection start/end of nodes. But, it's not defined in linux/mmzone.h but defined in /arch/???/include/mmzone.h which is included only under CONFIG_NEED_MULTIPLE_NODES=y. Then, we see mm/page_cgroup.c: In function 'page_cgroup_init': mm/page_cgroup.c:308: error: implicit declaration of function 'node_start_pfn' mm/page_cgroup.c:309: error: implicit declaration of function 'node_end_pfn' So, fixiing page_cgroup.c is an idea... But node_start_pfn()/node_end_pfn() is a very generic macro and should be implemented in the same manner for all archs. (m32r has different implementation...) This patch removes definitions of node_start/end_pfn() in each archs and defines a unified one in linux/mmzone.h. It's not under CONFIG_NEED_MULTIPLE_NODES, now. A result of macro expansion is here (mm/page_cgroup.c) for !NUMA start_pfn = ((&contig_page_data)->node_start_pfn); end_pfn = ({ pg_data_t *__pgdat = (&contig_page_data); __pgdat->node_start_pfn + __pgdat->node_spanned_pages;}); for NUMA (x86-64) start_pfn = ((node_data[nid])->node_start_pfn); end_pfn = ({ pg_data_t *__pgdat = (node_data[nid]); __pgdat->node_start_pfn + __pgdat->node_spanned_pages;}); Changelog: - fixed to avoid using "nid" twice in node_end_pfn() macro.
Showing the changes to include/linux (1 of 10 files). Show all
Unified · Split
| @@ -647,6 +647,13 @@ typedef struct pglist_data { · 646 unmodified lines | |||
| 647 | #endif | 647 | #endif |
| 648 | #define nid_page_nr(nid, pagenr) pgdat_page_nr(NODE_DATA(nid),(pagenr)) | 648 | #define nid_page_nr(nid, pagenr) pgdat_page_nr(NODE_DATA(nid),(pagenr)) |
| 649 | 649 | ||
| 650 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) | ||
| 651 | |||
| 652 | #define node_end_pfn(nid) ({\ | ||
| 653 | pg_data_t *__pgdat = NODE_DATA(nid);\ | ||
| 654 | __pgdat->node_start_pfn + __pgdat->node_spanned_pages;\ | ||
| 655 | }) | ||
| 656 | |||
| 650 | #include <linux/memory_hotplug.h> | 657 | #include <linux/memory_hotplug.h> |
| 651 | 658 | ||
| 652 | extern struct mutex zonelists_mutex; | 659 | extern struct mutex zonelists_mutex; |