Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 8 Apr 2014 19:02:28 +0000 (12:02 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 8 Apr 2014 19:02:28 +0000 (12:02 -0700)
Pull second set of s390 patches from Martin Schwidefsky:
 "The second part of Heikos uaccess rework, the page table walker for
  uaccess is now a thing of the past (yay!)

  The code change to fix the theoretical TLB flush problem allows us to
  add a TLB flush optimization for zEC12, this machine has new
  instructions that allow to do CPU local TLB flushes for single pages
  and for all pages of a specific address space.

  Plus the usual bug fixing and some more cleanup"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
  s390/uaccess: rework uaccess code - fix locking issues
  s390/mm,tlb: optimize TLB flushing for zEC12
  s390/mm,tlb: safeguard against speculative TLB creation
  s390/irq: Use defines for external interruption codes
  s390/irq: Add defines for external interruption codes
  s390/sclp: add timeout for queued requests
  kvm/s390: also set guest pages back to stable on kexec/kdump
  lcs: Add missing destroy_timer_on_stack()
  s390/tape: Add missing destroy_timer_on_stack()
  s390/tape: Use del_timer_sync()
  s390/3270: fix crash with multiple reset device requests
  s390/bitops,atomic: add missing memory barriers
  s390/zcrypt: add length check for aligned data to avoid overflow in msg-type 6

1  2 
arch/s390/include/asm/irq.h
arch/s390/include/asm/pgtable.h
arch/s390/kernel/irq.c
arch/s390/kernel/smp.c
arch/s390/kvm/diag.c
arch/s390/mm/fault.c
arch/s390/mm/pgtable.c
net/iucv/iucv.c

Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc net/iucv/iucv.c
index 79a0ce95799fb26e7b96402afef67f4085dd10bf,12afba10a61f61549e39b1c775dc7401c4b846d4..da787930df0ab643a81bfa1f3f554efb2cd41bee
@@@ -2068,17 -2069,19 +2068,17 @@@ static int __init iucv_init(void
  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:
@@@ -2102,14 -2105,18 +2102,14 @@@ static void __exit iucv_exit(void
                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);