Skip to content

Commit

Permalink
iucv: prevent cpu hotplug when walking cpu_online_map.
Browse files Browse the repository at this point in the history
The code used preempt_disable() to prevent cpu hotplug, however that
doesn't protect for cpus being added. So use get_online_cpus() instead.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Ursula Braun <braunu@de.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Heiko Carstens authored and David S. Miller committed Jun 9, 2008
1 parent f1494ed commit 7b9d1b2
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions net/iucv/iucv.c
Original file line number Diff line number Diff line change
Expand Up @@ -474,14 +474,14 @@ static void iucv_setmask_mp(void)
{
int cpu;

preempt_disable();
get_online_cpus();
for_each_online_cpu(cpu)
/* Enable all cpus with a declared buffer. */
if (cpu_isset(cpu, iucv_buffer_cpumask) &&
!cpu_isset(cpu, iucv_irq_cpumask))
smp_call_function_single(cpu, iucv_allow_cpu,
NULL, 0, 1);
preempt_enable();
put_online_cpus();
}

/**
Expand Down Expand Up @@ -521,16 +521,17 @@ static int iucv_enable(void)
goto out;
/* Declare per cpu buffers. */
rc = -EIO;
preempt_disable();
get_online_cpus();
for_each_online_cpu(cpu)
smp_call_function_single(cpu, iucv_declare_cpu, NULL, 0, 1);
preempt_enable();
if (cpus_empty(iucv_buffer_cpumask))
/* No cpu could declare an iucv buffer. */
goto out_path;
put_online_cpus();
return 0;

out_path:
put_online_cpus();
kfree(iucv_path_table);
out:
return rc;
Expand All @@ -545,7 +546,9 @@ static int iucv_enable(void)
*/
static void iucv_disable(void)
{
get_online_cpus();
on_each_cpu(iucv_retrieve_cpu, NULL, 0, 1);
put_online_cpus();
kfree(iucv_path_table);
}

Expand Down

0 comments on commit 7b9d1b2

Please sign in to comment.