]> Git Repo - linux.git/commitdiff
Merge tag 's390-5.11-2' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
authorLinus Torvalds <[email protected]>
Fri, 18 Dec 2020 19:08:06 +0000 (11:08 -0800)
committerLinus Torvalds <[email protected]>
Fri, 18 Dec 2020 19:08:06 +0000 (11:08 -0800)
Pull more s390 updates from Heiko Carstens:
 "This is mainly to decouple udelay() and arch_cpu_idle() and simplify
  both of them.

  Summary:

   - Always initialize kernel stack backchain when entering the kernel,
     so that unwinding works properly.

   - Fix stack unwinder test case to avoid rare interrupt stack
     corruption.

   - Simplify udelay() and just let it busy loop instead of implementing
     a complex logic.

   - arch_cpu_idle() cleanup.

   - Some other minor improvements"

* tag 's390-5.11-2' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
  s390/zcrypt: convert comma to semicolon
  s390/idle: allow arch_cpu_idle() to be kprobed
  s390/idle: remove raw_local_irq_save()/restore() from arch_cpu_idle()
  s390/idle: merge enabled_wait() and arch_cpu_idle()
  s390/delay: remove udelay_simple()
  s390/irq: select HAVE_IRQ_EXIT_ON_IRQ_STACK
  s390/delay: simplify udelay
  s390/test_unwind: use timer instead of udelay
  s390/test_unwind: fix CALL_ON_STACK tests
  s390: make calls to TRACE_IRQS_OFF/TRACE_IRQS_ON balanced
  s390: always clear kernel stack backchain before calling functions

1  2 
arch/s390/Kconfig
arch/s390/kernel/entry.S
drivers/s390/cio/device.c

diff --combined arch/s390/Kconfig
index f795eebf648f1cce62c363d53bfdf439a4aea46f,9e8895cb9ee79d6724967b44d2a14193fc57d007..e84bdd15150bf51bac297f5ae526d137bf17a5db
@@@ -35,6 -35,9 +35,6 @@@ config GENERIC_LOCKBREA
  config PGSTE
        def_bool y if KVM
  
 -config ARCH_SUPPORTS_DEBUG_PAGEALLOC
 -      def_bool y
 -
  config AUDIT_ARCH
        def_bool y
  
@@@ -102,7 -105,6 +102,7 @@@ config S39
        select ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE
        select ARCH_STACKWALK
        select ARCH_SUPPORTS_ATOMIC_RMW
 +      select ARCH_SUPPORTS_DEBUG_PAGEALLOC
        select ARCH_SUPPORTS_NUMA_BALANCING
        select ARCH_USE_BUILTIN_BSWAP
        select ARCH_USE_CMPXCHG_LOCKREF
        select CLONE_BACKWARDS2
        select DMA_OPS if PCI
        select DYNAMIC_FTRACE if FUNCTION_TRACER
 -      select GENERIC_CLOCKEVENTS
        select GENERIC_CPU_AUTOPROBE
        select GENERIC_CPU_VULNERABILITIES
        select GENERIC_FIND_FIRST_BIT
        select HAVE_FUTEX_CMPXCHG if FUTEX
        select HAVE_GCC_PLUGINS
        select HAVE_GENERIC_VDSO
+       select HAVE_IRQ_EXIT_ON_IRQ_STACK
        select HAVE_KERNEL_BZIP2
        select HAVE_KERNEL_GZIP
        select HAVE_KERNEL_LZ4
        select HAVE_RSEQ
        select HAVE_SYSCALL_TRACEPOINTS
        select HAVE_VIRT_CPU_ACCOUNTING
 +      select HAVE_VIRT_CPU_ACCOUNTING_IDLE
        select IOMMU_HELPER             if PCI
        select IOMMU_SUPPORT            if PCI
        select MODULES_USE_ELF_RELA
diff --combined arch/s390/kernel/entry.S
index 1f4659203f8c50d6233e4de958087772924cd65f,87e83164c33015a1487859705a0174caf13368ac..f1ba197b10c0e6c1f70022d88c61d82b6c86fd9a
@@@ -52,8 -52,7 +52,8 @@@ STACK_SIZE  = 1 << STACK_SHIF
  STACK_INIT = STACK_SIZE - STACK_FRAME_OVERHEAD - __PT_SIZE
  
  _TIF_WORK     = (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | \
 -                 _TIF_UPROBE | _TIF_GUARDED_STORAGE | _TIF_PATCH_PENDING)
 +                 _TIF_UPROBE | _TIF_GUARDED_STORAGE | _TIF_PATCH_PENDING | \
 +                 _TIF_NOTIFY_SIGNAL)
  _TIF_TRACE    = (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | \
                   _TIF_SYSCALL_TRACEPOINT)
  _CIF_WORK     = (_CIF_FPU)
@@@ -414,6 -413,7 +414,7 @@@ ENTRY(system_call
        mvc     __PT_PSW(16,%r11),__LC_SVC_OLD_PSW
        mvc     __PT_INT_CODE(4,%r11),__LC_SVC_ILC
        stg     %r14,__PT_FLAGS(%r11)
+       xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
        ENABLE_INTS
  .Lsysc_do_svc:
        # clear user controlled register to prevent speculative use
        jnl     .Lsysc_nr_ok
        slag    %r8,%r1,3
  .Lsysc_nr_ok:
-       xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
        stg     %r2,__PT_ORIG_GPR2(%r11)
        stg     %r7,STACK_FRAME_OVERHEAD(%r15)
        lg      %r9,0(%r8,%r10)                 # get system call add.
  #endif
        TSTMSK  __PT_FLAGS(%r11),_PIF_SYSCALL_RESTART
        jo      .Lsysc_syscall_restart
 -      TSTMSK  __TI_flags(%r12),_TIF_SIGPENDING
 -      j     .Lsysc_sigpending
 +      TSTMSK  __TI_flags(%r12),(_TIF_SIGPENDING|_TIF_NOTIFY_SIGNAL)
 +      jnz     .Lsysc_sigpending
        TSTMSK  __TI_flags(%r12),_TIF_NOTIFY_RESUME
        jo      .Lsysc_notify_resume
        j       .Lsysc_return
@@@ -699,8 -698,8 +699,8 @@@ ENTRY(pgm_check_handler
        mvc     __THREAD_per_address(8,%r14),__LC_PER_ADDRESS
        mvc     __THREAD_per_cause(2,%r14),__LC_PER_CODE
        mvc     __THREAD_per_paid(1,%r14),__LC_PER_ACCESS_ID
- 6:    RESTORE_SM_CLEAR_PER
-       xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
+ 6:    xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
+       RESTORE_SM_CLEAR_PER
        larl    %r1,pgm_check_table
        llgh    %r10,__PT_INT_CODE+2(%r11)
        nill    %r10,0x007f
  # PER event in supervisor state, must be kprobes
  #
  .Lpgm_kprobe:
-       RESTORE_SM_CLEAR_PER
        xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
+       RESTORE_SM_CLEAR_PER
        lgr     %r2,%r11                # pass pointer to pt_regs
        brasl   %r14,do_per_trap
        j       .Lpgm_return
@@@ -778,10 -777,8 +778,8 @@@ ENTRY(io_int_handler
  .Lio_skip_asce:
        mvc     __PT_INT_CODE(12,%r11),__LC_SUBCHANNEL_ID
        xc      __PT_FLAGS(8,%r11),__PT_FLAGS(%r11)
-       TSTMSK  __LC_CPU_FLAGS,_CIF_IGNORE_IRQ
-       jo      .Lio_restore
-       TRACE_IRQS_OFF
        xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
+       TRACE_IRQS_OFF
  .Lio_loop:
        lgr     %r2,%r11                # pass pointer to pt_regs
        lghi    %r3,IO_INTERRUPT
        TSTMSK  __TI_flags(%r12),_TIF_PATCH_PENDING
        jo      .Lio_patch_pending
  #endif
 -      TSTMSK  __TI_flags(%r12),_TIF_SIGPENDING
 -      j     .Lio_sigpending
 +      TSTMSK  __TI_flags(%r12),(_TIF_SIGPENDING|_TIF_NOTIFY_SIGNAL)
 +      jnz     .Lio_sigpending
        TSTMSK  __TI_flags(%r12),_TIF_NOTIFY_RESUME
        jo      .Lio_notify_resume
        TSTMSK  __TI_flags(%r12),_TIF_GUARDED_STORAGE
@@@ -966,10 -963,8 +964,8 @@@ ENTRY(ext_int_handler
        mvc     __PT_INT_PARM(4,%r11),__LC_EXT_PARAMS
        mvc     __PT_INT_PARM_LONG(8,%r11),0(%r1)
        xc      __PT_FLAGS(8,%r11),__PT_FLAGS(%r11)
-       TSTMSK  __LC_CPU_FLAGS,_CIF_IGNORE_IRQ
-       jo      .Lio_restore
-       TRACE_IRQS_OFF
        xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
+       TRACE_IRQS_OFF
        lgr     %r2,%r11                # pass pointer to pt_regs
        lghi    %r3,EXT_INTERRUPT
        brasl   %r14,do_IRQ
index 36583dc8406ce5a3576fe2bbded9e9aa8efb5248,9e3c8b4e7fa81e6195712dc3b9a7e9d6792bce0d..4b0a7cbb209625285353b34dd824c4fd881dbf3f
@@@ -1156,8 -1156,7 +1156,8 @@@ static int io_subchannel_chp_event(stru
                                   struct chp_link *link, int event)
  {
        struct ccw_device *cdev = sch_get_cdev(sch);
 -      int mask;
 +      int mask, chpid, valid_bit;
 +      int path_event[8];
  
        mask = chp_ssd_get_mask(&sch->ssd_info, link);
        if (!mask)
                        cdev->private->path_new_mask |= mask;
                io_subchannel_verify(sch);
                break;
 +      case CHP_FCES_EVENT:
 +              /* Forward Endpoint Security event */
 +              for (chpid = 0, valid_bit = 0x80; chpid < 8; chpid++,
 +                              valid_bit >>= 1) {
 +                      if (mask & valid_bit)
 +                              path_event[chpid] = PE_PATH_FCES_EVENT;
 +                      else
 +                              path_event[chpid] = PE_NONE;
 +              }
 +              if (cdev)
 +                      cdev->drv->path_event(cdev, path_event);
 +              break;
        }
        return 0;
  }
@@@ -1681,7 -1668,7 +1681,7 @@@ void ccw_device_wait_idle(struct ccw_de
                cio_tsch(sch);
                if (sch->schib.scsw.cmd.actl == 0)
                        break;
-               udelay_simple(100);
+               udelay(100);
        }
  }
  #endif
This page took 0.109096 seconds and 4 git commands to generate.