[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