[irqbalance/f16] Resolves: bz 748070

Neil Horman nhorman at fedoraproject.org
Tue Oct 25 12:40:59 UTC 2011


commit 3824e1f95f6eba69c63d7e43ea51f9e6c20e0ab3
Author: Neil Horman <nhorman at tuxdriver.com>
Date:   Tue Oct 25 08:40:42 2011 -0400

    Resolves: bz 748070

 irqbalance-bz748070-numa-pkg-assign.patch |   51 +++++++++++++++++++++++++++
 irqbalance-bz748070-numa-sysfs.patch      |   54 +++++++++++++++++++++++++++++
 irqbalance.spec                           |    9 ++++-
 3 files changed, 113 insertions(+), 1 deletions(-)
---
diff --git a/irqbalance-bz748070-numa-pkg-assign.patch b/irqbalance-bz748070-numa-pkg-assign.patch
new file mode 100644
index 0000000..f0f5d36
--- /dev/null
+++ b/irqbalance-bz748070-numa-pkg-assign.patch
@@ -0,0 +1,51 @@
+commit 1c4ad25a74b5b613b1d1972668bf41fc128420db
+Author: Neil Horman <nhorman at tuxdriver.com>
+Date:   Mon Oct 24 10:15:49 2011 -0400
+
+    Ensure that packages get valid numa node:
+    
+    On non-numa enabled systems, packages will get a NULL pointer to the
+    numa node, instead of the implied unspecified node structure.  This
+    resutls in a segfaul.  This should fix it.
+    
+    Signed-off-by: Neil Horman <nhorman at tuxdriver.com>
+
+diff --git a/cputree.c b/cputree.c
+index 31fefab..26a45db 100644
+--- a/cputree.c
++++ b/cputree.c
+@@ -228,7 +228,7 @@ static void do_one_cpu(char *path)
+ 		free(line);
+ 	}
+ 
+-	nodeid=0;
++	nodeid=-1;
+ 	dir = opendir(path);
+ 	do {
+ 		entry = readdir(dir);
+diff --git a/numa.c b/numa.c
+index 9cbbfc0..510fedc 100644
+--- a/numa.c
++++ b/numa.c
+@@ -127,19 +127,15 @@ static gint compare_node(gconstpointer a, gconstpointer b)
+ void add_package_to_node(struct topo_obj *p, int nodeid)
+ {
+ 	struct topo_obj find, *node;
+-	find.number = nodeid;
+-	GList *entry;
+ 
+-	find.number = nodeid;
+-	entry = g_list_find_custom(numa_nodes, &find, compare_node);
++	node = get_numa_node(nodeid);
+ 
+-	if (!entry) {
++	if (!node) {
+ 		if (debug_mode)
+ 			printf("Could not find numa node for node id %d\n", nodeid);
+ 		return;
+ 	}
+ 
+-	node = entry->data;
+ 
+ 	if (!p->parent) {
+ 		node->children = g_list_append(node->children, p);
diff --git a/irqbalance-bz748070-numa-sysfs.patch b/irqbalance-bz748070-numa-sysfs.patch
new file mode 100644
index 0000000..05a957e
--- /dev/null
+++ b/irqbalance-bz748070-numa-sysfs.patch
@@ -0,0 +1,54 @@
+commit effc540808e630d1fad423d653c43737e99cc1b6
+Author: Neil Horman <nhorman at tuxdriver.com>
+Date:   Thu Oct 20 10:56:48 2011 -0400
+
+    Fix oops on non-numa enabled systems
+    
+    Some systems aren't numa enabled, but still have devices that indicate they
+    belong to numa node 0 (rather than -1 as they should).  Thats a kernel problem
+    but we still shouldn't crash as a result (which we will when device get a NULL
+    numa_node pointer as a result of trying to find non-existant node 0).  This
+    patch fixes the crash by always returning the unspecified node pointer when numa
+    is disabled
+    
+    Signed-off-by: Neil Horman <nhorman at tuxdriver.com>
+
+diff --git a/classify.c b/classify.c
+index 6a20480..bb34f04 100644
+--- a/classify.c
++++ b/classify.c
+@@ -281,7 +281,7 @@ struct irq_info *add_misc_irq(int irq)
+ 	new->irq = irq;
+ 	new->type = IRQ_TYPE_LEGACY;
+ 	new->class = IRQ_OTHER;
+-	new->numa_node = get_numa_node(0);
++	new->numa_node = get_numa_node(-1);
+ 	interrupts_db = g_list_append(interrupts_db, new);
+ 	return new;
+ }
+diff --git a/irqbalance.h b/irqbalance.h
+index a1b1e8a..73a0864 100644
+--- a/irqbalance.h
++++ b/irqbalance.h
+@@ -49,6 +49,7 @@ extern GList *numa_nodes;
+ extern GList *packages;
+ extern GList *cache_domains;
+ extern GList *cpus;
++extern int numa_avail;
+ 
+ enum hp_e {
+ 	HINT_POLICY_IGNORE,
+diff --git a/numa.c b/numa.c
+index 0d93091..9cbbfc0 100644
+--- a/numa.c
++++ b/numa.c
+@@ -162,6 +162,9 @@ struct topo_obj *get_numa_node(int nodeid)
+ 	struct topo_obj find;
+ 	GList *entry;
+ 
++	if (!numa_avail)
++		return &unspecified_node;
++
+ 	if (nodeid == -1)
+ 		return &unspecified_node;
+ 
diff --git a/irqbalance.spec b/irqbalance.spec
index ec913e9..a93cc39 100644
--- a/irqbalance.spec
+++ b/irqbalance.spec
@@ -1,6 +1,6 @@
 Name:           irqbalance
 Version:        1.0
-Release:        2%{?dist}
+Release:        3%{?dist}
 Epoch:          2
 Summary:        IRQ balancing daemon
 
@@ -10,6 +10,8 @@ Url:            http://irqbalance.org/
 Source0:        http://irqbalance.googlecode.com/files/irqbalance-%{version}.tbz2
 Source1:        irqbalance.sysconfig
 Patch0:		irqbalance-bz746159-no-numa-nodes.patch
+Patch1:		irqbalance-bz748070-numa-sysfs.patch
+Patch2:		irqbalance-bz748070-numa-pkg-assign.patch
 
 BuildRequires:  autoconf automake libtool libcap-ng numactl-devel
 BuildRequires:  glib2-devel pkgconfig imake libcap-ng-devel
@@ -27,6 +29,8 @@ multiple CPUs for enhanced performance.
 %prep
 %setup -q -n irqbalance
 %patch0 -p1
+%patch1 -p1
+%patch2 -p1
 
 %build
 sh ./autogen.sh
@@ -76,6 +80,9 @@ fi
 /sbin/chkconfig --del irqbalance >/dev/null 2>&1 || :
 
 %changelog
+* Fri Oct 21 2011 Neil Horman <nhorman at redhat.com> - 2:1.0-3
+- Fix another crash on non-numa systems (bz 748070)
+
 * Mon Oct 17 2011 Neil Horman <nhorman at redhat.com> - 2:1.0-2
 - Fix crash for systems with no numa node support
 


More information about the scm-commits mailing list