From 4c5736de7785f499aad01c87b568011aebc8ebf4 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Tue, 3 Feb 2004 18:45:06 -0800 Subject: [PATCH] [PATCH] Remove memblks from the kernel From: "Martin J. Bligh" This patch removes memblks from the kernel ... we don't use them, and the NUMA API that was planning to use them when they were originally designed isn't going to use them anymore. They're just unnecessary added complexity now ... time for them to go. There's a slight complication in that ia64 uses something with a similar name for part of its memory layout, but Jes Sorensen kindly untangled them from each other for us. The patch with his modifications is below. Jes tested it on ia64, and I testbuilt it with every config in my arsenal. --- arch/i386/mach-default/topology.c | 4 --- arch/i386/mach-es7000/topology.c | 4 --- arch/ia64/kernel/acpi.c | 10 +++---- arch/ia64/mm/discontig.c | 6 ++--- arch/ia64/mm/numa.c | 25 +++--------------- drivers/base/Makefile | 2 +- drivers/base/memblk.c | 43 ------------------------------- include/asm-alpha/topology.h | 3 --- include/asm-generic/topology.h | 6 ----- include/asm-i386/memblk.h | 23 ----------------- include/asm-i386/topology.h | 6 ----- include/asm-ia64/mmzone.h | 6 ++--- include/asm-ia64/numa.h | 4 +-- include/asm-ia64/topology.h | 15 ----------- include/asm-ppc64/topology.h | 4 --- include/asm-x86_64/memblk.h | 1 - include/asm-x86_64/topology.h | 2 -- include/linux/memblk.h | 32 ----------------------- include/linux/mmzone.h | 29 --------------------- mm/page_alloc.c | 2 -- 20 files changed, 18 insertions(+), 209 deletions(-) delete mode 100644 drivers/base/memblk.c delete mode 100644 include/asm-i386/memblk.h delete mode 100644 include/asm-x86_64/memblk.h delete mode 100644 include/linux/memblk.h diff --git a/arch/i386/mach-default/topology.c b/arch/i386/mach-default/topology.c index cd6449567209a..e96d8910ab529 100644 --- a/arch/i386/mach-default/topology.c +++ b/arch/i386/mach-default/topology.c @@ -34,10 +34,8 @@ struct i386_cpu cpu_devices[NR_CPUS]; #ifdef CONFIG_NUMA #include #include -#include struct i386_node node_devices[MAX_NUMNODES]; -struct i386_memblk memblk_devices[MAX_NR_MEMBLKS]; static int __init topology_init(void) { @@ -47,8 +45,6 @@ static int __init topology_init(void) arch_register_node(i); for (i = 0; i < NR_CPUS; i++) if (cpu_possible(i)) arch_register_cpu(i); - for (i = 0; i < num_online_memblks(); i++) - arch_register_memblk(i); return 0; } diff --git a/arch/i386/mach-es7000/topology.c b/arch/i386/mach-es7000/topology.c index cd6449567209a..e96d8910ab529 100644 --- a/arch/i386/mach-es7000/topology.c +++ b/arch/i386/mach-es7000/topology.c @@ -34,10 +34,8 @@ struct i386_cpu cpu_devices[NR_CPUS]; #ifdef CONFIG_NUMA #include #include -#include struct i386_node node_devices[MAX_NUMNODES]; -struct i386_memblk memblk_devices[MAX_NR_MEMBLKS]; static int __init topology_init(void) { @@ -47,8 +45,6 @@ static int __init topology_init(void) arch_register_node(i); for (i = 0; i < NR_CPUS; i++) if (cpu_possible(i)) arch_register_cpu(i); - for (i = 0; i < num_online_memblks(); i++) - arch_register_memblk(i); return 0; } diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index fc9d6b958df1b..2a88bf4619ba5 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c @@ -409,7 +409,7 @@ acpi_numa_memory_affinity_init (struct acpi_table_memory_affinity *ma) pxm_bit_set(pxm); /* Insertion sort based on base address */ - pend = &node_memblk[num_memblks]; + pend = &node_memblk[num_node_memblks]; for (p = &node_memblk[0]; p < pend; p++) { if (paddr < p->start_paddr) break; @@ -421,7 +421,7 @@ acpi_numa_memory_affinity_init (struct acpi_table_memory_affinity *ma) p->start_paddr = paddr; p->size = size; p->nid = pxm; - num_memblks++; + num_node_memblks++; } void __init @@ -448,7 +448,7 @@ acpi_numa_arch_fixup (void) } /* set logical node id in memory chunk structure */ - for (i = 0; i < num_memblks; i++) + for (i = 0; i < num_node_memblks; i++) node_memblk[i].nid = pxm_to_nid_map[node_memblk[i].nid]; /* assign memory bank numbers for each chunk on each node */ @@ -456,7 +456,7 @@ acpi_numa_arch_fixup (void) int bank; bank = 0; - for (j = 0; j < num_memblks; j++) + for (j = 0; j < num_node_memblks; j++) if (node_memblk[j].nid == i) node_memblk[j].bank = bank++; } @@ -466,7 +466,7 @@ acpi_numa_arch_fixup (void) node_cpuid[i].nid = pxm_to_nid_map[node_cpuid[i].nid]; printk(KERN_INFO "Number of logical nodes in system = %d\n", numnodes); - printk(KERN_INFO "Number of memory chunks in system = %d\n", num_memblks); + printk(KERN_INFO "Number of memory chunks in system = %d\n", num_node_memblks); if (!slit_table) return; memset(numa_slit, -1, sizeof(numa_slit)); diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index 9f3976057afcb..d1306576f8d84 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c @@ -419,14 +419,14 @@ void call_pernode_memory(unsigned long start, unsigned long len, void *arg) func = arg; - if (!num_memblks) { - /* No SRAT table, to assume one node (node 0) */ + if (!num_node_memblks) { + /* No SRAT table, so assume one node (node 0) */ if (start < end) (*func)(start, len, 0); return; } - for (i = 0; i < num_memblks; i++) { + for (i = 0; i < num_node_memblks; i++) { rs = max(start, node_memblk[i].start_paddr); re = min(end, node_memblk[i].start_paddr + node_memblk[i].size); diff --git a/arch/ia64/mm/numa.c b/arch/ia64/mm/numa.c index 34752bedd5044..ef2dbcfdad80c 100644 --- a/arch/ia64/mm/numa.c +++ b/arch/ia64/mm/numa.c @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -21,7 +20,6 @@ #include #include -static struct memblk *sysfs_memblks; static struct node *sysfs_nodes; static struct cpu *sysfs_cpus; @@ -29,8 +27,8 @@ static struct cpu *sysfs_cpus; * The following structures are usually initialized by ACPI or * similar mechanisms and describe the NUMA characteristics of the machine. */ -int num_memblks; -struct node_memblk_s node_memblk[NR_MEMBLKS]; +int num_node_memblks; +struct node_memblk_s node_memblk[NR_NODE_MEMBLKS]; struct node_cpuid_s node_cpuid[NR_CPUS]; /* * This is a matrix with "distances" between nodes, they should be @@ -44,12 +42,12 @@ paddr_to_nid(unsigned long paddr) { int i; - for (i = 0; i < num_memblks; i++) + for (i = 0; i < num_node_memblks; i++) if (paddr >= node_memblk[i].start_paddr && paddr < node_memblk[i].start_paddr + node_memblk[i].size) break; - return (i < num_memblks) ? node_memblk[i].nid : (num_memblks ? -1 : 0); + return (i < num_node_memblks) ? node_memblk[i].nid : (num_node_memblks ? -1 : 0); } static int __init topology_init(void) @@ -63,18 +61,8 @@ static int __init topology_init(void) } memset(sysfs_nodes, 0, sizeof(struct node) * numnodes); - sysfs_memblks = kmalloc(sizeof(struct memblk) * num_memblks, - GFP_KERNEL); - if (!sysfs_memblks) { - kfree(sysfs_nodes); - err = -ENOMEM; - goto out; - } - memset(sysfs_memblks, 0, sizeof(struct memblk) * num_memblks); - sysfs_cpus = kmalloc(sizeof(struct cpu) * NR_CPUS, GFP_KERNEL); if (!sysfs_cpus) { - kfree(sysfs_memblks); kfree(sysfs_nodes); err = -ENOMEM; goto out; @@ -85,11 +73,6 @@ static int __init topology_init(void) if ((err = register_node(&sysfs_nodes[i], i, 0))) goto out; - for (i = 0; i < num_memblks; i++) - if ((err = register_memblk(&sysfs_memblks[i], i, - &sysfs_nodes[memblk_to_node(i)]))) - goto out; - for (i = 0; i < NR_CPUS; i++) if (cpu_online(i)) if((err = register_cpu(&sysfs_cpus[i], i, diff --git a/drivers/base/Makefile b/drivers/base/Makefile index e19ffda6cdba7..0edaebead0326 100644 --- a/drivers/base/Makefile +++ b/drivers/base/Makefile @@ -5,4 +5,4 @@ obj-y := core.o sys.o interface.o bus.o \ cpu.o firmware.o init.o map.o obj-y += power/ obj-$(CONFIG_FW_LOADER) += firmware_class.o -obj-$(CONFIG_NUMA) += node.o memblk.o +obj-$(CONFIG_NUMA) += node.o diff --git a/drivers/base/memblk.c b/drivers/base/memblk.c deleted file mode 100644 index 67f989f5711e8..0000000000000 --- a/drivers/base/memblk.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * drivers/base/memblk.c - basic Memory Block class support - */ - -#include -#include -#include -#include -#include - - -static struct sysdev_class memblk_class = { - set_kset_name("memblk"), -}; - -/* - * register_memblk - Setup a driverfs device for a MemBlk - * @num - MemBlk number to use when creating the device. - * - * Initialize and register the MemBlk device. - */ -int __init register_memblk(struct memblk *memblk, int num, struct node *root) -{ - int error; - - memblk->node_id = memblk_to_node(num); - memblk->sysdev.cls = &memblk_class, - memblk->sysdev.id = num; - - error = sys_device_register(&memblk->sysdev); - if (!error) - error = sysfs_create_link(&root->sysdev.kobj, - &memblk->sysdev.kobj, - kobject_name(&memblk->sysdev.kobj)); - return error; -} - - -int __init register_memblk_type(void) -{ - return sysdev_class_register(&memblk_class); -} -postcore_initcall(register_memblk_type); diff --git a/include/asm-alpha/topology.h b/include/asm-alpha/topology.h index dbdb0d4f90e11..65a6a2e8b6a1c 100644 --- a/include/asm-alpha/topology.h +++ b/include/asm-alpha/topology.h @@ -39,9 +39,6 @@ static inline int node_to_cpumask(int node) return node_cpu_mask; } -# define node_to_memblk(node) (node) -# define memblk_to_node(memblk) (memblk) - /* Cross-node load balancing interval. */ # define NODE_BALANCE_RATE 10 diff --git a/include/asm-generic/topology.h b/include/asm-generic/topology.h index ba29df93e8ebc..8f84159f0f4b5 100644 --- a/include/asm-generic/topology.h +++ b/include/asm-generic/topology.h @@ -32,9 +32,6 @@ #ifndef cpu_to_node #define cpu_to_node(cpu) (0) #endif -#ifndef memblk_to_node -#define memblk_to_node(memblk) (0) -#endif #ifndef parent_node #define parent_node(node) (0) #endif @@ -44,9 +41,6 @@ #ifndef node_to_first_cpu #define node_to_first_cpu(node) (0) #endif -#ifndef node_to_memblk -#define node_to_memblk(node) (0) -#endif #ifndef pcibus_to_cpumask #define pcibus_to_cpumask(bus) (cpu_online_map) #endif diff --git a/include/asm-i386/memblk.h b/include/asm-i386/memblk.h deleted file mode 100644 index 668fc0d644ba6..0000000000000 --- a/include/asm-i386/memblk.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef _ASM_I386_MEMBLK_H_ -#define _ASM_I386_MEMBLK_H_ - -#include -#include -#include -#include - -#include - -struct i386_memblk { - struct memblk memblk; -}; -extern struct i386_memblk memblk_devices[MAX_NR_MEMBLKS]; - -static inline int arch_register_memblk(int num){ - int p_node = memblk_to_node(num); - - return register_memblk(&memblk_devices[num].memblk, num, - &node_devices[p_node].node); -} - -#endif /* _ASM_I386_MEMBLK_H_ */ diff --git a/include/asm-i386/topology.h b/include/asm-i386/topology.h index 9190a4f3408f3..219c6efbd972e 100644 --- a/include/asm-i386/topology.h +++ b/include/asm-i386/topology.h @@ -43,9 +43,6 @@ static inline int cpu_to_node(int cpu) return cpu_2_node[cpu]; } -/* Returns the number of the node containing MemBlk 'memblk' */ -#define memblk_to_node(memblk) (memblk) - /* Returns the number of the node containing Node 'node'. This architecture is flat, so it is a pretty simple function! */ #define parent_node(node) (node) @@ -63,9 +60,6 @@ static inline int node_to_first_cpu(int node) return first_cpu(mask); } -/* Returns the number of the first MemBlk on Node 'node' */ -#define node_to_memblk(node) (node) - /* Returns the number of the node containing PCI bus 'bus' */ static inline cpumask_t pcibus_to_cpumask(int bus) { diff --git a/include/asm-ia64/mmzone.h b/include/asm-ia64/mmzone.h index 9b9afd467f764..f28f0b28504fa 100644 --- a/include/asm-ia64/mmzone.h +++ b/include/asm-ia64/mmzone.h @@ -20,11 +20,11 @@ #ifdef CONFIG_IA64_DIG /* DIG systems are small */ # define MAX_PHYSNODE_ID 8 # define NR_NODES 8 -# define NR_MEMBLKS (NR_NODES * 32) +# define NR_NODE_MEMBLKS (NR_NODES * 8) #else /* sn2 is the biggest case, so we use that if !DIG */ # define MAX_PHYSNODE_ID 2048 # define NR_NODES 256 -# define NR_MEMBLKS (NR_NODES) +# define NR_NODE_MEMBLKS (NR_NODES * 4) #endif extern unsigned long max_low_pfn; @@ -34,6 +34,6 @@ extern unsigned long max_low_pfn; #define pfn_to_page(pfn) (vmem_map + (pfn)) #else /* CONFIG_DISCONTIGMEM */ -# define NR_MEMBLKS 1 +# define NR_NODE_MEMBLKS 4 #endif /* CONFIG_DISCONTIGMEM */ #endif /* _ASM_IA64_MMZONE_H */ diff --git a/include/asm-ia64/numa.h b/include/asm-ia64/numa.h index de73c7000a521..6459f619a4971 100644 --- a/include/asm-ia64/numa.h +++ b/include/asm-ia64/numa.h @@ -28,7 +28,7 @@ extern cpumask_t node_to_cpu_mask[MAX_NUMNODES] __cacheline_aligned; /* Stuff below this line could be architecture independent */ -extern int num_memblks; /* total number of memory chunks */ +extern int num_node_memblks; /* total number of memory chunks */ /* * List of node memory chunks. Filled when parsing SRAT table to @@ -47,7 +47,7 @@ struct node_cpuid_s { int nid; /* logical node containing this CPU */ }; -extern struct node_memblk_s node_memblk[NR_MEMBLKS]; +extern struct node_memblk_s node_memblk[NR_NODE_MEMBLKS]; extern struct node_cpuid_s node_cpuid[NR_CPUS]; /* diff --git a/include/asm-ia64/topology.h b/include/asm-ia64/topology.h index f6b971b5267cb..d4105bd764896 100644 --- a/include/asm-ia64/topology.h +++ b/include/asm-ia64/topology.h @@ -28,15 +28,6 @@ */ #define node_to_cpumask(node) (node_to_cpu_mask[node]) -/* - * Returns the number of the node containing MemBlk 'memblk' - */ -#ifdef CONFIG_ACPI_NUMA -#define memblk_to_node(memblk) (node_memblk[memblk].nid) -#else -#define memblk_to_node(memblk) (memblk) -#endif - /* * Returns the number of the node containing Node 'nid'. * Not implemented here. Multi-level hierarchies detected with @@ -49,12 +40,6 @@ */ #define node_to_first_cpu(node) (__ffs(node_to_cpumask(node))) -/* - * Returns the number of the first MemBlk on Node 'node' - * Should be fixed when IA64 discontigmem goes in. - */ -#define node_to_memblk(node) (node) - /* Cross-node load balancing interval. */ #define NODE_BALANCE_RATE 10 diff --git a/include/asm-ppc64/topology.h b/include/asm-ppc64/topology.h index a41ca6cba882b..c6846ecfaf8b6 100644 --- a/include/asm-ppc64/topology.h +++ b/include/asm-ppc64/topology.h @@ -19,8 +19,6 @@ static inline int cpu_to_node(int cpu) return node; } -#define memblk_to_node(memblk) (memblk) - #define parent_node(node) (node) static inline cpumask_t node_to_cpumask(int node) @@ -35,8 +33,6 @@ static inline int node_to_first_cpu(int node) return first_cpu(tmp); } -#define node_to_memblk(node) (node) - #define pcibus_to_cpumask(bus) (cpu_online_map) #define nr_cpus_node(node) (nr_cpus_in_node[node]) diff --git a/include/asm-x86_64/memblk.h b/include/asm-x86_64/memblk.h deleted file mode 100644 index cb084c244f0d4..0000000000000 --- a/include/asm-x86_64/memblk.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/include/asm-x86_64/topology.h b/include/asm-x86_64/topology.h index 1a614e8c0b189..02b24f4ef8d97 100644 --- a/include/asm-x86_64/topology.h +++ b/include/asm-x86_64/topology.h @@ -15,11 +15,9 @@ extern int fake_node; extern unsigned long cpu_online_map; #define cpu_to_node(cpu) (fake_node ? 0 : (cpu)) -#define memblk_to_node(memblk) (fake_node ? 0 : (memblk)) #define parent_node(node) (node) #define node_to_first_cpu(node) (fake_node ? 0 : (node)) #define node_to_cpumask(node) (fake_node ? cpu_online_map : (1UL << (node))) -#define node_to_memblk(node) (node) static inline unsigned long pcibus_to_cpumask(int bus) { diff --git a/include/linux/memblk.h b/include/linux/memblk.h deleted file mode 100644 index 5f216fb47907b..0000000000000 --- a/include/linux/memblk.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * include/linux/memblk.h - generic memblk definition - * - * This is mainly for topological representation. We define the - * basic 'struct memblk' here, which can be embedded in per-arch - * definitions of memory blocks. - * - * Basic handling of the devices is done in drivers/base/memblk.c - * and system devices are handled in drivers/base/sys.c. - * - * MemBlks are exported via driverfs in the class/memblk/devices/ - * directory. - * - * Per-memblk interfaces can be implemented using a struct device_interface. - * See the following for how to do this: - * - drivers/base/intf.c - * - Documentation/driver-model/interface.txt - */ -#ifndef _LINUX_MEMBLK_H_ -#define _LINUX_MEMBLK_H_ - -#include -#include - -struct memblk { - int node_id; /* The node which contains the MemBlk */ - struct sys_device sysdev; -}; - -extern int register_memblk(struct memblk *, int, struct node *); - -#endif /* _LINUX_MEMBLK_H_ */ diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 71f2f39cae0f1..179f51f29f78a 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -294,12 +294,6 @@ struct file; int min_free_kbytes_sysctl_handler(struct ctl_table *, int, struct file *, void *, size_t *); -#ifdef CONFIG_NUMA -#define MAX_NR_MEMBLKS BITS_PER_LONG /* Max number of Memory Blocks */ -#else /* !CONFIG_NUMA */ -#define MAX_NR_MEMBLKS 1 -#endif /* CONFIG_NUMA */ - #include /* Returns the number of the current Node. */ #define numa_node_id() (cpu_to_node(smp_processor_id())) @@ -342,7 +336,6 @@ extern struct pglist_data contig_page_data; #endif extern DECLARE_BITMAP(node_online_map, MAX_NUMNODES); -extern DECLARE_BITMAP(memblk_online_map, MAX_NR_MEMBLKS); #if defined(CONFIG_DISCONTIGMEM) || defined(CONFIG_NUMA) @@ -360,20 +353,6 @@ static inline unsigned int num_online_nodes(void) return num; } -#define memblk_online(memblk) test_bit(memblk, memblk_online_map) -#define memblk_set_online(memblk) set_bit(memblk, memblk_online_map) -#define memblk_set_offline(memblk) clear_bit(memblk, memblk_online_map) -static inline unsigned int num_online_memblks(void) -{ - int i, num = 0; - - for(i = 0; i < MAX_NR_MEMBLKS; i++){ - if (memblk_online(i)) - num++; - } - return num; -} - #else /* !CONFIG_DISCONTIGMEM && !CONFIG_NUMA */ #define node_online(node) \ @@ -384,14 +363,6 @@ static inline unsigned int num_online_memblks(void) ({ BUG_ON((node) != 0); clear_bit(node, node_online_map); }) #define num_online_nodes() 1 -#define memblk_online(memblk) \ - ({ BUG_ON((memblk) != 0); test_bit(memblk, memblk_online_map); }) -#define memblk_set_online(memblk) \ - ({ BUG_ON((memblk) != 0); set_bit(memblk, memblk_online_map); }) -#define memblk_set_offline(memblk) \ - ({ BUG_ON((memblk) != 0); clear_bit(memblk, memblk_online_map); }) -#define num_online_memblks() 1 - #endif /* CONFIG_DISCONTIGMEM || CONFIG_NUMA */ #endif /* !__ASSEMBLY__ */ #endif /* __KERNEL__ */ diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 0a6832b028b54..c73033e4ee473 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -35,7 +35,6 @@ #include DECLARE_BITMAP(node_online_map, MAX_NUMNODES); -DECLARE_BITMAP(memblk_online_map, MAX_NR_MEMBLKS); struct pglist_data *pgdat_list; unsigned long totalram_pages; unsigned long totalhigh_pages; @@ -1374,7 +1373,6 @@ void __init free_area_init_node(int nid, struct pglist_data *pgdat, pgdat->node_mem_map = node_mem_map; free_area_init_core(pgdat, zones_size, zholes_size); - memblk_set_online(node_to_memblk(nid)); } #ifndef CONFIG_DISCONTIGMEM -- 2.53.0