All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC v2 PATCH 0/3] mm: common PAGE_SIZE shift macros
@ 2021-09-19 13:12 Oleksandr Natalenko
  2021-09-19 13:12 ` [RFC v2 PATCH 1/3] mm: add PG2KB/KB2PG helper macros Oleksandr Natalenko
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Oleksandr Natalenko @ 2021-09-19 13:12 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-mm, Andrew Morton, Vlastimil Babka, Matthew Wilcox,
	Greg Kroah-Hartman, Miaohe Lin, Michal Hocko, Mel Gorman,
	Stephen Rothwell, David Laight

There are various places where the K(x) macro (or its alternative and/or
counterpart) is defined. This submission gets rid of multiple definitions
and provides common ones.

Based on discussion with Miaohe Lin [1].

The patch is based on top of next-20210910 and is compile-tested using
allyesconfig.

RFC v1: [2].

Changes since RFC v1:

* change name from K(x) to PG2KB(x)
* also provide KB2PG(x)
* replace open-coded variants
* do not use separate header file for macro definitions

[1] https://lore.kernel.org/linux-mm/9161665.bUqNH3lxUD@natalenko.name/
[2] https://lore.kernel.org/lkml/20210901092149.994791-1-oleksandr@natalenko.name/

Oleksandr Natalenko (3):
  mm: add PG2KB/KB2PG helper macros
  mm: replace custom PG2KB/KB2PG macros with common ones
  mm: replace open-coded PG2KB/KB2PG variants with macros

 arch/alpha/kernel/setup.c                     |  3 +-
 arch/arc/include/asm/arcregs.h                |  4 +-
 arch/mips/mm/init.c                           |  2 +-
 arch/powerpc/platforms/pseries/cmm.c          | 17 ++--
 arch/s390/appldata/appldata_mem.c             | 19 ++--
 arch/x86/kernel/cpu/mtrr/cleanup.c            | 17 ++--
 block/blk-sysfs.c                             |  9 +-
 drivers/base/node.c                           | 69 ++++++++-------
 drivers/gpu/drm/v3d/v3d_debugfs.c             |  3 +-
 drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c |  5 +-
 drivers/md/md-bitmap.c                        |  4 +-
 drivers/scsi/mpt3sas/mpt3sas_base.c           |  5 +-
 drivers/xen/xen-balloon.c                     | 11 ++-
 fs/ceph/addr.c                                |  2 +-
 fs/ceph/super.h                               |  3 +-
 fs/fs-writeback.c                             |  2 +-
 fs/nfs/write.c                                |  4 +-
 fs/nfsd/nfscache.c                            |  3 +-
 fs/proc/meminfo.c                             |  4 +-
 fs/proc/task_mmu.c                            |  3 +-
 include/linux/mm.h                            |  3 +
 include/trace/events/writeback.h              | 19 ++--
 kernel/debug/kdb/kdb_main.c                   |  3 +-
 kernel/events/core.c                          |  2 +-
 kernel/fork.c                                 |  2 +-
 mm/backing-dev.c                              | 22 +++--
 mm/hugetlb.c                                  |  2 +-
 mm/memcontrol.c                               | 18 ++--
 mm/mmap.c                                     |  6 +-
 mm/nommu.c                                    |  4 +-
 mm/oom_kill.c                                 | 16 ++--
 mm/page-writeback.c                           |  4 +-
 mm/page_alloc.c                               | 86 +++++++++----------
 mm/shmem.c                                    |  3 +-
 mm/swap_state.c                               |  5 +-
 mm/swapfile.c                                 | 11 ++-
 mm/util.c                                     |  6 +-
 37 files changed, 197 insertions(+), 204 deletions(-)

-- 
2.33.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [RFC v2 PATCH 1/3] mm: add PG2KB/KB2PG helper macros
  2021-09-19 13:12 [RFC v2 PATCH 0/3] mm: common PAGE_SIZE shift macros Oleksandr Natalenko
@ 2021-09-19 13:12 ` Oleksandr Natalenko
  2021-09-19 13:21   ` Greg Kroah-Hartman
  2021-09-19 14:21   ` Matthew Wilcox
  2021-09-19 13:12 ` [RFC v2 PATCH 2/3] mm: replace custom PG2KB/KB2PG macros with common ones Oleksandr Natalenko
  2021-09-19 13:12 ` [RFC v2 PATCH 3/3] mm: replace open-coded PG2KB/KB2PG variants with macros Oleksandr Natalenko
  2 siblings, 2 replies; 8+ messages in thread
From: Oleksandr Natalenko @ 2021-09-19 13:12 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-mm, Andrew Morton, Vlastimil Babka, Matthew Wilcox,
	Greg Kroah-Hartman, Miaohe Lin, Michal Hocko, Mel Gorman,
	Stephen Rothwell, David Laight

Signed-off-by: Oleksandr Natalenko <oleksandr@natalenko.name>
---
 include/linux/mm.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/include/linux/mm.h b/include/linux/mm.h
index 00bb2d938df4..0a7e950ac8aa 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -98,6 +98,9 @@ extern int mmap_rnd_compat_bits __read_mostly;
 #include <asm/page.h>
 #include <asm/processor.h>
 
+#define PG2KB(x)	((x) << (PAGE_SHIFT - 10))
+#define KB2PG(x)	((x) >> (PAGE_SHIFT - 10))
+
 /*
  * Architectures that support memory tagging (assigning tags to memory regions,
  * embedding these tags into addresses that point to these memory regions, and
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [RFC v2 PATCH 2/3] mm: replace custom PG2KB/KB2PG macros with common ones
  2021-09-19 13:12 [RFC v2 PATCH 0/3] mm: common PAGE_SIZE shift macros Oleksandr Natalenko
  2021-09-19 13:12 ` [RFC v2 PATCH 1/3] mm: add PG2KB/KB2PG helper macros Oleksandr Natalenko
@ 2021-09-19 13:12 ` Oleksandr Natalenko
  2021-09-19 15:35   ` kernel test robot
  2021-09-19 17:13   ` kernel test robot
  2021-09-19 13:12 ` [RFC v2 PATCH 3/3] mm: replace open-coded PG2KB/KB2PG variants with macros Oleksandr Natalenko
  2 siblings, 2 replies; 8+ messages in thread
From: Oleksandr Natalenko @ 2021-09-19 13:12 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-mm, Andrew Morton, Vlastimil Babka, Matthew Wilcox,
	Greg Kroah-Hartman, Miaohe Lin, Michal Hocko, Mel Gorman,
	Stephen Rothwell, David Laight

Signed-off-by: Oleksandr Natalenko <oleksandr@natalenko.name>
---
 arch/arc/include/asm/arcregs.h       |  4 +-
 arch/powerpc/platforms/pseries/cmm.c | 17 +++---
 arch/s390/appldata/appldata_mem.c    | 19 +++----
 drivers/base/node.c                  | 69 +++++++++++------------
 drivers/scsi/mpt3sas/mpt3sas_base.c  |  5 +-
 drivers/xen/xen-balloon.c            | 11 ++--
 include/trace/events/writeback.h     | 19 +++----
 kernel/debug/kdb/kdb_main.c          |  3 +-
 mm/backing-dev.c                     | 20 +++----
 mm/memcontrol.c                      | 18 +++---
 mm/oom_kill.c                        | 16 +++---
 mm/page_alloc.c                      | 84 ++++++++++++++--------------
 12 files changed, 136 insertions(+), 149 deletions(-)

diff --git a/arch/arc/include/asm/arcregs.h b/arch/arc/include/asm/arcregs.h
index 2162023195c5..87becc380d6a 100644
--- a/arch/arc/include/asm/arcregs.h
+++ b/arch/arc/include/asm/arcregs.h
@@ -146,13 +146,13 @@
 
 #ifndef __ASSEMBLY__
 
+#include <linux/mm.h>
 #include <soc/arc/aux.h>
 
 /* Helpers */
 #define TO_KB(bytes)		((bytes) >> 10)
 #define TO_MB(bytes)		(TO_KB(bytes) >> 10)
-#define PAGES_TO_KB(n_pages)	((n_pages) << (PAGE_SHIFT - 10))
-#define PAGES_TO_MB(n_pages)	(PAGES_TO_KB(n_pages) >> 10)
+#define PAGES_TO_MB(n_pages)	(PG2KB(n_pages) >> 10)
 
 
 /*
diff --git a/arch/powerpc/platforms/pseries/cmm.c b/arch/powerpc/platforms/pseries/cmm.c
index 45a3a3022a85..c22b9b66b930 100644
--- a/arch/powerpc/platforms/pseries/cmm.c
+++ b/arch/powerpc/platforms/pseries/cmm.c
@@ -12,6 +12,7 @@
 #include <linux/fs.h>
 #include <linux/gfp.h>
 #include <linux/kthread.h>
+#include <linux/mm.h>
 #include <linux/module.h>
 #include <linux/oom.h>
 #include <linux/reboot.h>
@@ -39,8 +40,6 @@
 #define CMM_DISABLE		0
 #define CMM_OOM_KB		1024
 #define CMM_MIN_MEM_MB		256
-#define KB2PAGES(_p)		((_p)>>(PAGE_SHIFT-10))
-#define PAGES2KB(_p)		((_p)<<(PAGE_SHIFT-10))
 
 #define CMM_MEM_HOTPLUG_PRI	1
 
@@ -215,13 +214,13 @@ static int cmm_oom_notify(struct notifier_block *self,
 			  unsigned long dummy, void *parm)
 {
 	unsigned long *freed = parm;
-	long nr = KB2PAGES(oom_kb);
+	long nr = KB2PG(oom_kb);
 
 	cmm_dbg("OOM processing started\n");
 	nr = cmm_free_pages(nr);
 	loaned_pages_target = atomic_long_read(&loaned_pages);
-	*freed += KB2PAGES(oom_kb) - nr;
-	oom_freed_pages += KB2PAGES(oom_kb) - nr;
+	*freed += KB2PG(oom_kb) - nr;
+	oom_freed_pages += KB2PG(oom_kb) - nr;
 	cmm_dbg("OOM processing complete\n");
 	return NOTIFY_OK;
 }
@@ -251,7 +250,7 @@ static void cmm_get_mpp(void)
 					    PAGE_SIZE);
 		target = page_loan_request + __loaned_pages;
 	} else {
-		target = KB2PAGES(simulate_loan_target_kb);
+		target = KB2PG(simulate_loan_target_kb);
 		page_loan_request = target - __loaned_pages;
 	}
 
@@ -342,13 +341,13 @@ static int cmm_thread(void *dummy)
 	}							\
 	static DEVICE_ATTR(name, 0444, show_##name, NULL)
 
-CMM_SHOW(loaned_kb, "%lu\n", PAGES2KB(atomic_long_read(&loaned_pages)));
-CMM_SHOW(loaned_target_kb, "%lu\n", PAGES2KB(loaned_pages_target));
+CMM_SHOW(loaned_kb, "%lu\n", PG2KB(atomic_long_read(&loaned_pages)));
+CMM_SHOW(loaned_target_kb, "%lu\n", PG2KB(loaned_pages_target));
 
 static ssize_t show_oom_pages(struct device *dev,
 			      struct device_attribute *attr, char *buf)
 {
-	return sprintf(buf, "%lu\n", PAGES2KB(oom_freed_pages));
+	return sprintf(buf, "%lu\n", PG2KB(oom_freed_pages));
 }
 
 static ssize_t store_oom_pages(struct device *dev,
diff --git a/arch/s390/appldata/appldata_mem.c b/arch/s390/appldata/appldata_mem.c
index 21c3147bd92a..35f02d18d88c 100644
--- a/arch/s390/appldata/appldata_mem.c
+++ b/arch/s390/appldata/appldata_mem.c
@@ -8,6 +8,7 @@
  * Author: Gerald Schaefer <gerald.schaefer@de.ibm.com>
  */
 
+#include <linux/mm.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/errno.h>
@@ -20,8 +21,6 @@
 #include "appldata.h"
 
 
-#define P2K(x) ((x) << (PAGE_SHIFT - 10))	/* Converts #Pages to KB */
-
 /*
  * Memory data
  *
@@ -94,17 +93,17 @@ static void appldata_get_mem_data(void *data)
 
 	si_meminfo(&val);
 	mem_data->sharedram = val.sharedram;
-	mem_data->totalram  = P2K(val.totalram);
-	mem_data->freeram   = P2K(val.freeram);
-	mem_data->totalhigh = P2K(val.totalhigh);
-	mem_data->freehigh  = P2K(val.freehigh);
-	mem_data->bufferram = P2K(val.bufferram);
-	mem_data->cached    = P2K(global_node_page_state(NR_FILE_PAGES)
+	mem_data->totalram  = PG2KB(val.totalram);
+	mem_data->freeram   = PG2KB(val.freeram);
+	mem_data->totalhigh = PG2KB(val.totalhigh);
+	mem_data->freehigh  = PG2KB(val.freehigh);
+	mem_data->bufferram = PG2KB(val.bufferram);
+	mem_data->cached    = PG2KB(global_node_page_state(NR_FILE_PAGES)
 				- val.bufferram);
 
 	si_swapinfo(&val);
-	mem_data->totalswap = P2K(val.totalswap);
-	mem_data->freeswap  = P2K(val.freeswap);
+	mem_data->totalswap = PG2KB(val.totalswap);
+	mem_data->freeswap  = PG2KB(val.freeswap);
 
 	mem_data->timestamp = get_tod_clock();
 	mem_data->sync_count_2++;
diff --git a/drivers/base/node.c b/drivers/base/node.c
index c56d34f8158f..fcacb3d58167 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -365,7 +365,6 @@ static void node_init_caches(unsigned int nid) { }
 static void node_remove_caches(struct node *node) { }
 #endif
 
-#define K(x) ((x) << (PAGE_SHIFT - 10))
 static ssize_t node_read_meminfo(struct device *dev,
 			struct device_attribute *attr, char *buf)
 {
@@ -395,20 +394,20 @@ static ssize_t node_read_meminfo(struct device *dev,
 			    "Node %d Inactive(file): %8lu kB\n"
 			    "Node %d Unevictable:    %8lu kB\n"
 			    "Node %d Mlocked:        %8lu kB\n",
-			    nid, K(i.totalram),
-			    nid, K(i.freeram),
-			    nid, K(i.totalram - i.freeram),
-			    nid, K(swapcached),
-			    nid, K(node_page_state(pgdat, NR_ACTIVE_ANON) +
+			    nid, PG2KB(i.totalram),
+			    nid, PG2KB(i.freeram),
+			    nid, PG2KB(i.totalram - i.freeram),
+			    nid, PG2KB(swapcached),
+			    nid, PG2KB(node_page_state(pgdat, NR_ACTIVE_ANON) +
 				   node_page_state(pgdat, NR_ACTIVE_FILE)),
-			    nid, K(node_page_state(pgdat, NR_INACTIVE_ANON) +
+			    nid, PG2KB(node_page_state(pgdat, NR_INACTIVE_ANON) +
 				   node_page_state(pgdat, NR_INACTIVE_FILE)),
-			    nid, K(node_page_state(pgdat, NR_ACTIVE_ANON)),
-			    nid, K(node_page_state(pgdat, NR_INACTIVE_ANON)),
-			    nid, K(node_page_state(pgdat, NR_ACTIVE_FILE)),
-			    nid, K(node_page_state(pgdat, NR_INACTIVE_FILE)),
-			    nid, K(node_page_state(pgdat, NR_UNEVICTABLE)),
-			    nid, K(sum_zone_node_page_state(nid, NR_MLOCK)));
+			    nid, PG2KB(node_page_state(pgdat, NR_ACTIVE_ANON)),
+			    nid, PG2KB(node_page_state(pgdat, NR_INACTIVE_ANON)),
+			    nid, PG2KB(node_page_state(pgdat, NR_ACTIVE_FILE)),
+			    nid, PG2KB(node_page_state(pgdat, NR_INACTIVE_FILE)),
+			    nid, PG2KB(node_page_state(pgdat, NR_UNEVICTABLE)),
+			    nid, PG2KB(sum_zone_node_page_state(nid, NR_MLOCK)));
 
 #ifdef CONFIG_HIGHMEM
 	len += sysfs_emit_at(buf, len,
@@ -416,10 +415,10 @@ static ssize_t node_read_meminfo(struct device *dev,
 			     "Node %d HighFree:       %8lu kB\n"
 			     "Node %d LowTotal:       %8lu kB\n"
 			     "Node %d LowFree:        %8lu kB\n",
-			     nid, K(i.totalhigh),
-			     nid, K(i.freehigh),
-			     nid, K(i.totalram - i.totalhigh),
-			     nid, K(i.freeram - i.freehigh));
+			     nid, PG2KB(i.totalhigh),
+			     nid, PG2KB(i.freehigh),
+			     nid, PG2KB(i.totalram - i.totalhigh),
+			     nid, PG2KB(i.freeram - i.freehigh));
 #endif
 	len += sysfs_emit_at(buf, len,
 			     "Node %d Dirty:          %8lu kB\n"
@@ -448,32 +447,32 @@ static ssize_t node_read_meminfo(struct device *dev,
 			     "Node %d FilePmdMapped: %8lu kB\n"
 #endif
 			     ,
-			     nid, K(node_page_state(pgdat, NR_FILE_DIRTY)),
-			     nid, K(node_page_state(pgdat, NR_WRITEBACK)),
-			     nid, K(node_page_state(pgdat, NR_FILE_PAGES)),
-			     nid, K(node_page_state(pgdat, NR_FILE_MAPPED)),
-			     nid, K(node_page_state(pgdat, NR_ANON_MAPPED)),
-			     nid, K(i.sharedram),
+			     nid, PG2KB(node_page_state(pgdat, NR_FILE_DIRTY)),
+			     nid, PG2KB(node_page_state(pgdat, NR_WRITEBACK)),
+			     nid, PG2KB(node_page_state(pgdat, NR_FILE_PAGES)),
+			     nid, PG2KB(node_page_state(pgdat, NR_FILE_MAPPED)),
+			     nid, PG2KB(node_page_state(pgdat, NR_ANON_MAPPED)),
+			     nid, PG2KB(i.sharedram),
 			     nid, node_page_state(pgdat, NR_KERNEL_STACK_KB),
 #ifdef CONFIG_SHADOW_CALL_STACK
 			     nid, node_page_state(pgdat, NR_KERNEL_SCS_KB),
 #endif
-			     nid, K(node_page_state(pgdat, NR_PAGETABLE)),
+			     nid, PG2KB(node_page_state(pgdat, NR_PAGETABLE)),
 			     nid, 0UL,
-			     nid, K(sum_zone_node_page_state(nid, NR_BOUNCE)),
-			     nid, K(node_page_state(pgdat, NR_WRITEBACK_TEMP)),
-			     nid, K(sreclaimable +
+			     nid, PG2KB(sum_zone_node_page_state(nid, NR_BOUNCE)),
+			     nid, PG2KB(node_page_state(pgdat, NR_WRITEBACK_TEMP)),
+			     nid, PG2KB(sreclaimable +
 				    node_page_state(pgdat, NR_KERNEL_MISC_RECLAIMABLE)),
-			     nid, K(sreclaimable + sunreclaimable),
-			     nid, K(sreclaimable),
-			     nid, K(sunreclaimable)
+			     nid, PG2KB(sreclaimable + sunreclaimable),
+			     nid, PG2KB(sreclaimable),
+			     nid, PG2KB(sunreclaimable)
 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
 			     ,
-			     nid, K(node_page_state(pgdat, NR_ANON_THPS)),
-			     nid, K(node_page_state(pgdat, NR_SHMEM_THPS)),
-			     nid, K(node_page_state(pgdat, NR_SHMEM_PMDMAPPED)),
-			     nid, K(node_page_state(pgdat, NR_FILE_THPS)),
-			     nid, K(node_page_state(pgdat, NR_FILE_PMDMAPPED))
+			     nid, PG2KB(node_page_state(pgdat, NR_ANON_THPS)),
+			     nid, PG2KB(node_page_state(pgdat, NR_SHMEM_THPS)),
+			     nid, PG2KB(node_page_state(pgdat, NR_SHMEM_PMDMAPPED)),
+			     nid, PG2KB(node_page_state(pgdat, NR_FILE_THPS)),
+			     nid, PG2KB(node_page_state(pgdat, NR_FILE_PMDMAPPED))
 #endif
 			    );
 	len += hugetlb_report_node_meminfo(buf, len, nid);
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 27eb652b564f..bb11f31f8431 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -44,6 +44,7 @@
  */
 
 #include <linux/kernel.h>
+#include <linux/mm.h>
 #include <linux/module.h>
 #include <linux/errno.h>
 #include <linux/init.h>
@@ -2988,8 +2989,6 @@ _base_build_sg_ieee(struct MPT3SAS_ADAPTER *ioc, void *psge,
 	}
 }
 
-#define convert_to_kb(x) ((x) << (PAGE_SHIFT - 10))
-
 /**
  * _base_config_dma_addressing - set dma addressing
  * @ioc: per adapter object
@@ -3026,7 +3025,7 @@ _base_config_dma_addressing(struct MPT3SAS_ADAPTER *ioc, struct pci_dev *pdev)
 
 	si_meminfo(&s);
 	ioc_info(ioc, "%d BIT PCI BUS DMA ADDRESSING SUPPORTED, total mem (%ld kB)\n",
-		ioc->dma_mask, convert_to_kb(s.totalram));
+		ioc->dma_mask, PG2KB(s.totalram));
 
 	return 0;
 }
diff --git a/drivers/xen/xen-balloon.c b/drivers/xen/xen-balloon.c
index 8cd583db20b1..fdd39e5e1a1e 100644
--- a/drivers/xen/xen-balloon.c
+++ b/drivers/xen/xen-balloon.c
@@ -34,6 +34,7 @@
 
 #include <linux/kernel.h>
 #include <linux/errno.h>
+#include <linux/mm.h>
 #include <linux/mm_types.h>
 #include <linux/init.h>
 #include <linux/capability.h>
@@ -47,8 +48,6 @@
 #include <xen/page.h>
 #include <xen/mem-reservation.h>
 
-#define PAGES2KB(_p) ((_p)<<(PAGE_SHIFT-10))
-
 #define BALLOON_CLASS_NAME "xen_memory"
 
 #ifdef CONFIG_MEMORY_HOTPLUG
@@ -142,9 +141,9 @@ EXPORT_SYMBOL_GPL(xen_balloon_init);
 	}								\
 	static DEVICE_ATTR_RO(name)
 
-BALLOON_SHOW(current_kb, "%lu\n", PAGES2KB(balloon_stats.current_pages));
-BALLOON_SHOW(low_kb, "%lu\n", PAGES2KB(balloon_stats.balloon_low));
-BALLOON_SHOW(high_kb, "%lu\n", PAGES2KB(balloon_stats.balloon_high));
+BALLOON_SHOW(current_kb, "%lu\n", PG2KB(balloon_stats.current_pages));
+BALLOON_SHOW(low_kb, "%lu\n", PG2KB(balloon_stats.balloon_low));
+BALLOON_SHOW(high_kb, "%lu\n", PG2KB(balloon_stats.balloon_high));
 
 static DEVICE_ULONG_ATTR(schedule_delay, 0444, balloon_stats.schedule_delay);
 static DEVICE_ULONG_ATTR(max_schedule_delay, 0644, balloon_stats.max_schedule_delay);
@@ -155,7 +154,7 @@ static DEVICE_BOOL_ATTR(scrub_pages, 0644, xen_scrub_pages);
 static ssize_t target_kb_show(struct device *dev, struct device_attribute *attr,
 			      char *buf)
 {
-	return sprintf(buf, "%lu\n", PAGES2KB(balloon_stats.target_pages));
+	return sprintf(buf, "%lu\n", PG2KB(balloon_stats.target_pages));
 }
 
 static ssize_t target_kb_store(struct device *dev,
diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h
index 7dccb66474f7..3a30e0cb3bee 100644
--- a/include/trace/events/writeback.h
+++ b/include/trace/events/writeback.h
@@ -5,6 +5,7 @@
 #if !defined(_TRACE_WRITEBACK_H) || defined(TRACE_HEADER_MULTI_READ)
 #define _TRACE_WRITEBACK_H
 
+#include <linux/mm.h>
 #include <linux/tracepoint.h>
 #include <linux/backing-dev.h>
 #include <linux/writeback.h>
@@ -570,8 +571,6 @@ TRACE_EVENT(global_dirty_state,
 	)
 );
 
-#define KBps(x)			((x) << (PAGE_SHIFT - 10))
-
 TRACE_EVENT(bdi_dirty_ratelimit,
 
 	TP_PROTO(struct bdi_writeback *wb,
@@ -593,13 +592,13 @@ TRACE_EVENT(bdi_dirty_ratelimit,
 
 	TP_fast_assign(
 		strscpy_pad(__entry->bdi, bdi_dev_name(wb->bdi), 32);
-		__entry->write_bw	= KBps(wb->write_bandwidth);
-		__entry->avg_write_bw	= KBps(wb->avg_write_bandwidth);
-		__entry->dirty_rate	= KBps(dirty_rate);
-		__entry->dirty_ratelimit = KBps(wb->dirty_ratelimit);
-		__entry->task_ratelimit	= KBps(task_ratelimit);
+		__entry->write_bw	= PG2KB(wb->write_bandwidth);
+		__entry->avg_write_bw	= PG2KB(wb->avg_write_bandwidth);
+		__entry->dirty_rate	= PG2KB(dirty_rate);
+		__entry->dirty_ratelimit = PG2KB(wb->dirty_ratelimit);
+		__entry->task_ratelimit	= PG2KB(task_ratelimit);
 		__entry->balanced_dirty_ratelimit =
-					KBps(wb->balanced_dirty_ratelimit);
+					PG2KB(wb->balanced_dirty_ratelimit);
 		__entry->cgroup_ino	= __trace_wb_assign_cgroup(wb);
 	),
 
@@ -666,8 +665,8 @@ TRACE_EVENT(balance_dirty_pages,
 		__entry->bdi_setpoint	= __entry->setpoint *
 						bdi_thresh / (thresh + 1);
 		__entry->bdi_dirty	= bdi_dirty;
-		__entry->dirty_ratelimit = KBps(dirty_ratelimit);
-		__entry->task_ratelimit	= KBps(task_ratelimit);
+		__entry->dirty_ratelimit = PG2KB(dirty_ratelimit);
+		__entry->task_ratelimit	= PG2KB(task_ratelimit);
 		__entry->dirtied	= dirtied;
 		__entry->dirtied_pause	= current->nr_dirtied_pause;
 		__entry->think		= current->dirty_paused_when == 0 ? 0 :
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c
index fa6deda894a1..b1bbc8f39171 100644
--- a/kernel/debug/kdb/kdb_main.c
+++ b/kernel/debug/kdb/kdb_main.c
@@ -2522,10 +2522,9 @@ static int kdb_summary(int argc, const char **argv)
 		LOAD_INT(val.loads[2]), LOAD_FRAC(val.loads[2]));
 
 	/* Display in kilobytes */
-#define K(x) ((x) << (PAGE_SHIFT - 10))
 	kdb_printf("\nMemTotal:       %8lu kB\nMemFree:        %8lu kB\n"
 		   "Buffers:        %8lu kB\n",
-		   K(val.totalram), K(val.freeram), K(val.bufferram));
+		   PG2KB(val.totalram), PG2KB(val.freeram), PG2KB(val.bufferram));
 	return 0;
 }
 
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index 4a9d4e27d0d9..b1d9c7bb35b3 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -33,8 +33,6 @@ LIST_HEAD(bdi_list);
 /* bdi_wq serves all asynchronous writeback tasks */
 struct workqueue_struct *bdi_wq;
 
-#define K(x) ((x) << (PAGE_SHIFT - 10))
-
 #ifdef CONFIG_DEBUG_FS
 #include <linux/debugfs.h>
 #include <linux/seq_file.h>
@@ -87,14 +85,14 @@ static int bdi_debug_stats_show(struct seq_file *m, void *v)
 		   "b_dirty_time:       %10lu\n"
 		   "bdi_list:           %10u\n"
 		   "state:              %10lx\n",
-		   (unsigned long) K(wb_stat(wb, WB_WRITEBACK)),
-		   (unsigned long) K(wb_stat(wb, WB_RECLAIMABLE)),
-		   K(wb_thresh),
-		   K(dirty_thresh),
-		   K(background_thresh),
-		   (unsigned long) K(wb_stat(wb, WB_DIRTIED)),
-		   (unsigned long) K(wb_stat(wb, WB_WRITTEN)),
-		   (unsigned long) K(wb->write_bandwidth),
+		   (unsigned long) PG2KB(wb_stat(wb, WB_WRITEBACK)),
+		   (unsigned long) PG2KB(wb_stat(wb, WB_RECLAIMABLE)),
+		   PG2KB(wb_thresh),
+		   PG2KB(dirty_thresh),
+		   PG2KB(background_thresh),
+		   (unsigned long) PG2KB(wb_stat(wb, WB_DIRTIED)),
+		   (unsigned long) PG2KB(wb_stat(wb, WB_WRITTEN)),
+		   (unsigned long) PG2KB(wb->write_bandwidth),
 		   nr_dirty,
 		   nr_io,
 		   nr_more_io,
@@ -157,7 +155,7 @@ static ssize_t name##_show(struct device *dev,				\
 }									\
 static DEVICE_ATTR_RW(name);
 
-BDI_SHOW(read_ahead_kb, K(bdi->ra_pages))
+BDI_SHOW(read_ahead_kb, PG2KB(bdi->ra_pages))
 
 static ssize_t min_ratio_store(struct device *dev,
 		struct device_attribute *attr, const char *buf, size_t count)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 47dc4959ead8..5071380c77f0 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -53,6 +53,7 @@
 #include <linux/fs.h>
 #include <linux/seq_file.h>
 #include <linux/vmpressure.h>
+#include <linux/mm.h>
 #include <linux/mm_inline.h>
 #include <linux/swap_cgroup.h>
 #include <linux/cpu.h>
@@ -1471,7 +1472,6 @@ static char *memory_stat_format(struct mem_cgroup *memcg)
 	return s.buffer;
 }
 
-#define K(x) ((x) << (PAGE_SHIFT-10))
 /**
  * mem_cgroup_print_oom_context: Print OOM information relevant to
  * memory controller.
@@ -1507,19 +1507,19 @@ void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg)
 	char *buf;
 
 	pr_info("memory: usage %llukB, limit %llukB, failcnt %lu\n",
-		K((u64)page_counter_read(&memcg->memory)),
-		K((u64)READ_ONCE(memcg->memory.max)), memcg->memory.failcnt);
+		PG2KB((u64)page_counter_read(&memcg->memory)),
+		PG2KB((u64)READ_ONCE(memcg->memory.max)), memcg->memory.failcnt);
 	if (cgroup_subsys_on_dfl(memory_cgrp_subsys))
 		pr_info("swap: usage %llukB, limit %llukB, failcnt %lu\n",
-			K((u64)page_counter_read(&memcg->swap)),
-			K((u64)READ_ONCE(memcg->swap.max)), memcg->swap.failcnt);
+			PG2KB((u64)page_counter_read(&memcg->swap)),
+			PG2KB((u64)READ_ONCE(memcg->swap.max)), memcg->swap.failcnt);
 	else {
 		pr_info("memory+swap: usage %llukB, limit %llukB, failcnt %lu\n",
-			K((u64)page_counter_read(&memcg->memsw)),
-			K((u64)memcg->memsw.max), memcg->memsw.failcnt);
+			PG2KB((u64)page_counter_read(&memcg->memsw)),
+			PG2KB((u64)memcg->memsw.max), memcg->memsw.failcnt);
 		pr_info("kmem: usage %llukB, limit %llukB, failcnt %lu\n",
-			K((u64)page_counter_read(&memcg->kmem)),
-			K((u64)memcg->kmem.max), memcg->kmem.failcnt);
+			PG2KB((u64)page_counter_read(&memcg->kmem)),
+			PG2KB((u64)memcg->kmem.max), memcg->kmem.failcnt);
 	}
 
 	pr_info("Memory cgroup stats for ");
diff --git a/mm/oom_kill.c b/mm/oom_kill.c
index 431d38c3bba8..9c7a6ec4b298 100644
--- a/mm/oom_kill.c
+++ b/mm/oom_kill.c
@@ -485,8 +485,6 @@ static DECLARE_WAIT_QUEUE_HEAD(oom_victims_wait);
 
 static bool oom_killer_disabled __read_mostly;
 
-#define K(x) ((x) << (PAGE_SHIFT-10))
-
 /*
  * task->mm can be NULL if the task is the exited group leader.  So to
  * determine whether the task is using a particular mm, we examine all the
@@ -599,9 +597,9 @@ static bool oom_reap_task_mm(struct task_struct *tsk, struct mm_struct *mm)
 
 	pr_info("oom_reaper: reaped process %d (%s), now anon-rss:%lukB, file-rss:%lukB, shmem-rss:%lukB\n",
 			task_pid_nr(tsk), tsk->comm,
-			K(get_mm_counter(mm, MM_ANONPAGES)),
-			K(get_mm_counter(mm, MM_FILEPAGES)),
-			K(get_mm_counter(mm, MM_SHMEMPAGES)));
+			PG2KB(get_mm_counter(mm, MM_ANONPAGES)),
+			PG2KB(get_mm_counter(mm, MM_FILEPAGES)),
+			PG2KB(get_mm_counter(mm, MM_SHMEMPAGES)));
 out_finish:
 	trace_finish_task_reaping(tsk->pid);
 out_unlock:
@@ -894,10 +892,10 @@ static void __oom_kill_process(struct task_struct *victim, const char *message)
 	do_send_sig_info(SIGKILL, SEND_SIG_PRIV, victim, PIDTYPE_TGID);
 	mark_oom_victim(victim);
 	pr_err("%s: Killed process %d (%s) total-vm:%lukB, anon-rss:%lukB, file-rss:%lukB, shmem-rss:%lukB, UID:%u pgtables:%lukB oom_score_adj:%hd\n",
-		message, task_pid_nr(victim), victim->comm, K(mm->total_vm),
-		K(get_mm_counter(mm, MM_ANONPAGES)),
-		K(get_mm_counter(mm, MM_FILEPAGES)),
-		K(get_mm_counter(mm, MM_SHMEMPAGES)),
+		message, task_pid_nr(victim), victim->comm, PG2KB(mm->total_vm),
+		PG2KB(get_mm_counter(mm, MM_ANONPAGES)),
+		PG2KB(get_mm_counter(mm, MM_FILEPAGES)),
+		PG2KB(get_mm_counter(mm, MM_SHMEMPAGES)),
 		from_kuid(&init_user_ns, task_uid(victim)),
 		mm_pgtables_bytes(mm) >> 10, victim->signal->oom_score_adj);
 	task_unlock(victim);
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 3b610b05d9b8..5fad2f6d7d5f 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5836,8 +5836,6 @@ static bool show_mem_node_skip(unsigned int flags, int nid, nodemask_t *nodemask
 	return !node_isset(nid, *nodemask);
 }
 
-#define K(x) ((x) << (PAGE_SHIFT-10))
-
 static void show_migration_types(unsigned char type)
 {
 	static const char types[MIGRATE_TYPES] = {
@@ -5946,28 +5944,28 @@ void show_free_areas(unsigned int filter, nodemask_t *nodemask)
 			" all_unreclaimable? %s"
 			"\n",
 			pgdat->node_id,
-			K(node_page_state(pgdat, NR_ACTIVE_ANON)),
-			K(node_page_state(pgdat, NR_INACTIVE_ANON)),
-			K(node_page_state(pgdat, NR_ACTIVE_FILE)),
-			K(node_page_state(pgdat, NR_INACTIVE_FILE)),
-			K(node_page_state(pgdat, NR_UNEVICTABLE)),
-			K(node_page_state(pgdat, NR_ISOLATED_ANON)),
-			K(node_page_state(pgdat, NR_ISOLATED_FILE)),
-			K(node_page_state(pgdat, NR_FILE_MAPPED)),
-			K(node_page_state(pgdat, NR_FILE_DIRTY)),
-			K(node_page_state(pgdat, NR_WRITEBACK)),
-			K(node_page_state(pgdat, NR_SHMEM)),
+			PG2KB(node_page_state(pgdat, NR_ACTIVE_ANON)),
+			PG2KB(node_page_state(pgdat, NR_INACTIVE_ANON)),
+			PG2KB(node_page_state(pgdat, NR_ACTIVE_FILE)),
+			PG2KB(node_page_state(pgdat, NR_INACTIVE_FILE)),
+			PG2KB(node_page_state(pgdat, NR_UNEVICTABLE)),
+			PG2KB(node_page_state(pgdat, NR_ISOLATED_ANON)),
+			PG2KB(node_page_state(pgdat, NR_ISOLATED_FILE)),
+			PG2KB(node_page_state(pgdat, NR_FILE_MAPPED)),
+			PG2KB(node_page_state(pgdat, NR_FILE_DIRTY)),
+			PG2KB(node_page_state(pgdat, NR_WRITEBACK)),
+			PG2KB(node_page_state(pgdat, NR_SHMEM)),
 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
-			K(node_page_state(pgdat, NR_SHMEM_THPS)),
-			K(node_page_state(pgdat, NR_SHMEM_PMDMAPPED)),
-			K(node_page_state(pgdat, NR_ANON_THPS)),
+			PG2KB(node_page_state(pgdat, NR_SHMEM_THPS)),
+			PG2KB(node_page_state(pgdat, NR_SHMEM_PMDMAPPED)),
+			PG2KB(node_page_state(pgdat, NR_ANON_THPS)),
 #endif
-			K(node_page_state(pgdat, NR_WRITEBACK_TEMP)),
+			PG2KB(node_page_state(pgdat, NR_WRITEBACK_TEMP)),
 			node_page_state(pgdat, NR_KERNEL_STACK_KB),
 #ifdef CONFIG_SHADOW_CALL_STACK
 			node_page_state(pgdat, NR_KERNEL_SCS_KB),
 #endif
-			K(node_page_state(pgdat, NR_PAGETABLE)),
+			PG2KB(node_page_state(pgdat, NR_PAGETABLE)),
 			pgdat->kswapd_failures >= MAX_RECLAIM_RETRIES ?
 				"yes" : "no");
 	}
@@ -6005,24 +6003,24 @@ void show_free_areas(unsigned int filter, nodemask_t *nodemask)
 			" free_cma:%lukB"
 			"\n",
 			zone->name,
-			K(zone_page_state(zone, NR_FREE_PAGES)),
-			K(min_wmark_pages(zone)),
-			K(low_wmark_pages(zone)),
-			K(high_wmark_pages(zone)),
-			K(zone->nr_reserved_highatomic),
-			K(zone_page_state(zone, NR_ZONE_ACTIVE_ANON)),
-			K(zone_page_state(zone, NR_ZONE_INACTIVE_ANON)),
-			K(zone_page_state(zone, NR_ZONE_ACTIVE_FILE)),
-			K(zone_page_state(zone, NR_ZONE_INACTIVE_FILE)),
-			K(zone_page_state(zone, NR_ZONE_UNEVICTABLE)),
-			K(zone_page_state(zone, NR_ZONE_WRITE_PENDING)),
-			K(zone->present_pages),
-			K(zone_managed_pages(zone)),
-			K(zone_page_state(zone, NR_MLOCK)),
-			K(zone_page_state(zone, NR_BOUNCE)),
-			K(free_pcp),
-			K(this_cpu_read(zone->per_cpu_pageset->count)),
-			K(zone_page_state(zone, NR_FREE_CMA_PAGES)));
+			PG2KB(zone_page_state(zone, NR_FREE_PAGES)),
+			PG2KB(min_wmark_pages(zone)),
+			PG2KB(low_wmark_pages(zone)),
+			PG2KB(high_wmark_pages(zone)),
+			PG2KB(zone->nr_reserved_highatomic),
+			PG2KB(zone_page_state(zone, NR_ZONE_ACTIVE_ANON)),
+			PG2KB(zone_page_state(zone, NR_ZONE_INACTIVE_ANON)),
+			PG2KB(zone_page_state(zone, NR_ZONE_ACTIVE_FILE)),
+			PG2KB(zone_page_state(zone, NR_ZONE_INACTIVE_FILE)),
+			PG2KB(zone_page_state(zone, NR_ZONE_UNEVICTABLE)),
+			PG2KB(zone_page_state(zone, NR_ZONE_WRITE_PENDING)),
+			PG2KB(zone->present_pages),
+			PG2KB(zone_managed_pages(zone)),
+			PG2KB(zone_page_state(zone, NR_MLOCK)),
+			PG2KB(zone_page_state(zone, NR_BOUNCE)),
+			PG2KB(free_pcp),
+			PG2KB(this_cpu_read(zone->per_cpu_pageset->count)),
+			PG2KB(zone_page_state(zone, NR_FREE_CMA_PAGES)));
 		printk("lowmem_reserve[]:");
 		for (i = 0; i < MAX_NR_ZONES; i++)
 			printk(KERN_CONT " %ld", zone->lowmem_reserve[i]);
@@ -6056,11 +6054,11 @@ void show_free_areas(unsigned int filter, nodemask_t *nodemask)
 		spin_unlock_irqrestore(&zone->lock, flags);
 		for (order = 0; order < MAX_ORDER; order++) {
 			printk(KERN_CONT "%lu*%lukB ",
-			       nr[order], K(1UL) << order);
+			       nr[order], PG2KB(1UL) << order);
 			if (nr[order])
 				show_migration_types(types[order]);
 		}
-		printk(KERN_CONT "= %lukB\n", K(total));
+		printk(KERN_CONT "= %lukB\n", PG2KB(total));
 	}
 
 	hugetlb_show_meminfo();
@@ -8136,7 +8134,7 @@ unsigned long free_reserved_area(void *start, void *end, int poison, const char
 	}
 
 	if (pages && s)
-		pr_info("Freeing %s memory: %ldK\n", s, K(pages));
+		pr_info("Freeing %s memory: %ldK\n", s, PG2KB(pages));
 
 	return pages;
 }
@@ -8181,13 +8179,13 @@ void __init mem_init_print_info(void)
 		", %luK highmem"
 #endif
 		")\n",
-		K(nr_free_pages()), K(physpages),
+		PG2KB(nr_free_pages()), PG2KB(physpages),
 		codesize >> 10, datasize >> 10, rosize >> 10,
 		(init_data_size + init_code_size) >> 10, bss_size >> 10,
-		K(physpages - totalram_pages() - totalcma_pages),
-		K(totalcma_pages)
+		PG2KB(physpages - totalram_pages() - totalcma_pages),
+		PG2KB(totalcma_pages)
 #ifdef	CONFIG_HIGHMEM
-		, K(totalhigh_pages())
+		, PG2KB(totalhigh_pages())
 #endif
 		);
 }
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [RFC v2 PATCH 3/3] mm: replace open-coded PG2KB/KB2PG variants with macros
  2021-09-19 13:12 [RFC v2 PATCH 0/3] mm: common PAGE_SIZE shift macros Oleksandr Natalenko
  2021-09-19 13:12 ` [RFC v2 PATCH 1/3] mm: add PG2KB/KB2PG helper macros Oleksandr Natalenko
  2021-09-19 13:12 ` [RFC v2 PATCH 2/3] mm: replace custom PG2KB/KB2PG macros with common ones Oleksandr Natalenko
@ 2021-09-19 13:12 ` Oleksandr Natalenko
  2 siblings, 0 replies; 8+ messages in thread
From: Oleksandr Natalenko @ 2021-09-19 13:12 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-mm, Andrew Morton, Vlastimil Babka, Matthew Wilcox,
	Greg Kroah-Hartman, Miaohe Lin, Michal Hocko, Mel Gorman,
	Stephen Rothwell, David Laight

Signed-off-by: Oleksandr Natalenko <oleksandr@natalenko.name>
---
 arch/alpha/kernel/setup.c                     |  3 +--
 arch/mips/mm/init.c                           |  2 +-
 arch/x86/kernel/cpu/mtrr/cleanup.c            | 17 +++++++++--------
 block/blk-sysfs.c                             |  9 +++++----
 drivers/gpu/drm/v3d/v3d_debugfs.c             |  3 ++-
 drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c |  5 +++--
 drivers/md/md-bitmap.c                        |  4 ++--
 fs/ceph/addr.c                                |  2 +-
 fs/ceph/super.h                               |  3 ++-
 fs/fs-writeback.c                             |  2 +-
 fs/nfs/write.c                                |  4 ++--
 fs/nfsd/nfscache.c                            |  3 ++-
 fs/proc/meminfo.c                             |  4 ++--
 fs/proc/task_mmu.c                            |  3 ++-
 kernel/events/core.c                          |  2 +-
 kernel/fork.c                                 |  2 +-
 mm/backing-dev.c                              |  2 +-
 mm/hugetlb.c                                  |  2 +-
 mm/mmap.c                                     |  6 +++---
 mm/nommu.c                                    |  4 ++--
 mm/page-writeback.c                           |  4 ++--
 mm/page_alloc.c                               |  2 +-
 mm/shmem.c                                    |  3 +--
 mm/swap_state.c                               |  5 ++---
 mm/swapfile.c                                 | 11 +++++------
 mm/util.c                                     |  6 +++---
 26 files changed, 58 insertions(+), 55 deletions(-)

diff --git a/arch/alpha/kernel/setup.c b/arch/alpha/kernel/setup.c
index b4fbbba30aa2..c4282224c950 100644
--- a/arch/alpha/kernel/setup.c
+++ b/arch/alpha/kernel/setup.c
@@ -355,8 +355,7 @@ setup_memory(void *kernel_end)
 	if (mem_size_limit && max_low_pfn >= mem_size_limit)
 	{
 		printk("setup: forcing memory size to %ldK (from %ldK).\n",
-		       mem_size_limit << (PAGE_SHIFT - 10),
-		       max_low_pfn    << (PAGE_SHIFT - 10));
+		       PG2KB(mem_size_limit), PG2KB(max_low_pfn));
 		max_low_pfn = mem_size_limit;
 	}
 
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 19347dc6bbf8..351a44437377 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -414,7 +414,7 @@ void __init paging_init(void)
 	if (cpu_has_dc_aliases && max_low_pfn != highend_pfn) {
 		printk(KERN_WARNING "This processor doesn't support highmem."
 		       " %ldk highmem ignored\n",
-		       (highend_pfn - max_low_pfn) << (PAGE_SHIFT - 10));
+		       PG2KB(highend_pfn - max_low_pfn));
 		max_zone_pfns[ZONE_HIGHMEM] = max_low_pfn;
 	}
 #endif
diff --git a/arch/x86/kernel/cpu/mtrr/cleanup.c b/arch/x86/kernel/cpu/mtrr/cleanup.c
index b5f43049fa5f..327aef0ff945 100644
--- a/arch/x86/kernel/cpu/mtrr/cleanup.c
+++ b/arch/x86/kernel/cpu/mtrr/cleanup.c
@@ -18,6 +18,7 @@
  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 #include <linux/init.h>
+#include <linux/mm.h>
 #include <linux/pci.h>
 #include <linux/smp.h>
 #include <linux/cpu.h>
@@ -204,8 +205,8 @@ static void __init
 save_var_mtrr(unsigned int reg, unsigned long basek, unsigned long sizek,
 	      unsigned char type)
 {
-	range_state[reg].base_pfn = basek >> (PAGE_SHIFT - 10);
-	range_state[reg].size_pfn = sizek >> (PAGE_SHIFT - 10);
+	range_state[reg].base_pfn = KB2PG(basek);
+	range_state[reg].size_pfn = KB2PG(sizek);
 	range_state[reg].type = type;
 }
 
@@ -216,8 +217,8 @@ static void __init set_var_mtrr_all(unsigned int address_bits)
 	unsigned int reg;
 
 	for (reg = 0; reg < num_var_ranges; reg++) {
-		basek = range_state[reg].base_pfn << (PAGE_SHIFT - 10);
-		sizek = range_state[reg].size_pfn << (PAGE_SHIFT - 10);
+		basek = PG2KB(range_state[reg].base_pfn);
+		sizek = PG2KB(range_state[reg].size_pfn);
 		type = range_state[reg].type;
 
 		set_var_mtrr(reg, basek, sizek, type, address_bits);
@@ -415,8 +416,8 @@ set_var_mtrr_range(struct var_mtrr_state *state, unsigned long base_pfn,
 	if (state->reg >= num_var_ranges)
 		return;
 
-	basek = base_pfn << (PAGE_SHIFT - 10);
-	sizek = size_pfn << (PAGE_SHIFT - 10);
+	basek = PG2KB(base_pfn);
+	sizek = PG2KB(size_pfn);
 
 	/* See if I can merge with the last range: */
 	if ((basek <= 1024) ||
@@ -533,12 +534,12 @@ static void __init print_out_mtrr_range_state(void)
 
 	for (i = 0; i < num_var_ranges; i++) {
 
-		size_base = range_state[i].size_pfn << (PAGE_SHIFT - 10);
+		size_base = PG2KB(range_state[i].size_pfn);
 		if (!size_base)
 			continue;
 
 		size_base = to_size_factor(size_base, &size_factor);
-		start_base = range_state[i].base_pfn << (PAGE_SHIFT - 10);
+		start_base = PG2KB(range_state[i].base_pfn);
 		start_base = to_size_factor(start_base, &start_factor);
 		type = range_state[i].type;
 
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
index 614d9d47de36..25e0bcc1208f 100644
--- a/block/blk-sysfs.c
+++ b/block/blk-sysfs.c
@@ -4,6 +4,7 @@
  */
 #include <linux/kernel.h>
 #include <linux/slab.h>
+#include <linux/mm.h>
 #include <linux/module.h>
 #include <linux/bio.h>
 #include <linux/blkdev.h>
@@ -92,7 +93,7 @@ static ssize_t queue_ra_show(struct request_queue *q, char *page)
 
 	if (!q->disk)
 		return -EINVAL;
-	ra_kb = q->disk->bdi->ra_pages << (PAGE_SHIFT - 10);
+	ra_kb = PG2KB(q->disk->bdi->ra_pages);
 	return queue_var_show(ra_kb, page);
 }
 
@@ -107,7 +108,7 @@ queue_ra_store(struct request_queue *q, const char *page, size_t count)
 	ret = queue_var_store(&ra_kb, page, count);
 	if (ret < 0)
 		return ret;
-	q->disk->bdi->ra_pages = ra_kb >> (PAGE_SHIFT - 10);
+	q->disk->bdi->ra_pages = KB2PG(ra_kb);
 	return ret;
 }
 
@@ -240,7 +241,7 @@ queue_max_sectors_store(struct request_queue *q, const char *page, size_t count)
 {
 	unsigned long max_sectors_kb,
 		max_hw_sectors_kb = queue_max_hw_sectors(q) >> 1,
-			page_kb = 1 << (PAGE_SHIFT - 10);
+			page_kb = PG2KB(1);
 	ssize_t ret = queue_var_store(&max_sectors_kb, page, count);
 
 	if (ret < 0)
@@ -255,7 +256,7 @@ queue_max_sectors_store(struct request_queue *q, const char *page, size_t count)
 	spin_lock_irq(&q->queue_lock);
 	q->limits.max_sectors = max_sectors_kb << 1;
 	if (q->disk)
-		q->disk->bdi->io_pages = max_sectors_kb >> (PAGE_SHIFT - 10);
+		q->disk->bdi->io_pages = KB2PG(max_sectors_kb);
 	spin_unlock_irq(&q->queue_lock);
 
 	return ret;
diff --git a/drivers/gpu/drm/v3d/v3d_debugfs.c b/drivers/gpu/drm/v3d/v3d_debugfs.c
index e76b24bb8828..29461f9056b3 100644
--- a/drivers/gpu/drm/v3d/v3d_debugfs.c
+++ b/drivers/gpu/drm/v3d/v3d_debugfs.c
@@ -4,6 +4,7 @@
 #include <linux/circ_buf.h>
 #include <linux/ctype.h>
 #include <linux/debugfs.h>
+#include <linux/mm.h>
 #include <linux/pm_runtime.h>
 #include <linux/seq_file.h>
 
@@ -203,7 +204,7 @@ static int v3d_debugfs_bo_stats(struct seq_file *m, void *unused)
 	seq_printf(m, "allocated bos:          %d\n",
 		   v3d->bo_stats.num_allocated);
 	seq_printf(m, "allocated bo size (kb): %ld\n",
-		   (long)v3d->bo_stats.pages_allocated << (PAGE_SHIFT - 10));
+		   PG2KB((long)v3d->bo_stats.pages_allocated));
 	mutex_unlock(&v3d->bo_lock);
 
 	return 0;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
index b2c4af331c9d..1083a054d235 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
@@ -32,6 +32,7 @@
 #include <drm/ttm/ttm_bo_driver.h>
 #include <drm/ttm/ttm_placement.h>
 #include <linux/idr.h>
+#include <linux/mm.h>
 #include <linux/spinlock.h>
 #include <linux/kernel.h>
 
@@ -92,14 +93,14 @@ static int vmw_gmrid_man_get_node(struct ttm_resource_manager *man,
 				new_max_pages = gman->max_gmr_pages * 2;
 			if (new_max_pages > gman->max_gmr_pages && new_max_pages >= gman->used_gmr_pages) {
 				DRM_WARN("vmwgfx: increasing guest mob limits to %u kB.\n",
-					 ((new_max_pages) << (PAGE_SHIFT - 10)));
+					 PG2KB(new_max_pages));
 
 				gman->max_gmr_pages = new_max_pages;
 			} else {
 				char buf[256];
 				snprintf(buf, sizeof(buf),
 					 "vmwgfx, error: guest graphics is out of memory (mob limit at: %ukB).\n",
-					 ((gman->max_gmr_pages) << (PAGE_SHIFT - 10)));
+					 PG2KB(gman->max_gmr_pages));
 				vmw_host_printf(buf);
 				DRM_WARN("%s", buf);
 				goto nospace;
diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c
index e29c6298ef5c..85277df1da5a 100644
--- a/drivers/md/md-bitmap.c
+++ b/drivers/md/md-bitmap.c
@@ -17,6 +17,7 @@
  */
 
 #include <linux/blkdev.h>
+#include <linux/mm.h>
 #include <linux/module.h>
 #include <linux/errno.h>
 #include <linux/slab.h>
@@ -2038,8 +2039,7 @@ void md_bitmap_status(struct seq_file *seq, struct bitmap *bitmap)
 		   "%lu%s chunk",
 		   counts->pages - counts->missing_pages,
 		   counts->pages,
-		   (counts->pages - counts->missing_pages)
-		   << (PAGE_SHIFT - 10),
+		   PG2KB(counts->pages - counts->missing_pages),
 		   chunk_kb ? chunk_kb : bitmap->mddev->bitmap_info.chunksize,
 		   chunk_kb ? "KB" : "B");
 	if (bitmap->storage.file) {
diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
index 99b80b5c7a93..e9d296cffb83 100644
--- a/fs/ceph/addr.c
+++ b/fs/ceph/addr.c
@@ -57,7 +57,7 @@
  * accounting is preserved.
  */
 
-#define CONGESTION_ON_THRESH(congestion_kb) (congestion_kb >> (PAGE_SHIFT-10))
+#define CONGESTION_ON_THRESH(congestion_kb) KB2PG(congestion_kb)
 #define CONGESTION_OFF_THRESH(congestion_kb)				\
 	(CONGESTION_ON_THRESH(congestion_kb) -				\
 	 (CONGESTION_ON_THRESH(congestion_kb) >> 2))
diff --git a/fs/ceph/super.h b/fs/ceph/super.h
index a40eb14c282a..328d40843dbc 100644
--- a/fs/ceph/super.h
+++ b/fs/ceph/super.h
@@ -9,6 +9,7 @@
 #include <linux/completion.h>
 #include <linux/exportfs.h>
 #include <linux/fs.h>
+#include <linux/mm.h>
 #include <linux/mempool.h>
 #include <linux/pagemap.h>
 #include <linux/wait.h>
@@ -908,7 +909,7 @@ static inline int default_congestion_kb(void)
 	 * This allows larger machines to have larger/more transfers.
 	 * Limit the default to 256M
 	 */
-	congestion_kb = (16*int_sqrt(totalram_pages())) << (PAGE_SHIFT-10);
+	congestion_kb = PG2KB(16*int_sqrt(totalram_pages()));
 	if (congestion_kb > 256*1024)
 		congestion_kb = 256*1024;
 
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
index 81ec192ce067..1b694e6a27c0 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -34,7 +34,7 @@
 /*
  * 4MB minimal write chunk size
  */
-#define MIN_WRITEBACK_PAGES	(4096UL >> (PAGE_SHIFT - 10))
+#define MIN_WRITEBACK_PAGES	KB2PG(4096UL)
 
 /*
  * Passed into wb_writeback(), essentially a subset of writeback_control
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index eae9bf114041..9b565808c12f 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -401,7 +401,7 @@ static int wb_priority(struct writeback_control *wbc)
 
 int nfs_congestion_kb;
 
-#define NFS_CONGESTION_ON_THRESH 	(nfs_congestion_kb >> (PAGE_SHIFT-10))
+#define NFS_CONGESTION_ON_THRESH 	KB2PG(nfs_congestion_kb)
 #define NFS_CONGESTION_OFF_THRESH	\
 	(NFS_CONGESTION_ON_THRESH - (NFS_CONGESTION_ON_THRESH >> 2))
 
@@ -2173,7 +2173,7 @@ int __init nfs_init_writepagecache(void)
 	 * This allows larger machines to have larger/more transfers.
 	 * Limit the default to 256M
 	 */
-	nfs_congestion_kb = (16*int_sqrt(totalram_pages())) << (PAGE_SHIFT-10);
+	nfs_congestion_kb = PG2KB(16*int_sqrt(totalram_pages()));
 	if (nfs_congestion_kb > 256*1024)
 		nfs_congestion_kb = 256*1024;
 
diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c
index 96cdf77925f3..aeb464f88fa7 100644
--- a/fs/nfsd/nfscache.c
+++ b/fs/nfsd/nfscache.c
@@ -9,6 +9,7 @@
  * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
  */
 
+#include <linux/mm.h>
 #include <linux/sunrpc/svc_xprt.h>
 #include <linux/slab.h>
 #include <linux/vmalloc.h>
@@ -70,7 +71,7 @@ nfsd_cache_size_limit(void)
 	unsigned int limit;
 	unsigned long low_pages = totalram_pages() - totalhigh_pages();
 
-	limit = (16 * int_sqrt(low_pages)) << (PAGE_SHIFT-10);
+	limit = PG2KB(16 * int_sqrt(low_pages));
 	return min_t(unsigned int, limit, 256*1024);
 }
 
diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c
index 6fa761c9cc78..5443be3060a8 100644
--- a/fs/proc/meminfo.c
+++ b/fs/proc/meminfo.c
@@ -25,7 +25,7 @@ void __attribute__((weak)) arch_report_meminfo(struct seq_file *m)
 
 static void show_val_kb(struct seq_file *m, const char *s, unsigned long num)
 {
-	seq_put_decimal_ull_width(m, s, num << (PAGE_SHIFT - 10), 8);
+	seq_put_decimal_ull_width(m, s, PG2KB(num), 8);
 	seq_write(m, " kB\n", 4);
 }
 
@@ -124,7 +124,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
 
 #ifdef CONFIG_MEMORY_FAILURE
 	seq_printf(m, "HardwareCorrupted: %5lu kB\n",
-		   atomic_long_read(&num_poisoned_pages) << (PAGE_SHIFT - 10));
+		   PG2KB(atomic_long_read(&num_poisoned_pages)));
 #endif
 
 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index cf25be3e0321..11798f84292c 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -3,6 +3,7 @@
 #include <linux/vmacache.h>
 #include <linux/hugetlb.h>
 #include <linux/huge_mm.h>
+#include <linux/mm.h>
 #include <linux/mount.h>
 #include <linux/seq_file.h>
 #include <linux/highmem.h>
@@ -26,7 +27,7 @@
 #include "internal.h"
 
 #define SEQ_PUT_DEC(str, val) \
-		seq_put_decimal_ull_width(m, str, (val) << (PAGE_SHIFT-10), 8)
+		seq_put_decimal_ull_width(m, str, PG2KB(val), 8)
 void task_mem(struct seq_file *m, struct mm_struct *mm)
 {
 	unsigned long text, lib, swap, anon, file, shmem;
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 349f80aa9e7d..ee290e405d00 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -6267,7 +6267,7 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)
 	user_extra = nr_pages + 1;
 
 accounting:
-	user_lock_limit = sysctl_perf_event_mlock >> (PAGE_SHIFT - 10);
+	user_lock_limit = KB2PG(sysctl_perf_event_mlock);
 
 	/*
 	 * Increase the limit linearly with more CPUs:
diff --git a/kernel/fork.c b/kernel/fork.c
index 723125f2cbed..04302967685f 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -2325,7 +2325,7 @@ static __latent_entropy struct task_struct *copy_process(
 	}
 
 	p->nr_dirtied = 0;
-	p->nr_dirtied_pause = 128 >> (PAGE_SHIFT - 10);
+	p->nr_dirtied_pause = KB2PG(128);
 	p->dirty_paused_when = 0;
 
 	p->pdeath_signal = 0;
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index b1d9c7bb35b3..c0820114e1dd 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -140,7 +140,7 @@ static ssize_t read_ahead_kb_store(struct device *dev,
 	if (ret < 0)
 		return ret;
 
-	bdi->ra_pages = read_ahead_kb >> (PAGE_SHIFT - 10);
+	bdi->ra_pages = KB2PG(read_ahead_kb);
 
 	return count;
 }
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 6378c1066459..f496cef8abef 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -4050,7 +4050,7 @@ void hugetlb_show_meminfo(void)
 void hugetlb_report_usage(struct seq_file *m, struct mm_struct *mm)
 {
 	seq_printf(m, "HugetlbPages:\t%8lu kB\n",
-		   atomic_long_read(&mm->hugetlb_usage) << (PAGE_SHIFT - 10));
+		   PG2KB(atomic_long_read(&mm->hugetlb_usage)));
 }
 
 /* Return the number pages of memory we physically have, in PAGE_SIZE units. */
diff --git a/mm/mmap.c b/mm/mmap.c
index b22a07f5e761..95c4883d2a87 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -3703,7 +3703,7 @@ static int init_user_reserve(void)
 {
 	unsigned long free_kbytes;
 
-	free_kbytes = global_zone_page_state(NR_FREE_PAGES) << (PAGE_SHIFT - 10);
+	free_kbytes = PG2KB(global_zone_page_state(NR_FREE_PAGES));
 
 	sysctl_user_reserve_kbytes = min(free_kbytes / 32, 1UL << 17);
 	return 0;
@@ -3724,7 +3724,7 @@ static int init_admin_reserve(void)
 {
 	unsigned long free_kbytes;
 
-	free_kbytes = global_zone_page_state(NR_FREE_PAGES) << (PAGE_SHIFT - 10);
+	free_kbytes = PG2KB(global_zone_page_state(NR_FREE_PAGES));
 
 	sysctl_admin_reserve_kbytes = min(free_kbytes / 32, 1UL << 13);
 	return 0;
@@ -3768,7 +3768,7 @@ static int reserve_mem_notifier(struct notifier_block *nb,
 
 		break;
 	case MEM_OFFLINE:
-		free_kbytes = global_zone_page_state(NR_FREE_PAGES) << (PAGE_SHIFT - 10);
+		free_kbytes = PG2KB(global_zone_page_state(NR_FREE_PAGES));
 
 		if (sysctl_user_reserve_kbytes > free_kbytes) {
 			init_user_reserve();
diff --git a/mm/nommu.c b/mm/nommu.c
index 8943dc0e2132..783526838176 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -1803,7 +1803,7 @@ static int __meminit init_user_reserve(void)
 {
 	unsigned long free_kbytes;
 
-	free_kbytes = global_zone_page_state(NR_FREE_PAGES) << (PAGE_SHIFT - 10);
+	free_kbytes = PG2KB(global_zone_page_state(NR_FREE_PAGES));
 
 	sysctl_user_reserve_kbytes = min(free_kbytes / 32, 1UL << 17);
 	return 0;
@@ -1824,7 +1824,7 @@ static int __meminit init_admin_reserve(void)
 {
 	unsigned long free_kbytes;
 
-	free_kbytes = global_zone_page_state(NR_FREE_PAGES) << (PAGE_SHIFT - 10);
+	free_kbytes = PG2KB(global_zone_page_state(NR_FREE_PAGES));
 
 	sysctl_admin_reserve_kbytes = min(free_kbytes / 32, 1UL << 13);
 	return 0;
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 9c64490171e0..1e3ab56ded46 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -50,7 +50,7 @@
  * Try to keep balance_dirty_pages() call intervals higher than this many pages
  * by raising pause time to max_pause when falls below it.
  */
-#define DIRTY_POLL_THRESH	(128 >> (PAGE_SHIFT - 10))
+#define DIRTY_POLL_THRESH	KB2PG(128)
 
 /*
  * Estimate write bandwidth at 200ms intervals.
@@ -1893,7 +1893,7 @@ void balance_dirty_pages_ratelimited(struct address_space *mapping)
 
 	ratelimit = current->nr_dirtied_pause;
 	if (wb->dirty_exceeded)
-		ratelimit = min(ratelimit, 32 >> (PAGE_SHIFT - 10));
+		ratelimit = min(ratelimit, KB2PG(32));
 
 	preempt_disable();
 	/*
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 5fad2f6d7d5f..8617559ca211 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -8350,7 +8350,7 @@ static void setup_per_zone_lowmem_reserve(void)
 
 static void __setup_per_zone_wmarks(void)
 {
-	unsigned long pages_min = min_free_kbytes >> (PAGE_SHIFT - 10);
+	unsigned long pages_min = KB2PG(min_free_kbytes);
 	unsigned long lowmem_pages = 0;
 	struct zone *zone;
 	unsigned long flags;
diff --git a/mm/shmem.c b/mm/shmem.c
index 6f975d4e08f4..95a9e0e81779 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -3565,8 +3565,7 @@ static int shmem_show_options(struct seq_file *seq, struct dentry *root)
 	struct shmem_sb_info *sbinfo = SHMEM_SB(root->d_sb);
 
 	if (sbinfo->max_blocks != shmem_default_max_blocks())
-		seq_printf(seq, ",size=%luk",
-			sbinfo->max_blocks << (PAGE_SHIFT - 10));
+		seq_printf(seq, ",size=%luk", PG2KB(sbinfo->max_blocks));
 	if (sbinfo->max_inodes != shmem_default_max_inodes())
 		seq_printf(seq, ",nr_inodes=%lu", sbinfo->max_inodes);
 	if (sbinfo->mode != (0777 | S_ISVTX))
diff --git a/mm/swap_state.c b/mm/swap_state.c
index 8d4104242100..0a11ca2aba50 100644
--- a/mm/swap_state.c
+++ b/mm/swap_state.c
@@ -76,9 +76,8 @@ void show_swap_cache_info(void)
 	printk("Swap cache stats: add %lu, delete %lu, find %lu/%lu\n",
 		swap_cache_info.add_total, swap_cache_info.del_total,
 		swap_cache_info.find_success, swap_cache_info.find_total);
-	printk("Free swap  = %ldkB\n",
-		get_nr_swap_pages() << (PAGE_SHIFT - 10));
-	printk("Total swap = %lukB\n", total_swap_pages << (PAGE_SHIFT - 10));
+	printk("Free swap  = %ldkB\n", PG2KB(get_nr_swap_pages()));
+	printk("Total swap = %lukB\n", PG2KB(total_swap_pages));
 }
 
 void *get_shadow_from_swap_cache(swp_entry_t entry)
diff --git a/mm/swapfile.c b/mm/swapfile.c
index e3dcaeecc50f..1a8f95edd3c3 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -2770,8 +2770,8 @@ static int swap_show(struct seq_file *swap, void *v)
 		return 0;
 	}
 
-	bytes = si->pages << (PAGE_SHIFT - 10);
-	inuse = si->inuse_pages << (PAGE_SHIFT - 10);
+	bytes = PG2KB(si->pages);
+	inuse = PG2KB(si->inuse_pages);
 
 	file = si->swap_file;
 	len = seq_file_path(swap, file, " \t\n\\");
@@ -2996,8 +2996,7 @@ static unsigned long read_swap_header(struct swap_info_struct *p,
 	}
 	if (last_page > maxpages) {
 		pr_warn("Truncating oversized swap area, only using %luk out of %luk\n",
-			maxpages << (PAGE_SHIFT - 10),
-			last_page << (PAGE_SHIFT - 10));
+			PG2KB(maxpages), PG2KB(last_page));
 	}
 	if (maxpages > last_page) {
 		maxpages = last_page + 1;
@@ -3338,8 +3337,8 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
 	enable_swap_info(p, prio, swap_map, cluster_info, frontswap_map);
 
 	pr_info("Adding %uk swap on %s.  Priority:%d extents:%d across:%lluk %s%s%s%s%s\n",
-		p->pages<<(PAGE_SHIFT-10), name->name, p->prio,
-		nr_extents, (unsigned long long)span<<(PAGE_SHIFT-10),
+		PG2KB(p->pages), name->name, p->prio,
+		nr_extents, PG2KB((unsigned long long)span),
 		(p->flags & SWP_SOLIDSTATE) ? "SS" : "",
 		(p->flags & SWP_DISCARDABLE) ? "D" : "",
 		(p->flags & SWP_AREA_DISCARD) ? "s" : "",
diff --git a/mm/util.c b/mm/util.c
index 4ac87f1b30f1..6d301ddfc395 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -848,7 +848,7 @@ unsigned long vm_commit_limit(void)
 	unsigned long allowed;
 
 	if (sysctl_overcommit_kbytes)
-		allowed = sysctl_overcommit_kbytes >> (PAGE_SHIFT - 10);
+		allowed = KB2PG(sysctl_overcommit_kbytes);
 	else
 		allowed = ((totalram_pages() - hugetlb_total_pages())
 			   * sysctl_overcommit_ratio / 100);
@@ -921,13 +921,13 @@ int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin)
 	 * Reserve some for root
 	 */
 	if (!cap_sys_admin)
-		allowed -= sysctl_admin_reserve_kbytes >> (PAGE_SHIFT - 10);
+		allowed -= KB2PG(sysctl_admin_reserve_kbytes);
 
 	/*
 	 * Don't let a single process grow so big a user can't recover
 	 */
 	if (mm) {
-		long reserve = sysctl_user_reserve_kbytes >> (PAGE_SHIFT - 10);
+		long reserve = KB2PG(sysctl_user_reserve_kbytes);
 
 		allowed -= min_t(long, mm->total_vm / 32, reserve);
 	}
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [RFC v2 PATCH 1/3] mm: add PG2KB/KB2PG helper macros
  2021-09-19 13:12 ` [RFC v2 PATCH 1/3] mm: add PG2KB/KB2PG helper macros Oleksandr Natalenko
@ 2021-09-19 13:21   ` Greg Kroah-Hartman
  2021-09-19 14:21   ` Matthew Wilcox
  1 sibling, 0 replies; 8+ messages in thread
From: Greg Kroah-Hartman @ 2021-09-19 13:21 UTC (permalink / raw)
  To: Oleksandr Natalenko
  Cc: linux-kernel, linux-mm, Andrew Morton, Vlastimil Babka,
	Matthew Wilcox, Miaohe Lin, Michal Hocko, Mel Gorman,
	Stephen Rothwell, David Laight

On Sun, Sep 19, 2021 at 03:12:46PM +0200, Oleksandr Natalenko wrote:
> Signed-off-by: Oleksandr Natalenko <oleksandr@natalenko.name>

I know I can not take patches without any changelog text.  Perhaps other
maintainers are more lax :(

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC v2 PATCH 1/3] mm: add PG2KB/KB2PG helper macros
  2021-09-19 13:12 ` [RFC v2 PATCH 1/3] mm: add PG2KB/KB2PG helper macros Oleksandr Natalenko
  2021-09-19 13:21   ` Greg Kroah-Hartman
@ 2021-09-19 14:21   ` Matthew Wilcox
  1 sibling, 0 replies; 8+ messages in thread
From: Matthew Wilcox @ 2021-09-19 14:21 UTC (permalink / raw)
  To: Oleksandr Natalenko
  Cc: linux-kernel, linux-mm, Andrew Morton, Vlastimil Babka,
	Greg Kroah-Hartman, Miaohe Lin, Michal Hocko, Mel Gorman,
	Stephen Rothwell, David Laight

On Sun, Sep 19, 2021 at 03:12:46PM +0200, Oleksandr Natalenko wrote:
> +#define PG2KB(x)	((x) << (PAGE_SHIFT - 10))
> +#define KB2PG(x)	((x) >> (PAGE_SHIFT - 10))

This is not an improvement.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC v2 PATCH 2/3] mm: replace custom PG2KB/KB2PG macros with common ones
  2021-09-19 13:12 ` [RFC v2 PATCH 2/3] mm: replace custom PG2KB/KB2PG macros with common ones Oleksandr Natalenko
@ 2021-09-19 15:35   ` kernel test robot
  2021-09-19 17:13   ` kernel test robot
  1 sibling, 0 replies; 8+ messages in thread
From: kernel test robot @ 2021-09-19 15:35 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 40905 bytes --]

Hi Oleksandr,

[FYI, it's a private test report for your RFC patch.]
[auto build test ERROR on hnaz-mm/master]

url:    https://github.com/0day-ci/linux/commits/Oleksandr-Natalenko/mm-common-PAGE_SIZE-shift-macros/20210919-211421
base:   https://github.com/hnaz/linux-mm master
config: arc-randconfig-r043-20210919 (attached as .config)
compiler: arc-elf-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/c129ed106a8dd29030e8585cb39a779de91aaa6a
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Oleksandr-Natalenko/mm-common-PAGE_SIZE-shift-macros/20210919-211421
        git checkout c129ed106a8dd29030e8585cb39a779de91aaa6a
        # save the attached .config to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=arc prepare

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All error/warnings (new ones prefixed by >>):

   arch/arc/Makefile:26: ** WARNING ** CONFIG_ARC_TUNE_MCPU flag '' is unknown, fallback to ''
   error: no override and no default toolchain set
   init/Kconfig:70:warning: 'RUSTC_VERSION': number is invalid
   In file included from ./arch/arc/include/generated/asm/div64.h:1,
                    from include/linux/math.h:5,
                    from include/linux/kernel.h:15,
                    from include/linux/list.h:9,
                    from include/linux/preempt.h:11,
                    from include/linux/percpu.h:6,
                    from include/linux/arch_topology.h:9,
                    from include/linux/topology.h:30,
                    from include/linux/gfp.h:9,
                    from include/linux/mm.h:10,
                    from arch/arc/include/asm/arcregs.h:149,
                    from arch/arc/include/asm/irqflags-arcv2.h:9,
                    from arch/arc/include/asm/irqflags.h:13,
                    from include/linux/irqflags.h:16,
                    from arch/arc/include/asm/smp.h:102,
                    from arch/arc/include/asm/cmpxchg.h:13,
                    from arch/arc/include/asm/atomic.h:13,
                    from include/linux/atomic.h:7,
                    from include/asm-generic/bitops/lock.h:5,
                    from arch/arc/include/asm/bitops.h:188,
                    from include/linux/bitops.h:33,
                    from include/linux/log2.h:12,
                    from kernel/bounds.c:13:
   include/linux/math64.h: In function 'div_u64_rem':
>> include/asm-generic/div64.h:224:13: error: implicit declaration of function 'is_power_of_2' [-Werror=implicit-function-declaration]
     224 |             is_power_of_2(__base)) {                    \
         |             ^~~~~~~~~~~~~
   include/linux/math64.h:92:22: note: in expansion of macro 'do_div'
      92 |         *remainder = do_div(dividend, divisor);
         |                      ^~~~~~
>> include/asm-generic/div64.h:226:25: error: implicit declaration of function 'ilog2' [-Werror=implicit-function-declaration]
     226 |                 (n) >>= ilog2(__base);                  \
         |                         ^~~~~
   include/linux/math64.h:92:22: note: in expansion of macro 'do_div'
      92 |         *remainder = do_div(dividend, divisor);
         |                      ^~~~~~
   In file included from include/asm-generic/preempt.h:5,
                    from ./arch/arc/include/generated/asm/preempt.h:1,
                    from include/linux/preempt.h:78,
                    from include/linux/percpu.h:6,
                    from include/linux/arch_topology.h:9,
                    from include/linux/topology.h:30,
                    from include/linux/gfp.h:9,
                    from include/linux/mm.h:10,
                    from arch/arc/include/asm/arcregs.h:149,
                    from arch/arc/include/asm/irqflags-arcv2.h:9,
                    from arch/arc/include/asm/irqflags.h:13,
                    from include/linux/irqflags.h:16,
                    from arch/arc/include/asm/smp.h:102,
                    from arch/arc/include/asm/cmpxchg.h:13,
                    from arch/arc/include/asm/atomic.h:13,
                    from include/linux/atomic.h:7,
                    from include/asm-generic/bitops/lock.h:5,
                    from arch/arc/include/asm/bitops.h:188,
                    from include/linux/bitops.h:33,
                    from include/linux/log2.h:12,
                    from kernel/bounds.c:13:
   include/linux/thread_info.h: In function 'set_ti_thread_flag':
>> include/linux/thread_info.h:89:9: error: implicit declaration of function 'set_bit' [-Werror=implicit-function-declaration]
      89 |         set_bit(flag, (unsigned long *)&ti->flags);
         |         ^~~~~~~
   include/linux/thread_info.h: In function 'clear_ti_thread_flag':
>> include/linux/thread_info.h:94:9: error: implicit declaration of function 'clear_bit' [-Werror=implicit-function-declaration]
      94 |         clear_bit(flag, (unsigned long *)&ti->flags);
         |         ^~~~~~~~~
   include/linux/thread_info.h: In function 'test_and_set_ti_thread_flag':
>> include/linux/thread_info.h:108:16: error: implicit declaration of function 'test_and_set_bit' [-Werror=implicit-function-declaration]
     108 |         return test_and_set_bit(flag, (unsigned long *)&ti->flags);
         |                ^~~~~~~~~~~~~~~~
   include/linux/thread_info.h: In function 'test_and_clear_ti_thread_flag':
>> include/linux/thread_info.h:113:16: error: implicit declaration of function 'test_and_clear_bit' [-Werror=implicit-function-declaration]
     113 |         return test_and_clear_bit(flag, (unsigned long *)&ti->flags);
         |                ^~~~~~~~~~~~~~~~~~
   include/linux/thread_info.h: In function 'test_ti_thread_flag':
>> include/linux/thread_info.h:118:16: error: implicit declaration of function 'test_bit'; did you mean 'test_taint'? [-Werror=implicit-function-declaration]
     118 |         return test_bit(flag, (unsigned long *)&ti->flags);
         |                ^~~~~~~~
         |                test_taint
   In file included from include/linux/cpumask.h:12,
                    from include/linux/smp.h:13,
                    from include/linux/percpu.h:7,
                    from include/linux/arch_topology.h:9,
                    from include/linux/topology.h:30,
                    from include/linux/gfp.h:9,
                    from include/linux/mm.h:10,
                    from arch/arc/include/asm/arcregs.h:149,
                    from arch/arc/include/asm/irqflags-arcv2.h:9,
                    from arch/arc/include/asm/irqflags.h:13,
                    from include/linux/irqflags.h:16,
                    from arch/arc/include/asm/smp.h:102,
                    from arch/arc/include/asm/cmpxchg.h:13,
                    from arch/arc/include/asm/atomic.h:13,
                    from include/linux/atomic.h:7,
                    from include/asm-generic/bitops/lock.h:5,
                    from arch/arc/include/asm/bitops.h:188,
                    from include/linux/bitops.h:33,
                    from include/linux/log2.h:12,
                    from kernel/bounds.c:13:
   include/linux/bitmap.h: In function 'bitmap_empty':
>> include/linux/bitmap.h:391:16: error: implicit declaration of function 'find_first_bit'; did you mean 'sched_find_first_bit'? [-Werror=implicit-function-declaration]
     391 |         return find_first_bit(src, nbits) == nbits;
         |                ^~~~~~~~~~~~~~
         |                sched_find_first_bit
   include/linux/bitmap.h: In function 'bitmap_full':
>> include/linux/bitmap.h:399:16: error: implicit declaration of function 'find_first_zero_bit' [-Werror=implicit-function-declaration]
     399 |         return find_first_zero_bit(src, nbits) == nbits;
         |                ^~~~~~~~~~~~~~~~~~~
   include/linux/bitmap.h: In function 'bitmap_weight':
>> include/linux/bitmap.h:405:24: error: implicit declaration of function 'hweight_long' [-Werror=implicit-function-declaration]
     405 |                 return hweight_long(*src & BITMAP_LAST_WORD_MASK(nbits));
         |                        ^~~~~~~~~~~~
   include/linux/bitmap.h: In function 'bitmap_set':
>> include/linux/bitmap.h:413:17: error: implicit declaration of function '__set_bit' [-Werror=implicit-function-declaration]
     413 |                 __set_bit(start, map);
         |                 ^~~~~~~~~
   include/linux/bitmap.h: In function 'bitmap_clear':
>> include/linux/bitmap.h:427:17: error: implicit declaration of function '__clear_bit' [-Werror=implicit-function-declaration]
     427 |                 __clear_bit(start, map);
         |                 ^~~~~~~~~~~
   include/linux/bitmap.h: In function 'bitmap_next_clear_region':
>> include/linux/bitmap.h:471:15: error: implicit declaration of function 'find_next_zero_bit' [-Werror=implicit-function-declaration]
     471 |         *rs = find_next_zero_bit(bitmap, end, *rs);
         |               ^~~~~~~~~~~~~~~~~~
>> include/linux/bitmap.h:472:15: error: implicit declaration of function 'find_next_bit' [-Werror=implicit-function-declaration]
     472 |         *re = find_next_bit(bitmap, end, *rs + 1);
         |               ^~~~~~~~~~~~~
   In file included from include/linux/smp_types.h:5,
                    from include/linux/smp.h:15,
                    from include/linux/percpu.h:7,
                    from include/linux/arch_topology.h:9,
                    from include/linux/topology.h:30,
                    from include/linux/gfp.h:9,
                    from include/linux/mm.h:10,
                    from arch/arc/include/asm/arcregs.h:149,
                    from arch/arc/include/asm/irqflags-arcv2.h:9,
                    from arch/arc/include/asm/irqflags.h:13,
                    from include/linux/irqflags.h:16,
                    from arch/arc/include/asm/smp.h:102,
                    from arch/arc/include/asm/cmpxchg.h:13,
                    from arch/arc/include/asm/atomic.h:13,
                    from include/linux/atomic.h:7,
                    from include/asm-generic/bitops/lock.h:5,
                    from arch/arc/include/asm/bitops.h:188,
                    from include/linux/bitops.h:33,
                    from include/linux/log2.h:12,
                    from kernel/bounds.c:13:
   include/linux/llist.h: In function 'llist_del_all':
>> include/linux/llist.h:237:16: error: implicit declaration of function 'xchg' [-Werror=implicit-function-declaration]
     237 |         return xchg(&head->first, NULL);
         |                ^~~~
>> include/linux/llist.h:237:16: warning: returning 'int' from a function with return type 'struct llist_node *' makes pointer from integer without a cast [-Wint-conversion]
     237 |         return xchg(&head->first, NULL);
         |                ^~~~~~~~~~~~~~~~~~~~~~~~
   In file included from <command-line>:
   include/linux/gfp.h: In function 'gfp_migratetype':
>> include/linux/gfp.h:347:63: error: 'MIGRATE_MOVABLE' undeclared (first use in this function)
     347 |         BUILD_BUG_ON((___GFP_MOVABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_MOVABLE);
         |                                                               ^~~~~~~~~~~~~~~
   include/linux/compiler_types.h:302:23: note: in definition of macro '__compiletime_assert'
     302 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:322:9: note: in expansion of macro '_compiletime_assert'
     322 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
      39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      50 |         BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
         |         ^~~~~~~~~~~~~~~~
   include/linux/gfp.h:347:9: note: in expansion of macro 'BUILD_BUG_ON'
     347 |         BUILD_BUG_ON((___GFP_MOVABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_MOVABLE);
         |         ^~~~~~~~~~~~
   include/linux/gfp.h:347:63: note: each undeclared identifier is reported only once for each function it appears in
     347 |         BUILD_BUG_ON((___GFP_MOVABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_MOVABLE);
         |                                                               ^~~~~~~~~~~~~~~
   include/linux/compiler_types.h:302:23: note: in definition of macro '__compiletime_assert'
     302 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:322:9: note: in expansion of macro '_compiletime_assert'
     322 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
      39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      50 |         BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
         |         ^~~~~~~~~~~~~~~~
   include/linux/gfp.h:347:9: note: in expansion of macro 'BUILD_BUG_ON'
     347 |         BUILD_BUG_ON((___GFP_MOVABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_MOVABLE);
         |         ^~~~~~~~~~~~
   In file included from include/asm-generic/bug.h:5,
                    from arch/arc/include/asm/bug.h:30,
                    from include/linux/bug.h:5,
                    from include/linux/page-flags.h:10,
                    from kernel/bounds.c:10:
>> include/linux/gfp.h:349:22: error: 'page_group_by_mobility_disabled' undeclared (first use in this function)
     349 |         if (unlikely(page_group_by_mobility_disabled))
         |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:78:45: note: in definition of macro 'unlikely'
      78 | # define unlikely(x)    __builtin_expect(!!(x), 0)
         |                                             ^
   In file included from include/linux/mm.h:10,
                    from arch/arc/include/asm/arcregs.h:149,
                    from arch/arc/include/asm/irqflags-arcv2.h:9,
                    from arch/arc/include/asm/irqflags.h:13,
                    from include/linux/irqflags.h:16,
                    from arch/arc/include/asm/smp.h:102,
                    from arch/arc/include/asm/cmpxchg.h:13,
                    from arch/arc/include/asm/atomic.h:13,
                    from include/linux/atomic.h:7,
                    from include/asm-generic/bitops/lock.h:5,
                    from arch/arc/include/asm/bitops.h:188,
                    from include/linux/bitops.h:33,
                    from include/linux/log2.h:12,
                    from kernel/bounds.c:13:
>> include/linux/gfp.h:350:24: error: 'MIGRATE_UNMOVABLE' undeclared (first use in this function)
     350 |                 return MIGRATE_UNMOVABLE;
         |                        ^~~~~~~~~~~~~~~~~
   include/linux/gfp.h: At top level:
>> include/linux/gfp.h:441:25: warning: "ZONES_SHIFT" is not defined, evaluates to 0 [-Wundef]
     441 | #define GFP_ZONES_SHIFT ZONES_SHIFT
         |                         ^~~~~~~~~~~
   include/linux/gfp.h:444:10: note: in expansion of macro 'GFP_ZONES_SHIFT'
     444 | #if 16 * GFP_ZONES_SHIFT > BITS_PER_LONG
         |          ^~~~~~~~~~~~~~~
   include/linux/gfp.h: In function 'gfp_zone':
   include/linux/gfp.h:441:25: error: 'ZONES_SHIFT' undeclared (first use in this function); did you mean 'NMI_SHIFT'?
     441 | #define GFP_ZONES_SHIFT ZONES_SHIFT
         |                         ^~~~~~~~~~~
   include/linux/gfp.h:449:29: note: in expansion of macro 'GFP_ZONES_SHIFT'
     449 |         (ZONE_NORMAL << 0 * GFP_ZONES_SHIFT)                                   \
         |                             ^~~~~~~~~~~~~~~
   include/linux/gfp.h:481:14: note: in expansion of macro 'GFP_ZONE_TABLE'
     481 |         z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) &
         |              ^~~~~~~~~~~~~~
   include/linux/gfp.h: In function 'gfp_zonelist':
   include/linux/gfp.h:500:16: error: 'ZONELIST_FALLBACK' undeclared (first use in this function)
     500 |         return ZONELIST_FALLBACK;
         |                ^~~~~~~~~~~~~~~~~
   include/linux/gfp.h: In function 'node_zonelist':
   include/linux/gfp.h:514:16: error: implicit declaration of function 'NODE_DATA' [-Werror=implicit-function-declaration]
     514 |         return NODE_DATA(nid)->node_zonelists + gfp_zonelist(flags);
         |                ^~~~~~~~~
   include/linux/gfp.h:514:30: error: invalid type argument of '->' (have 'int')
     514 |         return NODE_DATA(nid)->node_zonelists + gfp_zonelist(flags);
         |                              ^~
   include/linux/gfp.h: At top level:
   include/linux/gfp.h:525:17: error: unknown type name 'nodemask_t'
     525 |                 nodemask_t *nodemask);
         |                 ^~~~~~~~~~
   include/linux/gfp.h:527:17: error: unknown type name 'nodemask_t'
     527 |                 nodemask_t *nodemask);
         |                 ^~~~~~~~~~
   include/linux/gfp.h:530:33: error: unknown type name 'nodemask_t'
     530 |                                 nodemask_t *nodemask, int nr_pages,
         |                                 ^~~~~~~~~~
   include/linux/gfp.h: In function 'alloc_pages_bulk_list':
   include/linux/gfp.h:538:16: error: implicit declaration of function '__alloc_pages_bulk'; did you mean 'alloc_pages_bulk_list'? [-Werror=implicit-function-declaration]
     538 |         return __alloc_pages_bulk(gfp, numa_mem_id(), NULL, nr_pages, list, NULL);
         |                ^~~~~~~~~~~~~~~~~~
         |                alloc_pages_bulk_list
   include/linux/gfp.h: In function 'alloc_pages_bulk_array_node':
   include/linux/gfp.h:550:20: error: 'NUMA_NO_NODE' undeclared (first use in this function)
     550 |         if (nid == NUMA_NO_NODE)
         |                    ^~~~~~~~~~~~
   In file included from include/asm-generic/bug.h:5,
                    from arch/arc/include/asm/bug.h:30,
                    from include/linux/bug.h:5,
                    from include/linux/page-flags.h:10,
                    from kernel/bounds.c:10:
   include/linux/gfp.h: In function '__alloc_pages_node':
   include/linux/gfp.h:563:37: error: 'MAX_NUMNODES' undeclared (first use in this function)
     563 |         VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES);
         |                                     ^~~~~~~~~~~~
   include/linux/compiler.h:78:45: note: in definition of macro 'unlikely'
      78 | # define unlikely(x)    __builtin_expect(!!(x), 0)
         |                                             ^
   include/linux/mmdebug.h:17:25: note: in expansion of macro 'BUG_ON'
      17 | #define VM_BUG_ON(cond) BUG_ON(cond)
         |                         ^~~~~~
   include/linux/gfp.h:563:9: note: in expansion of macro 'VM_BUG_ON'
     563 |         VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES);
         |         ^~~~~~~~~
   In file included from arch/arc/include/asm/bug.h:30,
                    from include/linux/bug.h:5,
                    from include/linux/page-flags.h:10,
                    from kernel/bounds.c:10:
   include/linux/gfp.h:564:52: error: implicit declaration of function 'node_online'; did you mean 'node_zonelist'? [-Werror=implicit-function-declaration]
     564 |         VM_WARN_ON((gfp_mask & __GFP_THISNODE) && !node_online(nid));
         |                                                    ^~~~~~~~~~~
   include/asm-generic/bug.h:121:32: note: in definition of macro 'WARN_ON'
     121 |         int __ret_warn_on = !!(condition);                              \
         |                                ^~~~~~~~~
   include/linux/gfp.h:564:9: note: in expansion of macro 'VM_WARN_ON'
     564 |         VM_WARN_ON((gfp_mask & __GFP_THISNODE) && !node_online(nid));
         |         ^~~~~~~~~~
   In file included from include/linux/mm.h:10,
                    from arch/arc/include/asm/arcregs.h:149,
                    from arch/arc/include/asm/irqflags-arcv2.h:9,
                    from arch/arc/include/asm/irqflags.h:13,
                    from include/linux/irqflags.h:16,
                    from arch/arc/include/asm/smp.h:102,
                    from arch/arc/include/asm/cmpxchg.h:13,
                    from arch/arc/include/asm/atomic.h:13,
                    from include/linux/atomic.h:7,
                    from include/asm-generic/bitops/lock.h:5,
                    from arch/arc/include/asm/bitops.h:188,
                    from include/linux/bitops.h:33,
                    from include/linux/log2.h:12,
                    from kernel/bounds.c:13:
   include/linux/gfp.h:566:16: error: implicit declaration of function '__alloc_pages'; did you mean '__alloc_pages_node'? [-Werror=implicit-function-declaration]
     566 |         return __alloc_pages(gfp_mask, order, nid, NULL);
         |                ^~~~~~~~~~~~~
         |                __alloc_pages_node
   include/linux/gfp.h:566:16: warning: returning 'int' from a function with return type 'struct page *' makes pointer from integer without a cast [-Wint-conversion]
     566 |         return __alloc_pages(gfp_mask, order, nid, NULL);
         |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/asm-generic/bug.h:5,
                    from arch/arc/include/asm/bug.h:30,
                    from include/linux/bug.h:5,


vim +/MIGRATE_MOVABLE +347 include/linux/gfp.h

6cb062296f73e7 Christoph Lameter       2007-10-16  342  
01c0bfe061f309 Wei Yang                2020-06-03  343  static inline int gfp_migratetype(const gfp_t gfp_flags)
467c996c1e1910 Mel Gorman              2007-10-16  344  {
016c13daa5c9e4 Mel Gorman              2015-11-06  345  	VM_WARN_ON((gfp_flags & GFP_MOVABLE_MASK) == GFP_MOVABLE_MASK);
016c13daa5c9e4 Mel Gorman              2015-11-06  346  	BUILD_BUG_ON((1UL << GFP_MOVABLE_SHIFT) != ___GFP_MOVABLE);
016c13daa5c9e4 Mel Gorman              2015-11-06 @347  	BUILD_BUG_ON((___GFP_MOVABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_MOVABLE);
467c996c1e1910 Mel Gorman              2007-10-16  348  
467c996c1e1910 Mel Gorman              2007-10-16 @349  	if (unlikely(page_group_by_mobility_disabled))
467c996c1e1910 Mel Gorman              2007-10-16 @350  		return MIGRATE_UNMOVABLE;
467c996c1e1910 Mel Gorman              2007-10-16  351  
467c996c1e1910 Mel Gorman              2007-10-16  352  	/* Group based on mobility */
016c13daa5c9e4 Mel Gorman              2015-11-06  353  	return (gfp_flags & GFP_MOVABLE_MASK) >> GFP_MOVABLE_SHIFT;
467c996c1e1910 Mel Gorman              2007-10-16  354  }
dd56b046426760 Mel Gorman              2015-11-06  355  #undef GFP_MOVABLE_MASK
dd56b046426760 Mel Gorman              2015-11-06  356  #undef GFP_MOVABLE_SHIFT
a2f1b424900715 Andi Kleen              2005-11-05  357  
d0164adc89f6bb Mel Gorman              2015-11-06  358  static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags)
d0164adc89f6bb Mel Gorman              2015-11-06  359  {
543dfb2df8ebb3 Joshua Clayton          2016-01-14  360  	return !!(gfp_flags & __GFP_DIRECT_RECLAIM);
d0164adc89f6bb Mel Gorman              2015-11-06  361  }
d0164adc89f6bb Mel Gorman              2015-11-06  362  
20eb4f29b60286 Tejun Heo               2019-10-24  363  /**
20eb4f29b60286 Tejun Heo               2019-10-24  364   * gfpflags_normal_context - is gfp_flags a normal sleepable context?
20eb4f29b60286 Tejun Heo               2019-10-24  365   * @gfp_flags: gfp_flags to test
20eb4f29b60286 Tejun Heo               2019-10-24  366   *
20eb4f29b60286 Tejun Heo               2019-10-24  367   * Test whether @gfp_flags indicates that the allocation is from the
20eb4f29b60286 Tejun Heo               2019-10-24  368   * %current context and allowed to sleep.
20eb4f29b60286 Tejun Heo               2019-10-24  369   *
20eb4f29b60286 Tejun Heo               2019-10-24  370   * An allocation being allowed to block doesn't mean it owns the %current
20eb4f29b60286 Tejun Heo               2019-10-24  371   * context.  When direct reclaim path tries to allocate memory, the
20eb4f29b60286 Tejun Heo               2019-10-24  372   * allocation context is nested inside whatever %current was doing at the
20eb4f29b60286 Tejun Heo               2019-10-24  373   * time of the original allocation.  The nested allocation may be allowed
20eb4f29b60286 Tejun Heo               2019-10-24  374   * to block but modifying anything %current owns can corrupt the outer
20eb4f29b60286 Tejun Heo               2019-10-24  375   * context's expectations.
20eb4f29b60286 Tejun Heo               2019-10-24  376   *
20eb4f29b60286 Tejun Heo               2019-10-24  377   * %true result from this function indicates that the allocation context
20eb4f29b60286 Tejun Heo               2019-10-24  378   * can sleep and use anything that's associated with %current.
20eb4f29b60286 Tejun Heo               2019-10-24  379   */
20eb4f29b60286 Tejun Heo               2019-10-24  380  static inline bool gfpflags_normal_context(const gfp_t gfp_flags)
20eb4f29b60286 Tejun Heo               2019-10-24  381  {
20eb4f29b60286 Tejun Heo               2019-10-24  382  	return (gfp_flags & (__GFP_DIRECT_RECLAIM | __GFP_MEMALLOC)) ==
20eb4f29b60286 Tejun Heo               2019-10-24  383  		__GFP_DIRECT_RECLAIM;
20eb4f29b60286 Tejun Heo               2019-10-24  384  }
20eb4f29b60286 Tejun Heo               2019-10-24  385  
b70d94ee438b3f Christoph Lameter       2009-06-16  386  #ifdef CONFIG_HIGHMEM
b70d94ee438b3f Christoph Lameter       2009-06-16  387  #define OPT_ZONE_HIGHMEM ZONE_HIGHMEM
b70d94ee438b3f Christoph Lameter       2009-06-16  388  #else
b70d94ee438b3f Christoph Lameter       2009-06-16  389  #define OPT_ZONE_HIGHMEM ZONE_NORMAL
b70d94ee438b3f Christoph Lameter       2009-06-16  390  #endif
b70d94ee438b3f Christoph Lameter       2009-06-16  391  
4b51d66989218a Christoph Lameter       2007-02-10  392  #ifdef CONFIG_ZONE_DMA
b70d94ee438b3f Christoph Lameter       2009-06-16  393  #define OPT_ZONE_DMA ZONE_DMA
b70d94ee438b3f Christoph Lameter       2009-06-16  394  #else
b70d94ee438b3f Christoph Lameter       2009-06-16  395  #define OPT_ZONE_DMA ZONE_NORMAL
4b51d66989218a Christoph Lameter       2007-02-10  396  #endif
b70d94ee438b3f Christoph Lameter       2009-06-16  397  
4e4785bcf0c850 Christoph Lameter       2006-09-25  398  #ifdef CONFIG_ZONE_DMA32
b70d94ee438b3f Christoph Lameter       2009-06-16  399  #define OPT_ZONE_DMA32 ZONE_DMA32
b70d94ee438b3f Christoph Lameter       2009-06-16  400  #else
b70d94ee438b3f Christoph Lameter       2009-06-16  401  #define OPT_ZONE_DMA32 ZONE_NORMAL
4e4785bcf0c850 Christoph Lameter       2006-09-25  402  #endif
b70d94ee438b3f Christoph Lameter       2009-06-16  403  
b70d94ee438b3f Christoph Lameter       2009-06-16  404  /*
b70d94ee438b3f Christoph Lameter       2009-06-16  405   * GFP_ZONE_TABLE is a word size bitstring that is used for looking up the
ac2e8e40acf4c7 Hao Lee                 2017-05-03  406   * zone to use given the lowest 4 bits of gfp_t. Entries are GFP_ZONES_SHIFT
ac2e8e40acf4c7 Hao Lee                 2017-05-03  407   * bits long and there are 16 of them to cover all possible combinations of
263ff5d8e82e57 matt mooney             2010-05-24  408   * __GFP_DMA, __GFP_DMA32, __GFP_MOVABLE and __GFP_HIGHMEM.
b70d94ee438b3f Christoph Lameter       2009-06-16  409   *
b70d94ee438b3f Christoph Lameter       2009-06-16  410   * The zone fallback order is MOVABLE=>HIGHMEM=>NORMAL=>DMA32=>DMA.
b70d94ee438b3f Christoph Lameter       2009-06-16  411   * But GFP_MOVABLE is not only a zone specifier but also an allocation
b70d94ee438b3f Christoph Lameter       2009-06-16  412   * policy. Therefore __GFP_MOVABLE plus another zone selector is valid.
263ff5d8e82e57 matt mooney             2010-05-24  413   * Only 1 bit of the lowest 3 bits (DMA,DMA32,HIGHMEM) can be set to "1".
b70d94ee438b3f Christoph Lameter       2009-06-16  414   *
b70d94ee438b3f Christoph Lameter       2009-06-16  415   *       bit       result
b70d94ee438b3f Christoph Lameter       2009-06-16  416   *       =================
b70d94ee438b3f Christoph Lameter       2009-06-16  417   *       0x0    => NORMAL
b70d94ee438b3f Christoph Lameter       2009-06-16  418   *       0x1    => DMA or NORMAL
b70d94ee438b3f Christoph Lameter       2009-06-16  419   *       0x2    => HIGHMEM or NORMAL
b70d94ee438b3f Christoph Lameter       2009-06-16  420   *       0x3    => BAD (DMA+HIGHMEM)
4b33b6959581d5 Huaisheng Ye            2018-06-07  421   *       0x4    => DMA32 or NORMAL
b70d94ee438b3f Christoph Lameter       2009-06-16  422   *       0x5    => BAD (DMA+DMA32)
b70d94ee438b3f Christoph Lameter       2009-06-16  423   *       0x6    => BAD (HIGHMEM+DMA32)
b70d94ee438b3f Christoph Lameter       2009-06-16  424   *       0x7    => BAD (HIGHMEM+DMA32+DMA)
b70d94ee438b3f Christoph Lameter       2009-06-16  425   *       0x8    => NORMAL (MOVABLE+0)
b70d94ee438b3f Christoph Lameter       2009-06-16  426   *       0x9    => DMA or NORMAL (MOVABLE+DMA)
b70d94ee438b3f Christoph Lameter       2009-06-16  427   *       0xa    => MOVABLE (Movable is valid only if HIGHMEM is set too)
b70d94ee438b3f Christoph Lameter       2009-06-16  428   *       0xb    => BAD (MOVABLE+HIGHMEM+DMA)
4b33b6959581d5 Huaisheng Ye            2018-06-07  429   *       0xc    => DMA32 or NORMAL (MOVABLE+DMA32)
b70d94ee438b3f Christoph Lameter       2009-06-16  430   *       0xd    => BAD (MOVABLE+DMA32+DMA)
b70d94ee438b3f Christoph Lameter       2009-06-16  431   *       0xe    => BAD (MOVABLE+DMA32+HIGHMEM)
b70d94ee438b3f Christoph Lameter       2009-06-16  432   *       0xf    => BAD (MOVABLE+DMA32+HIGHMEM+DMA)
b70d94ee438b3f Christoph Lameter       2009-06-16  433   *
b11a7b94100cba Dan Williams            2016-03-17  434   * GFP_ZONES_SHIFT must be <= 2 on 32 bit platforms.
b70d94ee438b3f Christoph Lameter       2009-06-16  435   */
b70d94ee438b3f Christoph Lameter       2009-06-16  436  
b11a7b94100cba Dan Williams            2016-03-17  437  #if defined(CONFIG_ZONE_DEVICE) && (MAX_NR_ZONES-1) <= 4
b11a7b94100cba Dan Williams            2016-03-17  438  /* ZONE_DEVICE is not a valid GFP zone specifier */
b11a7b94100cba Dan Williams            2016-03-17  439  #define GFP_ZONES_SHIFT 2
b11a7b94100cba Dan Williams            2016-03-17  440  #else
b11a7b94100cba Dan Williams            2016-03-17 @441  #define GFP_ZONES_SHIFT ZONES_SHIFT
b11a7b94100cba Dan Williams            2016-03-17  442  #endif
b11a7b94100cba Dan Williams            2016-03-17  443  
b11a7b94100cba Dan Williams            2016-03-17  444  #if 16 * GFP_ZONES_SHIFT > BITS_PER_LONG
b11a7b94100cba Dan Williams            2016-03-17  445  #error GFP_ZONES_SHIFT too large to create GFP_ZONE_TABLE integer
b70d94ee438b3f Christoph Lameter       2009-06-16  446  #endif
b70d94ee438b3f Christoph Lameter       2009-06-16  447  
b70d94ee438b3f Christoph Lameter       2009-06-16  448  #define GFP_ZONE_TABLE ( \
b11a7b94100cba Dan Williams            2016-03-17  449  	(ZONE_NORMAL << 0 * GFP_ZONES_SHIFT)				       \
b11a7b94100cba Dan Williams            2016-03-17  450  	| (OPT_ZONE_DMA << ___GFP_DMA * GFP_ZONES_SHIFT)		       \
b11a7b94100cba Dan Williams            2016-03-17  451  	| (OPT_ZONE_HIGHMEM << ___GFP_HIGHMEM * GFP_ZONES_SHIFT)	       \
b11a7b94100cba Dan Williams            2016-03-17  452  	| (OPT_ZONE_DMA32 << ___GFP_DMA32 * GFP_ZONES_SHIFT)		       \
b11a7b94100cba Dan Williams            2016-03-17  453  	| (ZONE_NORMAL << ___GFP_MOVABLE * GFP_ZONES_SHIFT)		       \
b11a7b94100cba Dan Williams            2016-03-17  454  	| (OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA) * GFP_ZONES_SHIFT)    \
b11a7b94100cba Dan Williams            2016-03-17  455  	| (ZONE_MOVABLE << (___GFP_MOVABLE | ___GFP_HIGHMEM) * GFP_ZONES_SHIFT)\
b11a7b94100cba Dan Williams            2016-03-17  456  	| (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * GFP_ZONES_SHIFT)\
b70d94ee438b3f Christoph Lameter       2009-06-16  457  )
b70d94ee438b3f Christoph Lameter       2009-06-16  458  
b70d94ee438b3f Christoph Lameter       2009-06-16  459  /*
263ff5d8e82e57 matt mooney             2010-05-24  460   * GFP_ZONE_BAD is a bitmap for all combinations of __GFP_DMA, __GFP_DMA32
b70d94ee438b3f Christoph Lameter       2009-06-16  461   * __GFP_HIGHMEM and __GFP_MOVABLE that are not permitted. One flag per
b70d94ee438b3f Christoph Lameter       2009-06-16  462   * entry starting with bit 0. Bit is set if the combination is not
b70d94ee438b3f Christoph Lameter       2009-06-16  463   * allowed.
b70d94ee438b3f Christoph Lameter       2009-06-16  464   */
b70d94ee438b3f Christoph Lameter       2009-06-16  465  #define GFP_ZONE_BAD ( \
16b56cf4b8a0fa Namhyung Kim            2010-10-26  466  	1 << (___GFP_DMA | ___GFP_HIGHMEM)				      \
16b56cf4b8a0fa Namhyung Kim            2010-10-26  467  	| 1 << (___GFP_DMA | ___GFP_DMA32)				      \
16b56cf4b8a0fa Namhyung Kim            2010-10-26  468  	| 1 << (___GFP_DMA32 | ___GFP_HIGHMEM)				      \
16b56cf4b8a0fa Namhyung Kim            2010-10-26  469  	| 1 << (___GFP_DMA | ___GFP_DMA32 | ___GFP_HIGHMEM)		      \
16b56cf4b8a0fa Namhyung Kim            2010-10-26  470  	| 1 << (___GFP_MOVABLE | ___GFP_HIGHMEM | ___GFP_DMA)		      \
16b56cf4b8a0fa Namhyung Kim            2010-10-26  471  	| 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_DMA)		      \
16b56cf4b8a0fa Namhyung Kim            2010-10-26  472  	| 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_HIGHMEM)		      \
16b56cf4b8a0fa Namhyung Kim            2010-10-26  473  	| 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_DMA | ___GFP_HIGHMEM)  \
b70d94ee438b3f Christoph Lameter       2009-06-16  474  )
b70d94ee438b3f Christoph Lameter       2009-06-16  475  
b70d94ee438b3f Christoph Lameter       2009-06-16  476  static inline enum zone_type gfp_zone(gfp_t flags)
b70d94ee438b3f Christoph Lameter       2009-06-16  477  {
b70d94ee438b3f Christoph Lameter       2009-06-16  478  	enum zone_type z;
16b56cf4b8a0fa Namhyung Kim            2010-10-26  479  	int bit = (__force int) (flags & GFP_ZONEMASK);
b70d94ee438b3f Christoph Lameter       2009-06-16  480  
b11a7b94100cba Dan Williams            2016-03-17  481  	z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) &
b11a7b94100cba Dan Williams            2016-03-17  482  					 ((1 << GFP_ZONES_SHIFT) - 1);
82d4b5779a7588 Dave Hansen             2011-05-24  483  	VM_BUG_ON((GFP_ZONE_BAD >> bit) & 1);
b70d94ee438b3f Christoph Lameter       2009-06-16  484  	return z;
4e4785bcf0c850 Christoph Lameter       2006-09-25  485  }
4e4785bcf0c850 Christoph Lameter       2006-09-25  486  
^1da177e4c3f41 Linus Torvalds          2005-04-16  487  /*
^1da177e4c3f41 Linus Torvalds          2005-04-16  488   * There is only one page-allocator function, and two main namespaces to
^1da177e4c3f41 Linus Torvalds          2005-04-16  489   * it. The alloc_page*() variants return 'struct page *' and as such
^1da177e4c3f41 Linus Torvalds          2005-04-16  490   * can allocate highmem pages, the *get*page*() variants return
^1da177e4c3f41 Linus Torvalds          2005-04-16  491   * virtual kernel addresses to the allocated page(s).
^1da177e4c3f41 Linus Torvalds          2005-04-16  492   */
^1da177e4c3f41 Linus Torvalds          2005-04-16  493  
54a6eb5c4765aa Mel Gorman              2008-04-28  494  static inline int gfp_zonelist(gfp_t flags)
54a6eb5c4765aa Mel Gorman              2008-04-28  495  {
c00eb15a8914b8 Yaowei Bai              2016-01-14  496  #ifdef CONFIG_NUMA
c00eb15a8914b8 Yaowei Bai              2016-01-14  497  	if (unlikely(flags & __GFP_THISNODE))
c00eb15a8914b8 Yaowei Bai              2016-01-14  498  		return ZONELIST_NOFALLBACK;
c00eb15a8914b8 Yaowei Bai              2016-01-14  499  #endif
c00eb15a8914b8 Yaowei Bai              2016-01-14 @500  	return ZONELIST_FALLBACK;
54a6eb5c4765aa Mel Gorman              2008-04-28  501  }
54a6eb5c4765aa Mel Gorman              2008-04-28  502  
^1da177e4c3f41 Linus Torvalds          2005-04-16  503  /*
^1da177e4c3f41 Linus Torvalds          2005-04-16  504   * We get the zone list from the current node and the gfp_mask.
cb152a1a95606a Shijie Luo              2021-05-06  505   * This zone list contains a maximum of MAX_NUMNODES*MAX_NR_ZONES zones.
54a6eb5c4765aa Mel Gorman              2008-04-28  506   * There are two zonelists per node, one for all zones with memory and
54a6eb5c4765aa Mel Gorman              2008-04-28  507   * one containing just zones from the node the zonelist belongs to.
^1da177e4c3f41 Linus Torvalds          2005-04-16  508   *
d3c251ab95b69f Mike Rapoport           2021-06-28  509   * For the case of non-NUMA systems the NODE_DATA() gets optimized to
d3c251ab95b69f Mike Rapoport           2021-06-28  510   * &contig_page_data at compile-time.
^1da177e4c3f41 Linus Torvalds          2005-04-16  511   */
0e88460da6ab7b Mel Gorman              2008-04-28  512  static inline struct zonelist *node_zonelist(int nid, gfp_t flags)
0e88460da6ab7b Mel Gorman              2008-04-28  513  {
54a6eb5c4765aa Mel Gorman              2008-04-28 @514  	return NODE_DATA(nid)->node_zonelists + gfp_zonelist(flags);
0e88460da6ab7b Mel Gorman              2008-04-28  515  }
^1da177e4c3f41 Linus Torvalds          2005-04-16  516  
^1da177e4c3f41 Linus Torvalds          2005-04-16  517  #ifndef HAVE_ARCH_FREE_PAGE
^1da177e4c3f41 Linus Torvalds          2005-04-16  518  static inline void arch_free_page(struct page *page, int order) { }
^1da177e4c3f41 Linus Torvalds          2005-04-16  519  #endif
cc102509074bba Nicholas Piggin         2006-12-06  520  #ifndef HAVE_ARCH_ALLOC_PAGE
cc102509074bba Nicholas Piggin         2006-12-06  521  static inline void arch_alloc_page(struct page *page, int order) { }
cc102509074bba Nicholas Piggin         2006-12-06  522  #endif
^1da177e4c3f41 Linus Torvalds          2005-04-16  523  
84172f4bb75242 Matthew Wilcox (Oracle  2021-04-29  524) struct page *__alloc_pages(gfp_t gfp, unsigned int order, int preferred_nid,
04ec6264f28793 Vlastimil Babka         2017-07-06 @525  		nodemask_t *nodemask);
da90006b76b648 Andrew Morton           2021-09-16  526  struct folio *__folio_alloc(gfp_t gfp, unsigned int order, int preferred_nid,
da90006b76b648 Andrew Morton           2021-09-16  527  		nodemask_t *nodemask);
e4048e5dc4aece KOSAKI Motohiro         2008-07-23  528  
387ba26fb1cb9b Mel Gorman              2021-04-29  529  unsigned long __alloc_pages_bulk(gfp_t gfp, int preferred_nid,
387ba26fb1cb9b Mel Gorman              2021-04-29  530  				nodemask_t *nodemask, int nr_pages,
0f87d9d30f2139 Mel Gorman              2021-04-29  531  				struct list_head *page_list,
0f87d9d30f2139 Mel Gorman              2021-04-29  532  				struct page **page_array);
387ba26fb1cb9b Mel Gorman              2021-04-29  533  
387ba26fb1cb9b Mel Gorman              2021-04-29  534  /* Bulk allocate order-0 pages */
387ba26fb1cb9b Mel Gorman              2021-04-29  535  static inline unsigned long
0f87d9d30f2139 Mel Gorman              2021-04-29  536  alloc_pages_bulk_list(gfp_t gfp, unsigned long nr_pages, struct list_head *list)
387ba26fb1cb9b Mel Gorman              2021-04-29  537  {
0f87d9d30f2139 Mel Gorman              2021-04-29 @538  	return __alloc_pages_bulk(gfp, numa_mem_id(), NULL, nr_pages, list, NULL);
0f87d9d30f2139 Mel Gorman              2021-04-29  539  }
0f87d9d30f2139 Mel Gorman              2021-04-29  540  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 41296 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC v2 PATCH 2/3] mm: replace custom PG2KB/KB2PG macros with common ones
  2021-09-19 13:12 ` [RFC v2 PATCH 2/3] mm: replace custom PG2KB/KB2PG macros with common ones Oleksandr Natalenko
  2021-09-19 15:35   ` kernel test robot
@ 2021-09-19 17:13   ` kernel test robot
  1 sibling, 0 replies; 8+ messages in thread
From: kernel test robot @ 2021-09-19 17:13 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 41398 bytes --]

Hi Oleksandr,

[FYI, it's a private test report for your RFC patch.]
[auto build test ERROR on hnaz-mm/master]

url:    https://github.com/0day-ci/linux/commits/Oleksandr-Natalenko/mm-common-PAGE_SIZE-shift-macros/20210919-211421
base:   https://github.com/hnaz/linux-mm master
config: arc-randconfig-r014-20210919 (attached as .config)
compiler: arceb-elf-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/c129ed106a8dd29030e8585cb39a779de91aaa6a
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Oleksandr-Natalenko/mm-common-PAGE_SIZE-shift-macros/20210919-211421
        git checkout c129ed106a8dd29030e8585cb39a779de91aaa6a
        # save the attached .config to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=arc prepare

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All error/warnings (new ones prefixed by >>):

   arch/arc/Makefile:26: ** WARNING ** CONFIG_ARC_TUNE_MCPU flag '' is unknown, fallback to ''
   error: no override and no default toolchain set
   init/Kconfig:70:warning: 'RUSTC_VERSION': number is invalid
   In file included from ./arch/arc/include/generated/asm/div64.h:1,
                    from include/linux/math.h:5,
                    from include/linux/kernel.h:15,
                    from include/linux/list.h:9,
                    from include/linux/preempt.h:11,
                    from include/linux/percpu.h:6,
                    from include/linux/arch_topology.h:9,
                    from include/linux/topology.h:30,
                    from include/linux/gfp.h:9,
                    from include/linux/mm.h:10,
                    from arch/arc/include/asm/arcregs.h:149,
                    from arch/arc/include/asm/irqflags-compact.h:16,
                    from arch/arc/include/asm/irqflags.h:11,
                    from include/linux/irqflags.h:16,
                    from arch/arc/include/asm/smp.h:102,
                    from arch/arc/include/asm/cmpxchg.h:13,
                    from arch/arc/include/asm/atomic.h:13,
                    from include/linux/atomic.h:7,
                    from include/asm-generic/bitops/lock.h:5,
                    from arch/arc/include/asm/bitops.h:188,
                    from include/linux/bitops.h:33,
                    from include/linux/log2.h:12,
                    from kernel/bounds.c:13:
   include/linux/math64.h: In function 'div_u64_rem':
>> include/asm-generic/div64.h:224:13: error: implicit declaration of function 'is_power_of_2' [-Werror=implicit-function-declaration]
     224 |             is_power_of_2(__base)) {                    \
         |             ^~~~~~~~~~~~~
   include/linux/math64.h:92:22: note: in expansion of macro 'do_div'
      92 |         *remainder = do_div(dividend, divisor);
         |                      ^~~~~~
>> include/asm-generic/div64.h:226:25: error: implicit declaration of function 'ilog2' [-Werror=implicit-function-declaration]
     226 |                 (n) >>= ilog2(__base);                  \
         |                         ^~~~~
   include/linux/math64.h:92:22: note: in expansion of macro 'do_div'
      92 |         *remainder = do_div(dividend, divisor);
         |                      ^~~~~~
   In file included from include/asm-generic/preempt.h:5,
                    from ./arch/arc/include/generated/asm/preempt.h:1,
                    from include/linux/preempt.h:78,
                    from include/linux/percpu.h:6,
                    from include/linux/arch_topology.h:9,
                    from include/linux/topology.h:30,
                    from include/linux/gfp.h:9,
                    from include/linux/mm.h:10,
                    from arch/arc/include/asm/arcregs.h:149,
                    from arch/arc/include/asm/irqflags-compact.h:16,
                    from arch/arc/include/asm/irqflags.h:11,
                    from include/linux/irqflags.h:16,
                    from arch/arc/include/asm/smp.h:102,
                    from arch/arc/include/asm/cmpxchg.h:13,
                    from arch/arc/include/asm/atomic.h:13,
                    from include/linux/atomic.h:7,
                    from include/asm-generic/bitops/lock.h:5,
                    from arch/arc/include/asm/bitops.h:188,
                    from include/linux/bitops.h:33,
                    from include/linux/log2.h:12,
                    from kernel/bounds.c:13:
   include/linux/thread_info.h: In function 'set_ti_thread_flag':
>> include/linux/thread_info.h:89:9: error: implicit declaration of function 'set_bit' [-Werror=implicit-function-declaration]
      89 |         set_bit(flag, (unsigned long *)&ti->flags);
         |         ^~~~~~~
   include/linux/thread_info.h: In function 'clear_ti_thread_flag':
>> include/linux/thread_info.h:94:9: error: implicit declaration of function 'clear_bit' [-Werror=implicit-function-declaration]
      94 |         clear_bit(flag, (unsigned long *)&ti->flags);
         |         ^~~~~~~~~
   include/linux/thread_info.h: In function 'test_and_set_ti_thread_flag':
>> include/linux/thread_info.h:108:16: error: implicit declaration of function 'test_and_set_bit' [-Werror=implicit-function-declaration]
     108 |         return test_and_set_bit(flag, (unsigned long *)&ti->flags);
         |                ^~~~~~~~~~~~~~~~
   include/linux/thread_info.h: In function 'test_and_clear_ti_thread_flag':
>> include/linux/thread_info.h:113:16: error: implicit declaration of function 'test_and_clear_bit' [-Werror=implicit-function-declaration]
     113 |         return test_and_clear_bit(flag, (unsigned long *)&ti->flags);
         |                ^~~~~~~~~~~~~~~~~~
   include/linux/thread_info.h: In function 'test_ti_thread_flag':
>> include/linux/thread_info.h:118:16: error: implicit declaration of function 'test_bit'; did you mean 'test_taint'? [-Werror=implicit-function-declaration]
     118 |         return test_bit(flag, (unsigned long *)&ti->flags);
         |                ^~~~~~~~
         |                test_taint
   In file included from include/linux/cpumask.h:12,
                    from include/linux/smp.h:13,
                    from include/linux/percpu.h:7,
                    from include/linux/arch_topology.h:9,
                    from include/linux/topology.h:30,
                    from include/linux/gfp.h:9,
                    from include/linux/mm.h:10,
                    from arch/arc/include/asm/arcregs.h:149,
                    from arch/arc/include/asm/irqflags-compact.h:16,
                    from arch/arc/include/asm/irqflags.h:11,
                    from include/linux/irqflags.h:16,
                    from arch/arc/include/asm/smp.h:102,
                    from arch/arc/include/asm/cmpxchg.h:13,
                    from arch/arc/include/asm/atomic.h:13,
                    from include/linux/atomic.h:7,
                    from include/asm-generic/bitops/lock.h:5,
                    from arch/arc/include/asm/bitops.h:188,
                    from include/linux/bitops.h:33,
                    from include/linux/log2.h:12,
                    from kernel/bounds.c:13:
   include/linux/bitmap.h: In function 'bitmap_empty':
>> include/linux/bitmap.h:391:16: error: implicit declaration of function 'find_first_bit'; did you mean 'sched_find_first_bit'? [-Werror=implicit-function-declaration]
     391 |         return find_first_bit(src, nbits) == nbits;
         |                ^~~~~~~~~~~~~~
         |                sched_find_first_bit
   include/linux/bitmap.h: In function 'bitmap_full':
>> include/linux/bitmap.h:399:16: error: implicit declaration of function 'find_first_zero_bit' [-Werror=implicit-function-declaration]
     399 |         return find_first_zero_bit(src, nbits) == nbits;
         |                ^~~~~~~~~~~~~~~~~~~
   include/linux/bitmap.h: In function 'bitmap_weight':
>> include/linux/bitmap.h:405:24: error: implicit declaration of function 'hweight_long' [-Werror=implicit-function-declaration]
     405 |                 return hweight_long(*src & BITMAP_LAST_WORD_MASK(nbits));
         |                        ^~~~~~~~~~~~
   include/linux/bitmap.h: In function 'bitmap_set':
>> include/linux/bitmap.h:413:17: error: implicit declaration of function '__set_bit' [-Werror=implicit-function-declaration]
     413 |                 __set_bit(start, map);
         |                 ^~~~~~~~~
   include/linux/bitmap.h: In function 'bitmap_clear':
>> include/linux/bitmap.h:427:17: error: implicit declaration of function '__clear_bit' [-Werror=implicit-function-declaration]
     427 |                 __clear_bit(start, map);
         |                 ^~~~~~~~~~~
   include/linux/bitmap.h: In function 'bitmap_next_clear_region':
>> include/linux/bitmap.h:471:15: error: implicit declaration of function 'find_next_zero_bit' [-Werror=implicit-function-declaration]
     471 |         *rs = find_next_zero_bit(bitmap, end, *rs);
         |               ^~~~~~~~~~~~~~~~~~
>> include/linux/bitmap.h:472:15: error: implicit declaration of function 'find_next_bit' [-Werror=implicit-function-declaration]
     472 |         *re = find_next_bit(bitmap, end, *rs + 1);
         |               ^~~~~~~~~~~~~
   In file included from include/linux/smp.h:13,
                    from include/linux/percpu.h:7,
                    from include/linux/arch_topology.h:9,
                    from include/linux/topology.h:30,
                    from include/linux/gfp.h:9,
                    from include/linux/mm.h:10,
                    from arch/arc/include/asm/arcregs.h:149,
                    from arch/arc/include/asm/irqflags-compact.h:16,
                    from arch/arc/include/asm/irqflags.h:11,
                    from include/linux/irqflags.h:16,
                    from arch/arc/include/asm/smp.h:102,
                    from arch/arc/include/asm/cmpxchg.h:13,
                    from arch/arc/include/asm/atomic.h:13,
                    from include/linux/atomic.h:7,
                    from include/asm-generic/bitops/lock.h:5,
                    from arch/arc/include/asm/bitops.h:188,
                    from include/linux/bitops.h:33,
                    from include/linux/log2.h:12,
                    from kernel/bounds.c:13:
   include/linux/cpumask.h: In function 'cpumask_last':
>> include/linux/cpumask.h:206:16: error: implicit declaration of function 'find_last_bit' [-Werror=implicit-function-declaration]
     206 |         return find_last_bit(cpumask_bits(srcp), nr_cpumask_bits);
         |                ^~~~~~~~~~~~~
   include/linux/cpumask.h: In function 'num_online_cpus':
>> include/linux/cpumask.h:887:16: error: implicit declaration of function 'atomic_read' [-Werror=implicit-function-declaration]
     887 |         return atomic_read(&__num_online_cpus);
         |                ^~~~~~~~~~~
   In file included from include/linux/smp_types.h:5,
                    from include/linux/smp.h:15,
                    from include/linux/percpu.h:7,
                    from include/linux/arch_topology.h:9,
                    from include/linux/topology.h:30,
                    from include/linux/gfp.h:9,
                    from include/linux/mm.h:10,
                    from arch/arc/include/asm/arcregs.h:149,
                    from arch/arc/include/asm/irqflags-compact.h:16,
                    from arch/arc/include/asm/irqflags.h:11,
                    from include/linux/irqflags.h:16,
                    from arch/arc/include/asm/smp.h:102,
                    from arch/arc/include/asm/cmpxchg.h:13,
                    from arch/arc/include/asm/atomic.h:13,
                    from include/linux/atomic.h:7,
                    from include/asm-generic/bitops/lock.h:5,
                    from arch/arc/include/asm/bitops.h:188,
                    from include/linux/bitops.h:33,
                    from include/linux/log2.h:12,
                    from kernel/bounds.c:13:
   include/linux/llist.h: In function 'llist_del_all':
>> include/linux/llist.h:237:16: error: implicit declaration of function 'xchg' [-Werror=implicit-function-declaration]
     237 |         return xchg(&head->first, NULL);
         |                ^~~~
>> include/linux/llist.h:237:16: warning: returning 'int' from a function with return type 'struct llist_node *' makes pointer from integer without a cast [-Wint-conversion]
     237 |         return xchg(&head->first, NULL);
         |                ^~~~~~~~~~~~~~~~~~~~~~~~
   In file included from <command-line>:
   include/linux/gfp.h: In function 'gfp_migratetype':
>> include/linux/gfp.h:347:63: error: 'MIGRATE_MOVABLE' undeclared (first use in this function)
     347 |         BUILD_BUG_ON((___GFP_MOVABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_MOVABLE);
         |                                                               ^~~~~~~~~~~~~~~
   include/linux/compiler_types.h:302:23: note: in definition of macro '__compiletime_assert'
     302 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:322:9: note: in expansion of macro '_compiletime_assert'
     322 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
      39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      50 |         BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
         |         ^~~~~~~~~~~~~~~~
   include/linux/gfp.h:347:9: note: in expansion of macro 'BUILD_BUG_ON'
     347 |         BUILD_BUG_ON((___GFP_MOVABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_MOVABLE);
         |         ^~~~~~~~~~~~
   include/linux/gfp.h:347:63: note: each undeclared identifier is reported only once for each function it appears in
     347 |         BUILD_BUG_ON((___GFP_MOVABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_MOVABLE);
         |                                                               ^~~~~~~~~~~~~~~
   include/linux/compiler_types.h:302:23: note: in definition of macro '__compiletime_assert'
     302 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:322:9: note: in expansion of macro '_compiletime_assert'
     322 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
      39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      50 |         BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
         |         ^~~~~~~~~~~~~~~~
   include/linux/gfp.h:347:9: note: in expansion of macro 'BUILD_BUG_ON'
     347 |         BUILD_BUG_ON((___GFP_MOVABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_MOVABLE);
         |         ^~~~~~~~~~~~
   In file included from include/asm-generic/bug.h:5,
                    from arch/arc/include/asm/bug.h:30,
                    from include/linux/bug.h:5,
                    from include/linux/page-flags.h:10,
                    from kernel/bounds.c:10:
>> include/linux/gfp.h:349:22: error: 'page_group_by_mobility_disabled' undeclared (first use in this function)
     349 |         if (unlikely(page_group_by_mobility_disabled))
         |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:78:45: note: in definition of macro 'unlikely'
      78 | # define unlikely(x)    __builtin_expect(!!(x), 0)
         |                                             ^
   In file included from include/linux/mm.h:10,
                    from arch/arc/include/asm/arcregs.h:149,
                    from arch/arc/include/asm/irqflags-compact.h:16,
                    from arch/arc/include/asm/irqflags.h:11,
                    from include/linux/irqflags.h:16,
                    from arch/arc/include/asm/smp.h:102,
                    from arch/arc/include/asm/cmpxchg.h:13,
                    from arch/arc/include/asm/atomic.h:13,
                    from include/linux/atomic.h:7,
                    from include/asm-generic/bitops/lock.h:5,
                    from arch/arc/include/asm/bitops.h:188,
                    from include/linux/bitops.h:33,
                    from include/linux/log2.h:12,
                    from kernel/bounds.c:13:
   include/linux/gfp.h:350:24: error: 'MIGRATE_UNMOVABLE' undeclared (first use in this function)
     350 |                 return MIGRATE_UNMOVABLE;
         |                        ^~~~~~~~~~~~~~~~~
   include/linux/gfp.h: At top level:
   include/linux/gfp.h:441:25: warning: "ZONES_SHIFT" is not defined, evaluates to 0 [-Wundef]
     441 | #define GFP_ZONES_SHIFT ZONES_SHIFT
         |                         ^~~~~~~~~~~
   include/linux/gfp.h:444:10: note: in expansion of macro 'GFP_ZONES_SHIFT'
     444 | #if 16 * GFP_ZONES_SHIFT > BITS_PER_LONG
         |          ^~~~~~~~~~~~~~~
   include/linux/gfp.h: In function 'gfp_zone':
   include/linux/gfp.h:441:25: error: 'ZONES_SHIFT' undeclared (first use in this function); did you mean 'NMI_SHIFT'?
     441 | #define GFP_ZONES_SHIFT ZONES_SHIFT
         |                         ^~~~~~~~~~~
   include/linux/gfp.h:449:29: note: in expansion of macro 'GFP_ZONES_SHIFT'
     449 |         (ZONE_NORMAL << 0 * GFP_ZONES_SHIFT)                                   \
         |                             ^~~~~~~~~~~~~~~
   include/linux/gfp.h:481:14: note: in expansion of macro 'GFP_ZONE_TABLE'
     481 |         z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) &
         |              ^~~~~~~~~~~~~~
   include/linux/gfp.h: In function 'gfp_zonelist':
   include/linux/gfp.h:500:16: error: 'ZONELIST_FALLBACK' undeclared (first use in this function)
     500 |         return ZONELIST_FALLBACK;
         |                ^~~~~~~~~~~~~~~~~
   include/linux/gfp.h: In function 'node_zonelist':
   include/linux/gfp.h:514:16: error: implicit declaration of function 'NODE_DATA' [-Werror=implicit-function-declaration]
     514 |         return NODE_DATA(nid)->node_zonelists + gfp_zonelist(flags);
         |                ^~~~~~~~~
   include/linux/gfp.h:514:30: error: invalid type argument of '->' (have 'int')
     514 |         return NODE_DATA(nid)->node_zonelists + gfp_zonelist(flags);
         |                              ^~
   include/linux/gfp.h: At top level:
   include/linux/gfp.h:525:17: error: unknown type name 'nodemask_t'
     525 |                 nodemask_t *nodemask);
         |                 ^~~~~~~~~~
   include/linux/gfp.h:527:17: error: unknown type name 'nodemask_t'
     527 |                 nodemask_t *nodemask);
         |                 ^~~~~~~~~~
   include/linux/gfp.h:530:33: error: unknown type name 'nodemask_t'
     530 |                                 nodemask_t *nodemask, int nr_pages,
         |                                 ^~~~~~~~~~
   include/linux/gfp.h: In function 'alloc_pages_bulk_list':
   include/linux/gfp.h:538:16: error: implicit declaration of function '__alloc_pages_bulk'; did you mean 'alloc_pages_bulk_list'? [-Werror=implicit-function-declaration]
     538 |         return __alloc_pages_bulk(gfp, numa_mem_id(), NULL, nr_pages, list, NULL);
         |                ^~~~~~~~~~~~~~~~~~
         |                alloc_pages_bulk_list
   include/linux/gfp.h: In function 'alloc_pages_bulk_array_node':
   include/linux/gfp.h:550:20: error: 'NUMA_NO_NODE' undeclared (first use in this function)
     550 |         if (nid == NUMA_NO_NODE)
         |                    ^~~~~~~~~~~~
   In file included from include/asm-generic/bug.h:5,
                    from arch/arc/include/asm/bug.h:30,
                    from include/linux/bug.h:5,
                    from include/linux/page-flags.h:10,
                    from kernel/bounds.c:10:
   include/linux/gfp.h: In function '__alloc_pages_node':
   include/linux/gfp.h:563:37: error: 'MAX_NUMNODES' undeclared (first use in this function)
     563 |         VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES);
         |                                     ^~~~~~~~~~~~
   include/linux/compiler.h:78:45: note: in definition of macro 'unlikely'
      78 | # define unlikely(x)    __builtin_expect(!!(x), 0)
         |                                             ^
   include/linux/mmdebug.h:17:25: note: in expansion of macro 'BUG_ON'
      17 | #define VM_BUG_ON(cond) BUG_ON(cond)
         |                         ^~~~~~
   include/linux/gfp.h:563:9: note: in expansion of macro 'VM_BUG_ON'
     563 |         VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES);
         |         ^~~~~~~~~
   In file included from arch/arc/include/asm/bug.h:30,
                    from include/linux/bug.h:5,
                    from include/linux/page-flags.h:10,
                    from kernel/bounds.c:10:
   include/linux/gfp.h:564:52: error: implicit declaration of function 'node_online'; did you mean 'node_zonelist'? [-Werror=implicit-function-declaration]
     564 |         VM_WARN_ON((gfp_mask & __GFP_THISNODE) && !node_online(nid));
         |                                                    ^~~~~~~~~~~
   include/asm-generic/bug.h:121:32: note: in definition of macro 'WARN_ON'
     121 |         int __ret_warn_on = !!(condition);                              \
         |                                ^~~~~~~~~
   include/linux/gfp.h:564:9: note: in expansion of macro 'VM_WARN_ON'
     564 |         VM_WARN_ON((gfp_mask & __GFP_THISNODE) && !node_online(nid));
         |         ^~~~~~~~~~


vim +/MIGRATE_MOVABLE +347 include/linux/gfp.h

6cb062296f73e747 Christoph Lameter       2007-10-16  342  
01c0bfe061f309b8 Wei Yang                2020-06-03  343  static inline int gfp_migratetype(const gfp_t gfp_flags)
467c996c1e191063 Mel Gorman              2007-10-16  344  {
016c13daa5c9e482 Mel Gorman              2015-11-06  345  	VM_WARN_ON((gfp_flags & GFP_MOVABLE_MASK) == GFP_MOVABLE_MASK);
016c13daa5c9e482 Mel Gorman              2015-11-06  346  	BUILD_BUG_ON((1UL << GFP_MOVABLE_SHIFT) != ___GFP_MOVABLE);
016c13daa5c9e482 Mel Gorman              2015-11-06 @347  	BUILD_BUG_ON((___GFP_MOVABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_MOVABLE);
467c996c1e191063 Mel Gorman              2007-10-16  348  
467c996c1e191063 Mel Gorman              2007-10-16 @349  	if (unlikely(page_group_by_mobility_disabled))
467c996c1e191063 Mel Gorman              2007-10-16 @350  		return MIGRATE_UNMOVABLE;
467c996c1e191063 Mel Gorman              2007-10-16  351  
467c996c1e191063 Mel Gorman              2007-10-16  352  	/* Group based on mobility */
016c13daa5c9e482 Mel Gorman              2015-11-06  353  	return (gfp_flags & GFP_MOVABLE_MASK) >> GFP_MOVABLE_SHIFT;
467c996c1e191063 Mel Gorman              2007-10-16  354  }
dd56b046426760aa Mel Gorman              2015-11-06  355  #undef GFP_MOVABLE_MASK
dd56b046426760aa Mel Gorman              2015-11-06  356  #undef GFP_MOVABLE_SHIFT
a2f1b424900715ed Andi Kleen              2005-11-05  357  
d0164adc89f6bb37 Mel Gorman              2015-11-06  358  static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags)
d0164adc89f6bb37 Mel Gorman              2015-11-06  359  {
543dfb2df8ebb3eb Joshua Clayton          2016-01-14  360  	return !!(gfp_flags & __GFP_DIRECT_RECLAIM);
d0164adc89f6bb37 Mel Gorman              2015-11-06  361  }
d0164adc89f6bb37 Mel Gorman              2015-11-06  362  
20eb4f29b60286e0 Tejun Heo               2019-10-24  363  /**
20eb4f29b60286e0 Tejun Heo               2019-10-24  364   * gfpflags_normal_context - is gfp_flags a normal sleepable context?
20eb4f29b60286e0 Tejun Heo               2019-10-24  365   * @gfp_flags: gfp_flags to test
20eb4f29b60286e0 Tejun Heo               2019-10-24  366   *
20eb4f29b60286e0 Tejun Heo               2019-10-24  367   * Test whether @gfp_flags indicates that the allocation is from the
20eb4f29b60286e0 Tejun Heo               2019-10-24  368   * %current context and allowed to sleep.
20eb4f29b60286e0 Tejun Heo               2019-10-24  369   *
20eb4f29b60286e0 Tejun Heo               2019-10-24  370   * An allocation being allowed to block doesn't mean it owns the %current
20eb4f29b60286e0 Tejun Heo               2019-10-24  371   * context.  When direct reclaim path tries to allocate memory, the
20eb4f29b60286e0 Tejun Heo               2019-10-24  372   * allocation context is nested inside whatever %current was doing at the
20eb4f29b60286e0 Tejun Heo               2019-10-24  373   * time of the original allocation.  The nested allocation may be allowed
20eb4f29b60286e0 Tejun Heo               2019-10-24  374   * to block but modifying anything %current owns can corrupt the outer
20eb4f29b60286e0 Tejun Heo               2019-10-24  375   * context's expectations.
20eb4f29b60286e0 Tejun Heo               2019-10-24  376   *
20eb4f29b60286e0 Tejun Heo               2019-10-24  377   * %true result from this function indicates that the allocation context
20eb4f29b60286e0 Tejun Heo               2019-10-24  378   * can sleep and use anything that's associated with %current.
20eb4f29b60286e0 Tejun Heo               2019-10-24  379   */
20eb4f29b60286e0 Tejun Heo               2019-10-24  380  static inline bool gfpflags_normal_context(const gfp_t gfp_flags)
20eb4f29b60286e0 Tejun Heo               2019-10-24  381  {
20eb4f29b60286e0 Tejun Heo               2019-10-24  382  	return (gfp_flags & (__GFP_DIRECT_RECLAIM | __GFP_MEMALLOC)) ==
20eb4f29b60286e0 Tejun Heo               2019-10-24  383  		__GFP_DIRECT_RECLAIM;
20eb4f29b60286e0 Tejun Heo               2019-10-24  384  }
20eb4f29b60286e0 Tejun Heo               2019-10-24  385  
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  386  #ifdef CONFIG_HIGHMEM
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  387  #define OPT_ZONE_HIGHMEM ZONE_HIGHMEM
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  388  #else
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  389  #define OPT_ZONE_HIGHMEM ZONE_NORMAL
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  390  #endif
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  391  
4b51d66989218aad Christoph Lameter       2007-02-10  392  #ifdef CONFIG_ZONE_DMA
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  393  #define OPT_ZONE_DMA ZONE_DMA
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  394  #else
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  395  #define OPT_ZONE_DMA ZONE_NORMAL
4b51d66989218aad Christoph Lameter       2007-02-10  396  #endif
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  397  
4e4785bcf0c85032 Christoph Lameter       2006-09-25  398  #ifdef CONFIG_ZONE_DMA32
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  399  #define OPT_ZONE_DMA32 ZONE_DMA32
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  400  #else
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  401  #define OPT_ZONE_DMA32 ZONE_NORMAL
4e4785bcf0c85032 Christoph Lameter       2006-09-25  402  #endif
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  403  
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  404  /*
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  405   * GFP_ZONE_TABLE is a word size bitstring that is used for looking up the
ac2e8e40acf4c73e Hao Lee                 2017-05-03  406   * zone to use given the lowest 4 bits of gfp_t. Entries are GFP_ZONES_SHIFT
ac2e8e40acf4c73e Hao Lee                 2017-05-03  407   * bits long and there are 16 of them to cover all possible combinations of
263ff5d8e82e5772 matt mooney             2010-05-24  408   * __GFP_DMA, __GFP_DMA32, __GFP_MOVABLE and __GFP_HIGHMEM.
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  409   *
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  410   * The zone fallback order is MOVABLE=>HIGHMEM=>NORMAL=>DMA32=>DMA.
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  411   * But GFP_MOVABLE is not only a zone specifier but also an allocation
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  412   * policy. Therefore __GFP_MOVABLE plus another zone selector is valid.
263ff5d8e82e5772 matt mooney             2010-05-24  413   * Only 1 bit of the lowest 3 bits (DMA,DMA32,HIGHMEM) can be set to "1".
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  414   *
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  415   *       bit       result
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  416   *       =================
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  417   *       0x0    => NORMAL
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  418   *       0x1    => DMA or NORMAL
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  419   *       0x2    => HIGHMEM or NORMAL
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  420   *       0x3    => BAD (DMA+HIGHMEM)
4b33b6959581d509 Huaisheng Ye            2018-06-07  421   *       0x4    => DMA32 or NORMAL
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  422   *       0x5    => BAD (DMA+DMA32)
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  423   *       0x6    => BAD (HIGHMEM+DMA32)
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  424   *       0x7    => BAD (HIGHMEM+DMA32+DMA)
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  425   *       0x8    => NORMAL (MOVABLE+0)
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  426   *       0x9    => DMA or NORMAL (MOVABLE+DMA)
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  427   *       0xa    => MOVABLE (Movable is valid only if HIGHMEM is set too)
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  428   *       0xb    => BAD (MOVABLE+HIGHMEM+DMA)
4b33b6959581d509 Huaisheng Ye            2018-06-07  429   *       0xc    => DMA32 or NORMAL (MOVABLE+DMA32)
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  430   *       0xd    => BAD (MOVABLE+DMA32+DMA)
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  431   *       0xe    => BAD (MOVABLE+DMA32+HIGHMEM)
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  432   *       0xf    => BAD (MOVABLE+DMA32+HIGHMEM+DMA)
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  433   *
b11a7b94100cba5e Dan Williams            2016-03-17  434   * GFP_ZONES_SHIFT must be <= 2 on 32 bit platforms.
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  435   */
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  436  
b11a7b94100cba5e Dan Williams            2016-03-17  437  #if defined(CONFIG_ZONE_DEVICE) && (MAX_NR_ZONES-1) <= 4
b11a7b94100cba5e Dan Williams            2016-03-17  438  /* ZONE_DEVICE is not a valid GFP zone specifier */
b11a7b94100cba5e Dan Williams            2016-03-17  439  #define GFP_ZONES_SHIFT 2
b11a7b94100cba5e Dan Williams            2016-03-17  440  #else
b11a7b94100cba5e Dan Williams            2016-03-17 @441  #define GFP_ZONES_SHIFT ZONES_SHIFT
b11a7b94100cba5e Dan Williams            2016-03-17  442  #endif
b11a7b94100cba5e Dan Williams            2016-03-17  443  
b11a7b94100cba5e Dan Williams            2016-03-17  444  #if 16 * GFP_ZONES_SHIFT > BITS_PER_LONG
b11a7b94100cba5e Dan Williams            2016-03-17  445  #error GFP_ZONES_SHIFT too large to create GFP_ZONE_TABLE integer
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  446  #endif
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  447  
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  448  #define GFP_ZONE_TABLE ( \
b11a7b94100cba5e Dan Williams            2016-03-17  449  	(ZONE_NORMAL << 0 * GFP_ZONES_SHIFT)				       \
b11a7b94100cba5e Dan Williams            2016-03-17  450  	| (OPT_ZONE_DMA << ___GFP_DMA * GFP_ZONES_SHIFT)		       \
b11a7b94100cba5e Dan Williams            2016-03-17  451  	| (OPT_ZONE_HIGHMEM << ___GFP_HIGHMEM * GFP_ZONES_SHIFT)	       \
b11a7b94100cba5e Dan Williams            2016-03-17  452  	| (OPT_ZONE_DMA32 << ___GFP_DMA32 * GFP_ZONES_SHIFT)		       \
b11a7b94100cba5e Dan Williams            2016-03-17  453  	| (ZONE_NORMAL << ___GFP_MOVABLE * GFP_ZONES_SHIFT)		       \
b11a7b94100cba5e Dan Williams            2016-03-17  454  	| (OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA) * GFP_ZONES_SHIFT)    \
b11a7b94100cba5e Dan Williams            2016-03-17  455  	| (ZONE_MOVABLE << (___GFP_MOVABLE | ___GFP_HIGHMEM) * GFP_ZONES_SHIFT)\
b11a7b94100cba5e Dan Williams            2016-03-17  456  	| (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * GFP_ZONES_SHIFT)\
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  457  )
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  458  
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  459  /*
263ff5d8e82e5772 matt mooney             2010-05-24  460   * GFP_ZONE_BAD is a bitmap for all combinations of __GFP_DMA, __GFP_DMA32
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  461   * __GFP_HIGHMEM and __GFP_MOVABLE that are not permitted. One flag per
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  462   * entry starting with bit 0. Bit is set if the combination is not
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  463   * allowed.
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  464   */
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  465  #define GFP_ZONE_BAD ( \
16b56cf4b8a0fa9a Namhyung Kim            2010-10-26  466  	1 << (___GFP_DMA | ___GFP_HIGHMEM)				      \
16b56cf4b8a0fa9a Namhyung Kim            2010-10-26  467  	| 1 << (___GFP_DMA | ___GFP_DMA32)				      \
16b56cf4b8a0fa9a Namhyung Kim            2010-10-26  468  	| 1 << (___GFP_DMA32 | ___GFP_HIGHMEM)				      \
16b56cf4b8a0fa9a Namhyung Kim            2010-10-26  469  	| 1 << (___GFP_DMA | ___GFP_DMA32 | ___GFP_HIGHMEM)		      \
16b56cf4b8a0fa9a Namhyung Kim            2010-10-26  470  	| 1 << (___GFP_MOVABLE | ___GFP_HIGHMEM | ___GFP_DMA)		      \
16b56cf4b8a0fa9a Namhyung Kim            2010-10-26  471  	| 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_DMA)		      \
16b56cf4b8a0fa9a Namhyung Kim            2010-10-26  472  	| 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_HIGHMEM)		      \
16b56cf4b8a0fa9a Namhyung Kim            2010-10-26  473  	| 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_DMA | ___GFP_HIGHMEM)  \
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  474  )
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  475  
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  476  static inline enum zone_type gfp_zone(gfp_t flags)
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  477  {
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  478  	enum zone_type z;
16b56cf4b8a0fa9a Namhyung Kim            2010-10-26  479  	int bit = (__force int) (flags & GFP_ZONEMASK);
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  480  
b11a7b94100cba5e Dan Williams            2016-03-17  481  	z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) &
b11a7b94100cba5e Dan Williams            2016-03-17  482  					 ((1 << GFP_ZONES_SHIFT) - 1);
82d4b5779a758877 Dave Hansen             2011-05-24  483  	VM_BUG_ON((GFP_ZONE_BAD >> bit) & 1);
b70d94ee438b3fd9 Christoph Lameter       2009-06-16  484  	return z;
4e4785bcf0c85032 Christoph Lameter       2006-09-25  485  }
4e4785bcf0c85032 Christoph Lameter       2006-09-25  486  
^1da177e4c3f4152 Linus Torvalds          2005-04-16  487  /*
^1da177e4c3f4152 Linus Torvalds          2005-04-16  488   * There is only one page-allocator function, and two main namespaces to
^1da177e4c3f4152 Linus Torvalds          2005-04-16  489   * it. The alloc_page*() variants return 'struct page *' and as such
^1da177e4c3f4152 Linus Torvalds          2005-04-16  490   * can allocate highmem pages, the *get*page*() variants return
^1da177e4c3f4152 Linus Torvalds          2005-04-16  491   * virtual kernel addresses to the allocated page(s).
^1da177e4c3f4152 Linus Torvalds          2005-04-16  492   */
^1da177e4c3f4152 Linus Torvalds          2005-04-16  493  
54a6eb5c4765aa57 Mel Gorman              2008-04-28  494  static inline int gfp_zonelist(gfp_t flags)
54a6eb5c4765aa57 Mel Gorman              2008-04-28  495  {
c00eb15a8914b8ba Yaowei Bai              2016-01-14  496  #ifdef CONFIG_NUMA
c00eb15a8914b8ba Yaowei Bai              2016-01-14  497  	if (unlikely(flags & __GFP_THISNODE))
c00eb15a8914b8ba Yaowei Bai              2016-01-14  498  		return ZONELIST_NOFALLBACK;
c00eb15a8914b8ba Yaowei Bai              2016-01-14  499  #endif
c00eb15a8914b8ba Yaowei Bai              2016-01-14 @500  	return ZONELIST_FALLBACK;
54a6eb5c4765aa57 Mel Gorman              2008-04-28  501  }
54a6eb5c4765aa57 Mel Gorman              2008-04-28  502  
^1da177e4c3f4152 Linus Torvalds          2005-04-16  503  /*
^1da177e4c3f4152 Linus Torvalds          2005-04-16  504   * We get the zone list from the current node and the gfp_mask.
cb152a1a95606aad Shijie Luo              2021-05-06  505   * This zone list contains a maximum of MAX_NUMNODES*MAX_NR_ZONES zones.
54a6eb5c4765aa57 Mel Gorman              2008-04-28  506   * There are two zonelists per node, one for all zones with memory and
54a6eb5c4765aa57 Mel Gorman              2008-04-28  507   * one containing just zones from the node the zonelist belongs to.
^1da177e4c3f4152 Linus Torvalds          2005-04-16  508   *
d3c251ab95b69f3d Mike Rapoport           2021-06-28  509   * For the case of non-NUMA systems the NODE_DATA() gets optimized to
d3c251ab95b69f3d Mike Rapoport           2021-06-28  510   * &contig_page_data at compile-time.
^1da177e4c3f4152 Linus Torvalds          2005-04-16  511   */
0e88460da6ab7bb6 Mel Gorman              2008-04-28  512  static inline struct zonelist *node_zonelist(int nid, gfp_t flags)
0e88460da6ab7bb6 Mel Gorman              2008-04-28  513  {
54a6eb5c4765aa57 Mel Gorman              2008-04-28 @514  	return NODE_DATA(nid)->node_zonelists + gfp_zonelist(flags);
0e88460da6ab7bb6 Mel Gorman              2008-04-28  515  }
^1da177e4c3f4152 Linus Torvalds          2005-04-16  516  
^1da177e4c3f4152 Linus Torvalds          2005-04-16  517  #ifndef HAVE_ARCH_FREE_PAGE
^1da177e4c3f4152 Linus Torvalds          2005-04-16  518  static inline void arch_free_page(struct page *page, int order) { }
^1da177e4c3f4152 Linus Torvalds          2005-04-16  519  #endif
cc102509074bba03 Nicholas Piggin         2006-12-06  520  #ifndef HAVE_ARCH_ALLOC_PAGE
cc102509074bba03 Nicholas Piggin         2006-12-06  521  static inline void arch_alloc_page(struct page *page, int order) { }
cc102509074bba03 Nicholas Piggin         2006-12-06  522  #endif
^1da177e4c3f4152 Linus Torvalds          2005-04-16  523  
84172f4bb7524244 Matthew Wilcox (Oracle  2021-04-29  524) struct page *__alloc_pages(gfp_t gfp, unsigned int order, int preferred_nid,
04ec6264f28793e5 Vlastimil Babka         2017-07-06 @525  		nodemask_t *nodemask);
da90006b76b64857 Andrew Morton           2021-09-16  526  struct folio *__folio_alloc(gfp_t gfp, unsigned int order, int preferred_nid,
da90006b76b64857 Andrew Morton           2021-09-16  527  		nodemask_t *nodemask);
e4048e5dc4aecec6 KOSAKI Motohiro         2008-07-23  528  
387ba26fb1cb9be9 Mel Gorman              2021-04-29  529  unsigned long __alloc_pages_bulk(gfp_t gfp, int preferred_nid,
387ba26fb1cb9be9 Mel Gorman              2021-04-29  530  				nodemask_t *nodemask, int nr_pages,
0f87d9d30f21390d Mel Gorman              2021-04-29  531  				struct list_head *page_list,
0f87d9d30f21390d Mel Gorman              2021-04-29  532  				struct page **page_array);
387ba26fb1cb9be9 Mel Gorman              2021-04-29  533  
387ba26fb1cb9be9 Mel Gorman              2021-04-29  534  /* Bulk allocate order-0 pages */
387ba26fb1cb9be9 Mel Gorman              2021-04-29  535  static inline unsigned long
0f87d9d30f21390d Mel Gorman              2021-04-29  536  alloc_pages_bulk_list(gfp_t gfp, unsigned long nr_pages, struct list_head *list)
387ba26fb1cb9be9 Mel Gorman              2021-04-29  537  {
0f87d9d30f21390d Mel Gorman              2021-04-29 @538  	return __alloc_pages_bulk(gfp, numa_mem_id(), NULL, nr_pages, list, NULL);
0f87d9d30f21390d Mel Gorman              2021-04-29  539  }
0f87d9d30f21390d Mel Gorman              2021-04-29  540  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 25909 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-09-19 17:13 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-19 13:12 [RFC v2 PATCH 0/3] mm: common PAGE_SIZE shift macros Oleksandr Natalenko
2021-09-19 13:12 ` [RFC v2 PATCH 1/3] mm: add PG2KB/KB2PG helper macros Oleksandr Natalenko
2021-09-19 13:21   ` Greg Kroah-Hartman
2021-09-19 14:21   ` Matthew Wilcox
2021-09-19 13:12 ` [RFC v2 PATCH 2/3] mm: replace custom PG2KB/KB2PG macros with common ones Oleksandr Natalenko
2021-09-19 15:35   ` kernel test robot
2021-09-19 17:13   ` kernel test robot
2021-09-19 13:12 ` [RFC v2 PATCH 3/3] mm: replace open-coded PG2KB/KB2PG variants with macros Oleksandr Natalenko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.