Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 88a2a4ac authored by Eric Dumazet's avatar Eric Dumazet Committed by Linus Torvalds
Browse files

[PATCH] percpu data: only iterate over possible CPUs



percpu_data blindly allocates bootmem memory to store NR_CPUS instances of
cpudata, instead of allocating memory only for possible cpus.

As a preparation for changing that, we need to convert various 0 -> NR_CPUS
loops to use for_each_cpu().

(The above only applies to users of asm-generic/percpu.h.  powerpc has gone it
alone and is presently only allocating memory for present CPUs, so it's
currently corrupting memory).

Signed-off-by: default avatarEric Dumazet <dada1@cosmosbay.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: James Bottomley <James.Bottomley@steeleye.com>
Acked-by: default avatarIngo Molnar <mingo@elte.hu>
Cc: Jens Axboe <axboe@suse.de>
Cc: Anton Blanchard <anton@samba.org>
Acked-by: default avatarWilliam Irwin <wli@holomorphy.com>
Cc: Andi Kleen <ak@muc.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent cef50769
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -138,7 +138,7 @@ static int __init check_nmi_watchdog(void)
	if (nmi_watchdog == NMI_LOCAL_APIC)
		smp_call_function(nmi_cpu_busy, (void *)&endflag, 0, 0);

	for (cpu = 0; cpu < NR_CPUS; cpu++)
	for_each_cpu(cpu)
		prev_nmi_count[cpu] = per_cpu(irq_stat, cpu).__nmi_count;
	local_irq_enable();
	mdelay((10*1000)/nmi_hz); // wait 10 ticks
+1 −1
Original line number Diff line number Diff line
@@ -3453,7 +3453,7 @@ int __init blk_dev_init(void)
	iocontext_cachep = kmem_cache_create("blkdev_ioc",
			sizeof(struct io_context), 0, SLAB_PANIC, NULL, NULL);

	for (i = 0; i < NR_CPUS; i++)
	for_each_cpu(i)
		INIT_LIST_HEAD(&per_cpu(blk_cpu_done, i));

	open_softirq(BLOCK_SOFTIRQ, blk_done_softirq, NULL);
+1 −1
Original line number Diff line number Diff line
@@ -1245,7 +1245,7 @@ static int __init init_scsi(void)
	if (error)
		goto cleanup_sysctl;

	for (i = 0; i < NR_CPUS; i++)
	for_each_cpu(i)
		INIT_LIST_HEAD(&per_cpu(scsi_done_q, i));

	devfs_mk_dir("scsi");
+1 −2
Original line number Diff line number Diff line
@@ -379,7 +379,6 @@ static void __devinit fdtable_defer_list_init(int cpu)
void __init files_defer_init(void)
{
	int i;
	/* Really early - can't use for_each_cpu */
	for (i = 0; i < NR_CPUS; i++)
	for_each_cpu(i)
		fdtable_defer_list_init(i);
}
+1 −1
Original line number Diff line number Diff line
@@ -6109,7 +6109,7 @@ void __init sched_init(void)
	runqueue_t *rq;
	int i, j, k;

	for (i = 0; i < NR_CPUS; i++) {
	for_each_cpu(i) {
		prio_array_t *array;

		rq = cpu_rq(i);
Loading