* Re: [PATCH mask 6/15] nonsmp-cpu-present-map
[not found] ` <20040506190021.A17643@unix-os.sc.intel.com>
@ 2004-05-08 11:10 ` Paul Jackson
2004-05-08 11:31 ` Paul Jackson
0 siblings, 1 reply; 3+ messages in thread
From: Paul Jackson @ 2004-05-08 11:10 UTC (permalink / raw)
To: Ashok Raj; +Cc: rusty, linux-kernel
Rusty - the last bit of my shenanigans in linux/cpumask.h are below.
I welcome your comment - especially since you were the last one in here.
I think it looks a little better with this patch, but that could be a
matter of taste.
Ashok - I've put lkml on the Cc list. If someone there finds issue
with this, better to see it sooner than later.
Ashok wrote:
> Not sure if this patch is necessary. especially all other maps are treated one way, and
> just for one function fixup we have a differrent treatment for this.
Good questions. What wasn't visible to you at the time you replied was
that I was experimenting with making all three maps (online, present and
possible) treated this 'new' way, removing the big ifdef CONFIG_SMP for
them from linux/cpumask.h, and defining all three of them in
kernel/sched.c in the case CONFIG_SMP is not defined.
This is not a very big change. It's the last step of my planned cpumask
cleanup. Whether you, Rusty or others will find it to be an improvement
or not I don't know.
> Also declaring just one map in sched.c seems like a hack, i moved it to cpu.c just
> to keep the functionality of cpu related masks in relevant files.
The other maps were already defined by my patch set, in the case CONFIG_SMP is
_not_ defined, in kernel/sched.c. Putting cpu_present_map there as well is
consistent with that change.
> Maybe we can use some gcc intrincics to check if this is a constant, and then handle it
> appropriately in the macro definition?
Interesting idea. I tried playing around with this avenue, but didn't come
up with any code that I preferred to what I ended up with, below. If you
would like to offer up some code - I'd be interested to see it.
> I would prefer to keep the decl in cpu.c and ifdef the usage under CONFIG_SMP rather than
> special casing the cpu_present_map alone vs other related cpu maps.
You're quite right that the special casing is not so good. With the
patch below, I went the other way - removing the big #ifdef CONFIG_SMP
from the other two as well.
> I will let Andrew and others decide how to handle it
Well - I suspect Andrew might not spend much of his time arbitrating this.
He usually has more serious stuff to work on. Best if we can agree.
===
Consider the following patch - it goes on top of the sequence that I published
May 6 under the Subject: [PATCH mask 0/15] bitmap and cpumask cleanup.
I have built it for i386 (SMP and not), sparc and ia64 (sn2_defconfig),
and I have booted it on sn2.
To be clear, my 'quilt' series file contains, after the patches for
2.6.6-rc3-mm2, the lines:
pj-fix-1-unifix.patch
pj-fix-2-ashoks-updated-cpuhotplug-6-7.patch
pj-fix-3-ashoks-updated-cpuhotplug-7-7.patch
pj-fix-4-include-mempolicy.patch
pj-fix-5-syscall-return-semicolon.patch
nonsmp-cpu-present-map.patch
mask1-bitmap-cleanup-prep
mask2-bitmap-extensions
mask3-unline-find-next-bit-ia64
mask4-new-cpumask-h
mask5-remove-old-cpumask-files
mask6-cpumask-i386-fixup
mask7-cpumask-etc-fixup
mask8-rm-old-cpumask-emul
mask9-post-cleanup-tweaks
mask10-nuke-nonsmp-cpumask-ifdef
Patch name: mask10-nuke-nonsmp-cpumask-ifdef
Index: 2.6.6-rc3-mm2-bitmapv5/include/linux/cpumask.h
===================================================================
--- 2.6.6-rc3-mm2-bitmapv5.orig/include/linux/cpumask.h 2004-05-07 23:57:03.000000000 -0700
+++ 2.6.6-rc3-mm2-bitmapv5/include/linux/cpumask.h 2004-05-08 01:11:27.000000000 -0700
@@ -266,22 +266,58 @@
return bitmap_parse(buf, len, srcp->bits, nbits);
}
+#if NR_CPUS > 1
+#define for_each_cpu_mask(cpu, mask) \
+ for (cpu = first_cpu(mask); \
+ cpu < NR_CPUS; \
+ cpu = next_cpu(cpu, (mask)))
+#else /* NR_CPUS == 1 */
+#define for_each_cpu_mask(cpu, mask) for (cpu = 0; cpu < 1; cpu++)
+#endif /* NR_CPUS */
+
/*
- * The following particular system cpumasks and operations
- * on them manage all (possible) and online cpus.
+ * The following particular system cpumasks and operations manage
+ * possible, present and online cpus.
+ *
+ * Subtleties:
+ * 1) UP arch's (NR_CPUS == 1, CONFIG_SMP not defined) hardcode
+ * assumption that their single CPU is online. There are no
+ * actual cpu_{online,possible,present}_maps on UP.
+ * 2) Most SMP arch's #define some of these maps to be some
+ * other map specific to that arch.
+ * 3) Due to (2), following must be #define macros, not inlines.
+ * To see why, examine assembly code produced by following,
+ * noting that set1() writes phys_x_map (good), but set2()
+ * writes x_map (bad):
+ * int x_map, phys_x_map;
+ * #define set1(a) x_map = a
+ * inline void set2(int a) { x_map = a; }
+ * #define x_map phys_x_map
+ * main(){ set1(3); set2(5); }
+ * 4) The cpu_{online,possible,present}_maps are available as
+ * as actual defined variables even on UP arch's, though
+ * due to (1), changing them will have no useful affect on
+ * the following num_*_cpus(), cpu_*() and cpu_set_*line()
+ * macros in the UP case.
*/
-extern cpumask_t cpu_online_map;
extern cpumask_t cpu_possible_map;
+extern cpumask_t cpu_online_map;
+extern cpumask_t cpu_present_map;
+
+/* Really only do call for SMP, short circuit UP */
+#define __SMP_ONLY__(x) (NR_CPUS == 1 ? 1 : (x))
-#ifdef CONFIG_SMP
+#define num_online_cpus() __SMP_ONLY__(cpus_weight(cpu_online_map))
+#define num_possible_cpus() __SMP_ONLY__(cpus_weight(cpu_possible_map))
+#define num_present_cpus() __SMP_ONLY__(cpus_weight(cpu_present_map))
+
+#define cpu_online(cpu) __SMP_ONLY__(cpu_isset((cpu), cpu_online_map))
+#define cpu_possible(cpu) __SMP_ONLY__(cpu_isset((cpu), cpu_possible_map))
+#define cpu_present(cpu) __SMP_ONLY__(cpu_isset((cpu), cpu_present_map))
-#define num_online_cpus() cpus_weight(cpu_online_map)
-#define num_possible_cpus() cpus_weight(cpu_possible_map)
-#define cpu_online(cpu) cpu_isset((cpu), cpu_online_map)
-#define cpu_possible(cpu) cpu_isset((cpu), cpu_possible_map)
-#define cpu_set_online(cpu) cpu_set((cpu), cpu_online_map)
-#define cpu_set_offline(cpu) cpu_clear((cpu), cpu_online_map)
+#define cpu_set_online(cpu) __SMP_ONLY__(cpu_set((cpu), cpu_online_map))
+#define cpu_set_offline(cpu) __SMP_ONLY__(cpu_clear((cpu), cpu_online_map))
#define any_online_cpu(mask) \
({ \
@@ -290,34 +326,8 @@
first_cpu(m); \
})
-#define for_each_cpu_mask(cpu, mask) \
- for (cpu = first_cpu(mask); \
- cpu < NR_CPUS; \
- cpu = next_cpu(cpu, mask))
-
-#else /* !CONFIG_SMP */
-
-#define num_online_cpus() 1
-#define num_possible_cpus() 1
-#define cpu_online(cpu) ({ BUG_ON((cpu) != 0); 1; })
-#define cpu_possible(cpu) ({ BUG_ON((cpu) != 0); 1; })
-#define cpu_set_online(cpu) ({ BUG_ON((cpu) != 0); })
-#define cpu_set_offline(cpu) ({ BUG(); })
-
-#define any_online_cpu(mask) 0
-
-#define for_each_cpu_mask(cpu, mask) for (cpu = 0; cpu < 1; cpu++)
-
-#endif /* CONFIG_SMP */
-
-#define for_each_cpu(cpu) \
- for_each_cpu_mask(cpu, cpu_possible_map)
-#define for_each_online_cpu(cpu) \
- for_each_cpu_mask(cpu, cpu_online_map)
-
-extern cpumask_t cpu_present_map;
-#define num_present_cpus() cpus_weight(cpu_present_map)
-#define cpu_present(cpu) cpu_isset(cpu, cpu_present_map)
-#define for_each_present_cpu(cpu) for_each_cpu_mask(cpu, cpu_present_map)
+#define for_each_cpu(cpu) for_each_cpu_mask((cpu), cpu_possible_map)
+#define for_each_online_cpu(cpu) for_each_cpu_mask((cpu), cpu_online_map)
+#define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map)
#endif /* __LINUX_CPUMASK_H */
Index: 2.6.6-rc3-mm2-bitmapv5/kernel/sched.c
===================================================================
--- 2.6.6-rc3-mm2-bitmapv5.orig/kernel/sched.c 2004-05-07 23:57:03.000000000 -0700
+++ 2.6.6-rc3-mm2-bitmapv5/kernel/sched.c 2004-05-08 00:18:01.000000000 -0700
@@ -3052,16 +3052,6 @@
return retval;
}
-/*
- * Represents all cpu's present in the system
- * In systems capable of hotplug, this map could dynamically grow
- * as new cpu's are detected in the system via any platform specific
- * method, such as ACPI for e.g.
- */
-
-cpumask_t cpu_present_map;
-EXPORT_SYMBOL(cpu_present_map);
-
/**
* sys_sched_setaffinity - set the cpu affinity of a process
* @pid: pid of the process
@@ -3112,9 +3102,21 @@
return retval;
}
+/*
+ * Represents all cpu's present in the system
+ * In systems capable of hotplug, this map could dynamically grow
+ * as new cpu's are detected in the system via any platform specific
+ * method, such as ACPI for e.g.
+ */
+
+cpumask_t cpu_present_map;
+EXPORT_SYMBOL(cpu_present_map);
+
#ifndef CONFIG_SMP
cpumask_t cpu_online_map = CPU_MASK_ALL;
+EXPORT_SYMBOL(cpu_online_map);
cpumask_t cpu_possible_map = CPU_MASK_ALL;
+EXPORT_SYMBOL(cpu_possible_map);
#endif
/**
--
I won't rest till it's the best ...
Programmer, Linux Scalability
Paul Jackson <pj@sgi.com> 1.650.933.1373
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH mask 0/15] bitmap and cpumask cleanup
@ 2004-05-06 18:18 Paul Jackson
2004-05-06 18:48 ` [PATCH mask 6/15] nonsmp-cpu-present-map Paul Jackson
0 siblings, 1 reply; 3+ messages in thread
From: Paul Jackson @ 2004-05-06 18:18 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-kernel, Matthew Dobson, William Lee Irwin III,
Rusty Russell, Joe Korty, Jesse Barnes
Paul Jackson
pj@sgi.com
6 May 2004
Bitmap and Cpumask Cleanup
Andrew,
Please consider the following patch set for your *-mm patches.
It removes some 27 kernel source files, simplifies cpumasks,
and in the colorful language of Rusty, it gets rid of such
headers as:
asm-generic/cpumask_optimized_for_large_smp_with_sparse_array_and_small_stack.h
It also forms the basis for a nodemask_t patch, that is
awaiting in the wings, from Matthew Dobson.
Each patch is described below, in "Patch Details."
===
This is the fifth version of my cleanup of bitmaps and cpumasks.
This set of nine patches applies against 2.6.6-rc3-mm2 plus six
optional fixup patches, also included.
The actual patches will be posted in another hour or two, as
followups to this initial post.
Primay goals:
The primary goal of this patch set is to simplify the code for
cpumask_t and (later) nodemask_t, make them easier to use, and
reduce code duplication.
Several flavors of cpumask have been reduced to one, with some
local special handling to optimize for that vast majority of
systems which have less than 32 (or 64) CPUs.
The bitmap operations upon which cpumasks depend have been
optimized a bit more, with a more careful mix of inline and
outofline code.
By simplifying masks to a single file, it should also be
easier to add other such mask types, such as the nodemask
that Matthew Dobson has waiting in the wings, just by
copying cpumask.h and making a few global edits.
There is no significant difference between this fifth version
and the fourth version of April 21, 2004. The basis for the
patch has been moved forward to 2.6.6-rc3-mm2. And a few
of the more trivial patches in the set have been collapsed,
reducing the patchset to 9 patches.
What's new (comparing 2.6.6-rc3-mm2 to this patch set):
1) Some 27 files matching the pattern include/*/*mask*.h
are replaced with the single file include/linux/cpumask.h
The variety of arch-specific redirect headers for various
cpumask implementation flavors is gone.
2) The bitmap operations (bitmap.h, bitmap.c) are optimized
for systems of less than 32 (or 64) CPUs.
3) The cpumask operations are now just a thin layer on top
of the bitmask and a few other operations. A cpumask is a
bitmask of exactly NR_CPUS bits, wrapped in a structure.
4) bitmap_complement and cpumask_complement now take two args,
source and target, instead of working in place.
5) Some uses of these macros elsewhere in the kernel were fine
tuned.
6) On ia64, find_first_bit and find_first_zero_bit are
uninlined - saving quite a bit of kernel text space.
The architectures: alpha, parisc, ppc, sh, sparc, sparc64
have this same bit find code, and might also want to uninline.
7) Comments in bitmap.h and cpumask.h list available ops for ease
of browsing.
8) The MASK_ALL macro zeros out unused bits on multiword bitmaps.
9) This patch includes Bill Irwin's recent rewrite of the
bitmap_shift operators to avoid assuming some fixed upper
bound on bitmap sizes.
10) A few more mask macros have been added, to make it easier to
code mask manipulations correctly and easily. They provide
xor, andnot, intersects and subset operators.
Bug fixes:
1) *_complement macros don't leave unused high bits set
2) MASK_ALL for sizes > 1 word, but not exact word multiple,
doesn't have unused high bits set
3) Explicit, documented semantics for handling these unused high bits.
4) A few missing const attributes in bitmap & bitops added.
5) The (Hamming) cpumask weight macros were using the bitops hweight*()
macros, which don't mask high unused bits - fixed to use the bitmap
weight macro which does this masking.
Do to the rather limited use so far of cpumask macros, I am
not aware of anything that these bugs would actually break in
current mm or linus kernels.
Testing so far:
Kernels have been built for i386 (SMP and not), sparc64 and
ia64 (sn2_defconfig), and booted and minimally tested on SN2.
Kernel text size has been compared and found to typically
get a little smaller. Correct function of bit operations
has been tested for a variety of NR_CPUS values in a user
level framework, using gcc compiler versions 2.95.3, 3.2.3 and
3.3.2. Joe Korty has built and booted on Opteron.
Reviews and feedback:
This code has been sent to the arch maintainers, and has been
reviewed in some form or other by several, including:
- William Lee Irwin III <wli@holomorphy.com>
- Jesse Barnes <jbarnes@sgi.com>
- Joe Korty <joe.korty@ccur.com>
- Matthew Dobson <colpatch@us.ibm.com>
- Rusty Russell <rusty@rustcorp.com.au>
So far as I know, no outstanding issues remain open.
================ Patch Details ================
Here's what each patch does. First are 5 fixup patches
and one minor rework of the cpu_present_map fixup.
pj-fix-1-unifix
pj-fix-2-ashoks-updated-cpuhotplug-6-7
pj-fix-3-ashoks-updated-cpuhotplug-7-7
pj-fix-4-include-mempolicy
pj-fix-5-syscall-return-semicolon
Patches pj-fix-* should match fixes that you (Andrew)
have already picked up. You should ignore these
if what you already have is just as good. They are
here so that I can be precise as to what source I
am using for the basis of the following patches.
nonsmp-cpu-present-map
You (Andrew) worked around a non-SMP build problem
in Ashok's cpuhotplog patches in init/main.c routine
fixup_cpu_present_map().
==> Instead of whatever you did (an ifdef or whatever),
==> Andrew, please take this patch instead.
This patch makes cpu_present_map a real map for all
configurations, instead of a constant for non-SMP.
It also moves the definition of cpu_present_map out of
kernel/cpu.c into kernel/sched.c, because cpu.c isn't
compiled into non-SMP kernels.
==============================================================
The nine main bitmap and cpumask cleanup patches follow.
==============================================================
mask1-bitmap-cleanup-prep
Document the bitmap bit model and handling of unused bits.
Tighten up bitmap so it does not generate nonzero bits
in the unused tail if it is not given any on input.
Add intersects, subset, xor and andnot operators.
Change bitmap_complement to take two operands.
Add a couple of missing 'const' qualifiers on
bitops test_bit and bitmap_equal args.
mask2-bitmap-extensions
This bitmap improvements make it a suitable basis for
fully supporting cpumask_t and nodemask_t. Inline macros
with compile-time checks enable generating tight code on
both small and large systems (large meaning cpumask_t
requires more than one unsigned long's worth of bits).
The existing bitmap_<op> macros in lib/bitmap.c
are renamed to __bitmap_<op>, and wrappers for each
bitmap_<op> are exposed in include/linux/bitmap.h
This patch _includes_ Bill Irwins recent rewrite of the
bitmap_shift operators to not require a fixed length
intermediate bitmap.
Improved comments list each available operator for easy
browsing.
mask3-unline-find-next-bit-ia64
Move the page of code (~700 bytes of instructions)
for find_next_bit and find_next_zero_bit from inline
in include/asm-ia64/bitops.h to a real function in
arch/ia64/lib/bitops.c, leaving a declaration and
macro wrapper behind.
The other arch's with almost this same code might want to
also uninline it: alpha, parisc, ppc, sh, sparc, sparc64.
These are too big to inline.
mask4-new-cpumask-h
Major rewrite of cpumask to use a single implementation,
as a struct-wrapped bitmap.
This patch leaves some 26 include/asm-*/cpumask*.h
header files orphaned - to be removed next patch.
Some nine cpumask macros for const variants and to
coerce and promote between an unsigned long and a
cpumask are obsolete. Simple emulation wrappers are
provided in this patch, which can be removed once each
of the 3 archs (i386, ppc64, x86_64) using them are
recoded in follow-on patches to not need them.
The CPU_MASK_ALL macro now avoids leaving possible
garbage one bits in any unused portion of the high word.
An inproved comment lists all available operators, for
convenient browsing.
mask5-remove-old-cpumask-files
With the cpumask rewrite in the previous patch, these
various include/asm-*/cpumask*.h headers are no longer used.
mask6-cpumask-i386-fixup
Remove by recoding i386 uses of the obsolete cpumask const,
coerce and promote macros.
mask7-cpumask-etc-fixup
Remove by recoding other uses of the obsolete cpumask const,
coerce and promote macros.
mask8-rm-old-cpumask-emul
Now that the emulation of the obsolete cpumask macros is no
longer needed, remove it from cpumask.h
mask9-post-cleanup-tweaks
Make use of for_each_cpu_mask() macro to simplify and optimize
a couple of sparc64 per-CPU loops.
Optimize a bit of cpumask code for asm-i386/mach-es7000
Convert physids_complement() to use both args
Remove cpumask hack from asm-x86_64/topology.h routine
pcibus_to_cpumask().
Clarify and slightly optimize set_cpus_allowed() cpumask check
in kernel/sched.c
--
I won't rest till it's the best ...
Programmer, Linux Scalability
Paul Jackson <pj@sgi.com> 1.650.933.1373
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH mask 6/15] nonsmp-cpu-present-map
2004-05-06 18:18 [PATCH mask 0/15] bitmap and cpumask cleanup Paul Jackson
@ 2004-05-06 18:48 ` Paul Jackson
0 siblings, 0 replies; 3+ messages in thread
From: Paul Jackson @ 2004-05-06 18:48 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-kernel, Matthew Dobson, William Lee Irwin III,
Rusty Russell, Joe Korty, Jesse Barnes
Fix build breakage if CONFIG_SMP disabled, in Ashok's cpuhotplog
patches in init/main.c routine fixup_cpu_present_map().
Make cpu_present_map a real map for all configurations,
instead of a constant for non-SMP. Also move the definition
of cpu_present_map out of kernel/cpu.c into kernel/sched.c,
because cpu.c isn't compiled into non-SMP kernels.
============= include/linux/cpumask.h =============
--- 2.6.6-rc3-mm2-old/include/linux/cpumask.h 2004-05-06 04:22:43.000000000 -0700
+++ 2.6.6-rc3-mm2/include/linux/cpumask.h 2004-05-06 03:30:32.000000000 -0700
@@ -10,15 +10,12 @@
extern cpumask_t cpu_online_map;
extern cpumask_t cpu_possible_map;
-extern cpumask_t cpu_present_map;
#define num_online_cpus() cpus_weight(cpu_online_map)
#define num_possible_cpus() cpus_weight(cpu_possible_map)
-#define num_present_cpus() cpus_weight(cpu_present_map)
#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
#define cpu_possible(cpu) cpu_isset(cpu, cpu_possible_map)
-#define cpu_present(cpu) cpu_isset(cpu, cpu_present_map)
#define for_each_cpu_mask(cpu, mask) \
for (cpu = first_cpu_const(mk_cpumask_const(mask)); \
@@ -27,25 +24,25 @@ extern cpumask_t cpu_present_map;
#define for_each_cpu(cpu) for_each_cpu_mask(cpu, cpu_possible_map)
#define for_each_online_cpu(cpu) for_each_cpu_mask(cpu, cpu_online_map)
-#define for_each_present_cpu(cpu) for_each_cpu_mask(cpu, cpu_present_map)
#else
#define cpu_online_map cpumask_of_cpu(0)
#define cpu_possible_map cpumask_of_cpu(0)
-#define cpu_present_map cpumask_of_cpu(0)
#define num_online_cpus() 1
#define num_possible_cpus() 1
-#define num_present_cpus() 1
#define cpu_online(cpu) ({ BUG_ON((cpu) != 0); 1; })
#define cpu_possible(cpu) ({ BUG_ON((cpu) != 0); 1; })
-#define cpu_present(cpu) ({ BUG_ON((cpu) != 0); 1; })
#define for_each_cpu(cpu) for (cpu = 0; cpu < 1; cpu++)
#define for_each_online_cpu(cpu) for (cpu = 0; cpu < 1; cpu++)
-#define for_each_present_cpu(cpu) for (cpu = 0; cpu < 1; cpu++)
#endif
+extern cpumask_t cpu_present_map;
+#define num_present_cpus() cpus_weight(cpu_present_map)
+#define cpu_present(cpu) cpu_isset(cpu, cpu_present_map)
+#define for_each_present_cpu(cpu) for_each_cpu_mask(cpu, cpu_present_map)
+
#define cpumask_scnprintf(buf, buflen, map) \
bitmap_scnprintf(buf, buflen, cpus_addr(map), NR_CPUS)
============= kernel/cpu.c =============
--- 2.6.6-rc3-mm2-old/kernel/cpu.c 2004-05-06 04:22:43.000000000 -0700
+++ 2.6.6-rc3-mm2/kernel/cpu.c 2004-05-06 01:07:27.000000000 -0700
@@ -20,14 +20,6 @@
DECLARE_MUTEX(cpucontrol);
static struct notifier_block *cpu_chain;
-/*
- * Represents all cpu's present in the system
- * In systems capable of hotplug, this map could dynamically grow
- * as new cpu's are detected in the system via any platform specific
- * method, such as ACPI for e.g.
- */
-cpumask_t cpu_present_map;
-EXPORT_SYMBOL(cpu_present_map);
/* Need to know about CPUs going up/down? */
int register_cpu_notifier(struct notifier_block *nb)
============= kernel/sched.c =============
--- 2.6.6-rc3-mm2-old/kernel/sched.c 2004-05-06 04:22:43.000000000 -0700
+++ 2.6.6-rc3-mm2/kernel/sched.c 2004-05-06 03:30:35.000000000 -0700
@@ -3052,6 +3052,16 @@ out_unlock:
return retval;
}
+/*
+ * Represents all cpu's present in the system
+ * In systems capable of hotplug, this map could dynamically grow
+ * as new cpu's are detected in the system via any platform specific
+ * method, such as ACPI for e.g.
+ */
+
+cpumask_t cpu_present_map;
+EXPORT_SYMBOL(cpu_present_map);
+
/**
* sys_sched_setaffinity - set the cpu affinity of a process
* @pid: pid of the process
--
I won't rest till it's the best ...
Programmer, Linux Scalability
Paul Jackson <pj@sgi.com> 1.650.933.1373
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2004-05-08 11:31 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <936AF5883B4DD84F83C40185A810315001540E16@orsmsx404.jf.intel.com>
[not found] ` <20040506190021.A17643@unix-os.sc.intel.com>
2004-05-08 11:10 ` [PATCH mask 6/15] nonsmp-cpu-present-map Paul Jackson
2004-05-08 11:31 ` Paul Jackson
2004-05-06 18:18 [PATCH mask 0/15] bitmap and cpumask cleanup Paul Jackson
2004-05-06 18:48 ` [PATCH mask 6/15] nonsmp-cpu-present-map Paul Jackson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox