]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - mm/memory_hotplug.c
media: dvb_ca_en50221: prevent using slot_info for Spectre attacs
[mirror_ubuntu-bionic-kernel.git] / mm / memory_hotplug.c
index c52aa05b106c76dd5b469bc66e0227348d7524e5..d397bacc14fdd57ccbf4afa2b13696ac18ba9856 100644 (file)
@@ -54,6 +54,8 @@ static DEFINE_MUTEX(online_page_callback_lock);
 
 DEFINE_STATIC_PERCPU_RWSEM(mem_hotplug_lock);
 
+static int default_kernel_zone = ZONE_NORMAL;
+
 void get_online_mems(void)
 {
        percpu_down_read(&mem_hotplug_lock);
@@ -833,10 +835,21 @@ void __ref move_pfn_range_to_zone(struct zone *zone,
        set_zone_contiguous(zone);
 }
 
+void set_default_mem_hotplug_zone(enum zone_type zone)
+{
+       default_kernel_zone = zone;
+}
+
+#ifdef CONFIG_HIGHMEM
+#define MAX_KERNEL_ZONE ZONE_HIGHMEM
+#else
+#define MAX_KERNEL_ZONE ZONE_NORMAL
+#endif
+
 /*
  * Returns a default kernel memory zone for the given pfn range.
  * If no kernel zone covers this pfn range it will automatically go
- * to the ZONE_NORMAL.
+ * to the MAX_KERNEL_ZONE.
  */
 static struct zone *default_kernel_zone_for_pfn(int nid, unsigned long start_pfn,
                unsigned long nr_pages)
@@ -844,14 +857,14 @@ static struct zone *default_kernel_zone_for_pfn(int nid, unsigned long start_pfn
        struct pglist_data *pgdat = NODE_DATA(nid);
        int zid;
 
-       for (zid = 0; zid <= ZONE_NORMAL; zid++) {
+       for (zid = 0; zid <= MAX_KERNEL_ZONE; zid++) {
                struct zone *zone = &pgdat->node_zones[zid];
 
                if (zone_intersects(zone, start_pfn, nr_pages))
                        return zone;
        }
 
-       return &pgdat->node_zones[ZONE_NORMAL];
+       return &pgdat->node_zones[default_kernel_zone];
 }
 
 static inline struct zone *default_zone_for_pfn(int nid, unsigned long start_pfn,