out_reboot:
        unregister_reboot_notifier(&iucv_reboot_notifier);
  out_cpu:
 -      unregister_hotcpu_notifier(&iucv_cpu_notifier);
 +      cpu_notifier_register_begin();
 +      __unregister_hotcpu_notifier(&iucv_cpu_notifier);
  out_free:
 -      for_each_possible_cpu(cpu) {
 -              kfree(iucv_param_irq[cpu]);
 -              iucv_param_irq[cpu] = NULL;
 -              kfree(iucv_param[cpu]);
 -              iucv_param[cpu] = NULL;
 -              kfree(iucv_irq_data[cpu]);
 -              iucv_irq_data[cpu] = NULL;
 -      }
 +      for_each_possible_cpu(cpu)
 +              free_iucv_data(cpu);
 +
 +      cpu_notifier_register_done();
 +
        root_device_unregister(iucv_root);
  out_int:
-       unregister_external_interrupt(0x4000, iucv_external_interrupt);
+       unregister_external_irq(EXT_IRQ_IUCV, iucv_external_interrupt);
  out_ctl:
        ctl_clear_bit(0, 1);
  out:
                kfree(p);
        spin_unlock_irq(&iucv_queue_lock);
        unregister_reboot_notifier(&iucv_reboot_notifier);
 -      unregister_hotcpu_notifier(&iucv_cpu_notifier);
 -      for_each_possible_cpu(cpu) {
 -              kfree(iucv_param_irq[cpu]);
 -              iucv_param_irq[cpu] = NULL;
 -              kfree(iucv_param[cpu]);
 -              iucv_param[cpu] = NULL;
 -              kfree(iucv_irq_data[cpu]);
 -              iucv_irq_data[cpu] = NULL;
 -      }
 +      cpu_notifier_register_begin();
 +      __unregister_hotcpu_notifier(&iucv_cpu_notifier);
 +      for_each_possible_cpu(cpu)
 +              free_iucv_data(cpu);
 +      cpu_notifier_register_done();
        root_device_unregister(iucv_root);
        bus_unregister(&iucv_bus);
-       unregister_external_interrupt(0x4000, iucv_external_interrupt);
+       unregister_external_irq(EXT_IRQ_IUCV, iucv_external_interrupt);
  }
  
  subsys_initcall(iucv_init);