physid for nodes
PATCH 1/1 physid for nodes
Here's the node physid patch refreshed against the latest BK bits. It works ok for nodes, but I'm wondering what to do about other devices. Is there a structure that we could embed the physid string into that would apply to PCI devices, busses, CPUs, and memory? Or should we just add the strings on a case-by-case basis?
The ia64 bits also need to be abstracted out...
Thanks,
Jesse
===== arch/ia64/mm/numa.c 1.7 vs edited =====
arch/ia64/mm/numa.c +8 -0
@@ -19,6 +19,8 @@#include <linux/bootmem.h> #include <asm/mmzone.h> #include <asm/numa.h> +#include <asm/sn/nodepda.h> +#include <asm/sn/module.h> static struct node *sysfs_nodes;static struct cpu *sysfs_cpus;
@@ -48,6 +50,12 @@break ;return (i < num_node_memblks) ? node_memblk[i].nid : (num_node_memblks ?-1 :0 ); +} + +void node_to_physid (int node,char *buf) +{ +struct nodepda_s *nodeinfo =NODEPDA (node); +format_module_id (buf, nodeinfo->module->id,MODULE_FORMAT_BRIEF ); }static int __init topology_init (void )
===== drivers/base/node.c 1.22 vs edited =====
drivers/base/node.c +13 -0
@@ -101,6 +101,17 @@ } static SYSDEV_ATTR(numastat, S_IRUGO, node_read_numastat, NULL); +static ssize_t node_read_physid (struct sys_device * dev,char * buf) +{ +struct node *node_dev =to_node (dev); +int len; + + len =snprintf (buf,NODE_MAX_PHYSID +1 ,"%s\n" , node_dev->physid); +return len; +} + +static SYSDEV_ATTR(physid,S_IRUGO,node_read_physid,NULL); +/* * register_node - Setup a driverfs device for a node. * @num - Node number to use when creating the device.
@@ -112,6 +123,7 @@int error; node->cpumap =node_to_cpumask (num); +node_to_physid (num, node->physid); node->sysdev.id = num; node->sysdev.cls = &node_class; error =sysdev_register (&node->sysdev);
@@ -120,6 +132,7 @@sysdev_create_file (&node->sysdev, &attr_cpumap);sysdev_create_file (&node->sysdev, &attr_meminfo);sysdev_create_file (&node->sysdev, &attr_numastat); +sysdev_create_file (&node->sysdev, &attr_physid); }return error; }
===== include/asm-ia64/topology.h 1.10 vs edited =====
include/asm-ia64/topology.h +2 -0
@@ -45,6 +45,8 @@void build_cpu_to_node_map (void ); +extern void node_to_physid (int node,char *buf); +#endif /* CONFIG_NUMA */ #include <asm-generic/topology.h>
===== include/asm-ia64/sn/module.h 1.15 vs edited =====
include/asm-ia64/sn/module.h +1 -0
@@ -8,6 +8,7 @@#ifndef _ASM_IA64_SN_MODULE_H#define _ASM_IA64_SN_MODULE_H +#include <asm/sn/sgi.h> #include <asm/sn/klconfig.h> #include <asm/sn/ksys/elsc.h>
===== include/linux/node.h 1.5 vs edited =====
include/linux/node.h +3 -0
@@ -22,8 +22,11 @@#include <linux/sysdev.h> #include <linux/cpumask.h> +#define NODE_MAX_PHYSID 80 +struct node {cpumask_t cpumap;/* Bitmap of CPUs on the Node */ +char physid[NODE_MAX_PHYSID ];/* Physical ID of node */ struct sys_device sysdev; };