summaryrefslogtreecommitdiffstats
path: root/init/do_mounts_md.c
diff options
context:
space:
mode:
authorNathan Lynch <ntl@pobox.com>2006-01-08 01:05:12 -0800
committerLinus Torvalds <torvalds@g5.osdl.org>2006-01-08 20:14:08 -0800
commitf756d5e256059018d753f0ba79980ebeb87a1bc0 (patch)
treee96ae0117aaf6dea19dad88079c3229f679c1948 /init/do_mounts_md.c
parent945f390f02ce44a13aefc6d9449c99f33c9286a5 (diff)
downloadop-kernel-dev-f756d5e256059018d753f0ba79980ebeb87a1bc0.zip
op-kernel-dev-f756d5e256059018d753f0ba79980ebeb87a1bc0.tar.gz
[PATCH] fix workqueue oops during cpu offline
Use first_cpu(cpu_possible_map) for the single-thread workqueue case. We used to hardcode 0, but that broke on systems where !cpu_possible(0) when workqueue_struct->cpu_workqueue_struct was changed from a static array to alloc_percpu. Commit id bce61dd49d6ba7799be2de17c772e4c701558f14 ("Fix hardcoded cpu=0 in workqueue for per_cpu_ptr() calls") fixed that for Ben's funky sparc64 system, but it regressed my Power5. Offlining cpu 0 oopses upon the next call to queue_work for a single-thread workqueue, because now we try to manipulate per_cpu_ptr(wq->cpu_wq, 1), which is uninitialized. So we need to establish an unchanging "slot" for single-thread workqueues which will have a valid percpu allocation. Since alloc_percpu keys off of cpu_possible_map, which must not change after initialization, make this slot == first_cpu(cpu_possible_map). Signed-off-by: Nathan Lynch <ntl@pobox.com> Cc: <stable@kernel.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'init/do_mounts_md.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud