From: Matthew Dobson <colpatch@us.ibm.com>
To: "Martin J. Bligh" <mbligh@aracnet.com>,
Dave Hansen <haveblue@us.ibm.com>,
Bill Hartner <bhartner@us.ibm.com>,
Andrew Theurer <habanero@us.ibm.com>,
Andrew Morton <akpm@zip.com.au>, Robert Love <rml@tech9.net>
Cc: linux-kernel@vger.kernel.org
Subject: [patch] Re: Bug 619 - sched_best_cpu does not pick best cpu (2/2)
Date: Mon, 05 May 2003 18:28:34 -0700 [thread overview]
Message-ID: <3EB70FC2.1010903@us.ibm.com> (raw)
In-Reply-To: 3EB70EEC.9040004@us.ibm.com
[-- Attachment #1: Type: text/plain, Size: 756 bytes --]
This patch is in regard to bugme.osdl.org bug 619, link here:
http://bugme.osdl.org/show_bug.cgi?id=619
This is the second of two patches to fix this bug. This patch fills in
include/linux/topology.h (created in the last patch) with a couple
#defines. The patch also creates a generic_hweight64() in
include/linux/bitops.h, which we've been lacking for a while. It then
uses these new macros in sched.c to ensure that if a node has no CPUs,
it is not used in scheduling decisions.
[mcd@arrakis src]$ diffstat ~/patches/node_online.patch
include/linux/bitops.h | 27 +++++++++++++++++++++++++++
include/linux/topology.h | 7 +++++++
kernel/sched.c | 2 +-
3 files changed, 35 insertions(+), 1 deletion(-)
Cheers!
-Matt
[-- Attachment #2: node_online.patch --]
[-- Type: text/plain, Size: 2486 bytes --]
diff -Nur --exclude-from=/home/mcd/.dontdiff linux-2.5.69-add_linux_topo/include/linux/bitops.h linux-2.5.69-node_online_fix/include/linux/bitops.h
--- linux-2.5.69-add_linux_topo/include/linux/bitops.h Sun May 4 16:53:42 2003
+++ linux-2.5.69-node_online_fix/include/linux/bitops.h Mon May 5 18:00:00 2003
@@ -107,6 +107,33 @@
return (res & 0x0F) + ((res >> 4) & 0x0F);
}
+#if (BITS_PER_LONG == 64)
+
+static inline unsigned int generic_hweight64(unsigned int w)
+{
+ unsigned int res = (w & 0x5555555555555555) + ((w >> 1) & 0x5555555555555555);
+ res = (res & 0x3333333333333333) + ((res >> 2) & 0x3333333333333333);
+ res = (res & 0x0F0F0F0F0F0F0F0F) + ((res >> 4) & 0x0F0F0F0F0F0F0F0F);
+ res = (res & 0x00FF00FF00FF00FF) + ((res >> 8) & 0x00FF00FF00FF00FF);
+ res = (res & 0x0000FFFF0000FFFF) + ((res >> 16) & 0x0000FFFF0000FFFF);
+ return (res & 0x00000000FFFFFFFF) + ((res >> 32) & 0x00000000FFFFFFFF);
+}
+
+#define hweight_long(w) generic_hweight64(w)
+
+#endif /* BITS_PER_LONG == 64 */
+
+#if (BITS_PER_LONG == 32)
+
+static inline unsigned int generic_hweight64(unsigned int *w)
+{
+ return generic_hweight32(w[0]) + generic_hweight32(w[1]);
+}
+
+#define hweight_long(w) generic_hweight32(w)
+
+#endif /* BITS_PER_LONG == 32 */
+
#include <asm/bitops.h>
diff -Nur --exclude-from=/home/mcd/.dontdiff linux-2.5.69-add_linux_topo/include/linux/topology.h linux-2.5.69-node_online_fix/include/linux/topology.h
--- linux-2.5.69-add_linux_topo/include/linux/topology.h Mon May 5 17:43:35 2003
+++ linux-2.5.69-node_online_fix/include/linux/topology.h Mon May 5 18:10:29 2003
@@ -27,6 +27,13 @@
#ifndef _LINUX_TOPOLOGY_H
#define _LINUX_TOPOLOGY_H
+#include <linux/bitops.h>
#include <asm/topology.h>
+#define nr_cpus_node(node) (hweight_long(node_to_cpumask(node)))
+
+#define for_each_node_with_cpus(node) \
+ for (node = 0; node < numnodes; node++) \
+ if (nr_cpus_node(node)
+
#endif /* _LINUX_TOPOLOGY_H */
diff -Nur --exclude-from=/home/mcd/.dontdiff linux-2.5.69-add_linux_topo/kernel/sched.c linux-2.5.69-node_online_fix/kernel/sched.c
--- linux-2.5.69-add_linux_topo/kernel/sched.c Sun May 4 16:53:37 2003
+++ linux-2.5.69-node_online_fix/kernel/sched.c Mon May 5 18:10:58 2003
@@ -802,7 +802,7 @@
return best_cpu;
minload = 10000000;
- for (i = 0; i < numnodes; i++) {
+ for_each_node_with_cpus(i) {
load = atomic_read(&node_nr_running[i]);
if (load < minload) {
minload = load;
next prev parent reply other threads:[~2003-05-06 1:21 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-05-06 1:25 [patch] Re: Bug 619 - sched_best_cpu does not pick best cpu (1/2) Matthew Dobson
2003-05-06 1:28 ` Matthew Dobson [this message]
2003-05-06 2:09 ` [patch] Re: Bug 619 - sched_best_cpu does not pick best cpu (2/2) David S. Miller
2003-05-06 11:06 ` Gabriel Paubert
2003-05-15 1:29 ` [patch] Re: Bug 619 - sched_best_cpu does not pick best cpu (1/1) Andrew Theurer
2003-05-15 1:26 ` Zwane Mwaikambo
2003-05-15 1:48 ` Andrew Theurer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3EB70FC2.1010903@us.ibm.com \
--to=colpatch@us.ibm.com \
--cc=akpm@zip.com.au \
--cc=bhartner@us.ibm.com \
--cc=habanero@us.ibm.com \
--cc=haveblue@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mbligh@aracnet.com \
--cc=rml@tech9.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox