mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2026-01-28 05:53:14 +00:00
I've already sent this to the maintainers, and this is now being sent to a larger community audience. I have fixed a problem with the ia64 version of build_sched_domains(), but a similar fix still needs to be made to the generic build_sched_domains() in kernel/sched.c. The "dynamic sched domains" functionality has recently been merged into 2.6.13-rcN that sees the dynamic declaration of a cpu-exclusive (a.k.a. "isolated") cpuset and rebuilds the CPU Scheduler sched domains and sched groups to separate away the CPUs in this cpu-exclusive cpuset from the remainder of the non-isolated CPUs. This allows the non-isolated CPUs to completely ignore the isolated CPUs when doing load-balancing. Unfortunately, build_sched_domains() expects that a sched domain will include all the CPUs of each node in the domain, i.e., that no node will belong in both an isolated cpuset and a non-isolated cpuset. Declaring a cpuset that violates this presumption will produce flawed data structures and will oops the kernel. To trigger the problem (on a NUMA system with >1 CPUs per node): cd /dev/cpuset mkdir newcpuset cd newcpuset echo 0 >cpus echo 0 >mems echo 1 >cpu_exclusive I have fixed this shortcoming for ia64 NUMA (with multiple CPUs per node). A similar shortcoming exists in the generic build_sched_domains() (in kernel/sched.c) for NUMA, and that needs to be fixed also. The fix involves dynamically allocating sched_group_nodes[] and sched_group_allnodes[] for each invocation of build_sched_domains(), rather than using global arrays for these structures. Care must be taken to remember kmalloc() addresses so that arch_destroy_sched_domains() can properly kfree() the new dynamic structures. Signed-off-by: John Hawkes <hawkes@sgi.com> Cc: Nick Piggin <nickpiggin@yahoo.com.au> Cc: Ingo Molnar <mingo@elte.hu> Cc: "Luck, Tony" <tony.luck@intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org> |
||
|---|---|---|
| .. | ||
| cpufreq | ||
| acpi-ext.c | ||
| acpi.c | ||
| asm-offsets.c | ||
| brl_emu.c | ||
| cyclone.c | ||
| domain.c | ||
| efi_stub.S | ||
| efi.c | ||
| entry.h | ||
| entry.S | ||
| fsys.S | ||
| gate-data.S | ||
| gate.lds.S | ||
| gate.S | ||
| head.S | ||
| ia64_ksyms.c | ||
| init_task.c | ||
| iosapic.c | ||
| irq_ia64.c | ||
| irq_lsapic.c | ||
| irq.c | ||
| ivt.S | ||
| jprobes.S | ||
| kprobes.c | ||
| machvec.c | ||
| Makefile | ||
| mca_asm.S | ||
| mca_drv_asm.S | ||
| mca_drv.c | ||
| mca_drv.h | ||
| mca.c | ||
| minstate.h | ||
| module.c | ||
| numa.c | ||
| pal.S | ||
| palinfo.c | ||
| patch.c | ||
| perfmon_default_smpl.c | ||
| perfmon_generic.h | ||
| perfmon_itanium.h | ||
| perfmon_mckinley.h | ||
| perfmon.c | ||
| process.c | ||
| ptrace.c | ||
| sal.c | ||
| salinfo.c | ||
| semaphore.c | ||
| setup.c | ||
| sigframe.h | ||
| signal.c | ||
| smp.c | ||
| smpboot.c | ||
| sys_ia64.c | ||
| time.c | ||
| topology.c | ||
| traps.c | ||
| unaligned.c | ||
| uncached.c | ||
| unwind_decoder.c | ||
| unwind_i.h | ||
| unwind.c | ||
| vmlinux.lds.S | ||