iucv: fix kernel panic at reboot
authorHendrik Brueckner <brueckner@linux.vnet.ibm.com>
Wed, 6 Feb 2013 15:12:03 +0000 (16:12 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 14 Feb 2013 14:55:19 +0000 (15:55 +0100)
The iucv base layer is initialized during the registration of the
first iucv handler.  If no handler is registered and the
iucv_reboot_event() notifier is called, a missing check can cause
a kernel panic in iucv_block_cpu().  To solve this issue, check the
IRQ masks invoke iucv_block_cpu() for enabled CPUs only.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
net/iucv/iucv.c

index df082508362d892e623a80b57c732504e0b78581..4fe76ff214c2aab08d703a0114ec0a86cbef6ca3 100644 (file)
@@ -831,8 +831,11 @@ static int iucv_reboot_event(struct notifier_block *this,
 {
        int i;
 
+       if (cpumask_empty(&iucv_irq_cpumask))
+               return NOTIFY_DONE;
+
        get_online_cpus();
-       on_each_cpu(iucv_block_cpu, NULL, 1);
+       on_each_cpu_mask(&iucv_irq_cpumask, iucv_block_cpu, NULL, 1);
        preempt_disable();
        for (i = 0; i < iucv_max_pathid; i++) {
                if (iucv_path_table[i])