]> Git Repo - linux.git/commitdiff
Merge branch 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm
authorLinus Torvalds <[email protected]>
Tue, 14 Aug 2018 02:13:38 +0000 (19:13 -0700)
committerLinus Torvalds <[email protected]>
Tue, 14 Aug 2018 02:13:38 +0000 (19:13 -0700)
Pull ARM updates from Russell King:

 - further Spectre variant 1 fixes for user accessors.

 - kbuild cleanups (Masahiro Yamada)

 - hook up sync core functionality (Will Deacon)

 - nommu updates for hypervisor mode booting (Vladimir Murzin)

 - use compiler built-ins for fls and ffs (Nicolas Pitre)

* 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm:
  ARM: spectre-v1: mitigate user accesses
  ARM: spectre-v1: use get_user() for __get_user()
  ARM: use __inttype() in get_user()
  ARM: oabi-compat: copy semops using __copy_from_user()
  ARM: vfp: use __copy_from_user() when restoring VFP state
  ARM: 8785/1: use compiler built-ins for ffs and fls
  ARM: 8784/1: NOMMU: Allow enter in Hyp mode
  ARM: 8783/1: NOMMU: Extend check for VBAR support
  ARM: 8782/1: vfp: clean up arch/arm/vfp/Makefile
  ARM: signal: copy registers using __copy_from_user()
  ARM: tcm: ensure inline stub functions are marked static
  ARM: 8779/1: add endianness option to LDFLAGS instead of LD
  ARM: 8777/1: Hook up SYNC_CORE functionality for sys_membarrier()

1  2 
arch/arm/Kconfig
arch/arm/kernel/signal.c

diff --combined arch/arm/Kconfig
index d7a81284c272d0e405bf4b1e200623e314585283,b0ac185473702946e28300d60f9dc8d88b0d2c5a..0f328d639d51d5f34156d112c8cfa521b9e24404
@@@ -9,6 -9,7 +9,7 @@@ config AR
        select ARCH_HAS_ELF_RANDOMIZE
        select ARCH_HAS_FORTIFY_SOURCE
        select ARCH_HAS_KCOV
+       select ARCH_HAS_MEMBARRIER_SYNC_CORE
        select ARCH_HAS_PTE_SPECIAL if ARM_LPAE
        select ARCH_HAS_PHYS_TO_DMA
        select ARCH_HAS_SET_MEMORY
@@@ -337,8 -338,8 +338,8 @@@ config ARCH_MULTIPLATFOR
        select TIMER_OF
        select COMMON_CLK
        select GENERIC_CLOCKEVENTS
 +      select GENERIC_IRQ_MULTI_HANDLER
        select MIGHT_HAVE_PCI
 -      select MULTI_IRQ_HANDLER
        select PCI_DOMAINS if PCI
        select SPARSE_IRQ
        select USE_OF
@@@ -465,9 -466,9 +466,9 @@@ config ARCH_DOV
        bool "Marvell Dove"
        select CPU_PJ4
        select GENERIC_CLOCKEVENTS
 +      select GENERIC_IRQ_MULTI_HANDLER
        select GPIOLIB
        select MIGHT_HAVE_PCI
 -      select MULTI_IRQ_HANDLER
        select MVEBU_MBUS
        select PINCTRL
        select PINCTRL_DOVE
@@@ -512,8 -513,8 +513,8 @@@ config ARCH_LPC32X
        select COMMON_CLK
        select CPU_ARM926T
        select GENERIC_CLOCKEVENTS
 +      select GENERIC_IRQ_MULTI_HANDLER
        select GPIOLIB
 -      select MULTI_IRQ_HANDLER
        select SPARSE_IRQ
        select USE_OF
        help
@@@ -532,11 -533,11 +533,11 @@@ config ARCH_PX
        select TIMER_OF
        select CPU_XSCALE if !CPU_XSC3
        select GENERIC_CLOCKEVENTS
 +      select GENERIC_IRQ_MULTI_HANDLER
        select GPIO_PXA
        select GPIOLIB
        select HAVE_IDE
        select IRQ_DOMAIN
 -      select MULTI_IRQ_HANDLER
        select PLAT_PXA
        select SPARSE_IRQ
        help
@@@ -572,11 -573,11 +573,11 @@@ config ARCH_SA110
        select CPU_FREQ
        select CPU_SA1100
        select GENERIC_CLOCKEVENTS
 +      select GENERIC_IRQ_MULTI_HANDLER
        select GPIOLIB
        select HAVE_IDE
        select IRQ_DOMAIN
        select ISA
 -      select MULTI_IRQ_HANDLER
        select NEED_MACH_MEMORY_H
        select SPARSE_IRQ
        help
@@@ -590,10 -591,10 +591,10 @@@ config ARCH_S3C24X
        select GENERIC_CLOCKEVENTS
        select GPIO_SAMSUNG
        select GPIOLIB
 +      select GENERIC_IRQ_MULTI_HANDLER
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
 -      select MULTI_IRQ_HANDLER
        select NEED_MACH_IO_H
        select SAMSUNG_ATAGS
        select USE_OF
@@@ -627,10 -628,10 +628,10 @@@ config ARCH_OMAP
        select CLKSRC_MMIO
        select GENERIC_CLOCKEVENTS
        select GENERIC_IRQ_CHIP
 +      select GENERIC_IRQ_MULTI_HANDLER
        select GPIOLIB
        select HAVE_IDE
        select IRQ_DOMAIN
 -      select MULTI_IRQ_HANDLER
        select NEED_MACH_IO_H if PCCARD
        select NEED_MACH_MEMORY_H
        select SPARSE_IRQ
@@@ -921,6 -922,11 +922,6 @@@ config IWMMX
          Enable support for iWMMXt context switching at run time if
          running on a CPU that supports it.
  
 -config MULTI_IRQ_HANDLER
 -      bool
 -      help
 -        Allow each machine to specify it's own IRQ handler at run time.
 -
  if !MMU
  source "arch/arm/Kconfig-nommu"
  endif
@@@ -1240,14 -1246,8 +1241,14 @@@ config PC
          VESA. If you have PCI, say Y, otherwise N.
  
  config PCI_DOMAINS
 -      bool
 +      bool "Support for multiple PCI domains"
        depends on PCI
 +      help
 +        Enable PCI domains kernel management. Say Y if your machine
 +        has a PCI bus hierarchy that requires more than one PCI
 +        domain (aka segment) to be correctly managed. Say N otherwise.
 +
 +        If you don't know what to do here, say N.
  
  config PCI_DOMAINS_GENERIC
        def_bool PCI_DOMAINS
diff --combined arch/arm/kernel/signal.c
index dec130e7078c9adc10dae920c2c706143c7e126e,5cc5a4259d03ca16079c4ff29463267b553c2c92..b8f766cf3a905d5c226f8caa2f0cc367b73671f6
@@@ -150,22 -150,18 +150,18 @@@ static int preserve_vfp_context(struct 
  
  static int restore_vfp_context(char __user **auxp)
  {
-       struct vfp_sigframe __user *frame =
-               (struct vfp_sigframe __user *)*auxp;
-       unsigned long magic;
-       unsigned long size;
-       int err = 0;
-       __get_user_error(magic, &frame->magic, err);
-       __get_user_error(size, &frame->size, err);
+       struct vfp_sigframe frame;
+       int err;
  
+       err = __copy_from_user(&frame, *auxp, sizeof(frame));
        if (err)
-               return -EFAULT;
-       if (magic != VFP_MAGIC || size != VFP_STORAGE_SIZE)
+               return err;
+       if (frame.magic != VFP_MAGIC || frame.size != VFP_STORAGE_SIZE)
                return -EINVAL;
  
-       *auxp += size;
-       return vfp_restore_user_hwstate(&frame->ufp, &frame->ufp_exc);
+       *auxp += sizeof(frame);
+       return vfp_restore_user_hwstate(&frame.ufp, &frame.ufp_exc);
  }
  
  #endif
  
  static int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf)
  {
+       struct sigcontext context;
        char __user *aux;
        sigset_t set;
        int err;
        if (err == 0)
                set_current_blocked(&set);
  
-       __get_user_error(regs->ARM_r0, &sf->uc.uc_mcontext.arm_r0, err);
-       __get_user_error(regs->ARM_r1, &sf->uc.uc_mcontext.arm_r1, err);
-       __get_user_error(regs->ARM_r2, &sf->uc.uc_mcontext.arm_r2, err);
-       __get_user_error(regs->ARM_r3, &sf->uc.uc_mcontext.arm_r3, err);
-       __get_user_error(regs->ARM_r4, &sf->uc.uc_mcontext.arm_r4, err);
-       __get_user_error(regs->ARM_r5, &sf->uc.uc_mcontext.arm_r5, err);
-       __get_user_error(regs->ARM_r6, &sf->uc.uc_mcontext.arm_r6, err);
-       __get_user_error(regs->ARM_r7, &sf->uc.uc_mcontext.arm_r7, err);
-       __get_user_error(regs->ARM_r8, &sf->uc.uc_mcontext.arm_r8, err);
-       __get_user_error(regs->ARM_r9, &sf->uc.uc_mcontext.arm_r9, err);
-       __get_user_error(regs->ARM_r10, &sf->uc.uc_mcontext.arm_r10, err);
-       __get_user_error(regs->ARM_fp, &sf->uc.uc_mcontext.arm_fp, err);
-       __get_user_error(regs->ARM_ip, &sf->uc.uc_mcontext.arm_ip, err);
-       __get_user_error(regs->ARM_sp, &sf->uc.uc_mcontext.arm_sp, err);
-       __get_user_error(regs->ARM_lr, &sf->uc.uc_mcontext.arm_lr, err);
-       __get_user_error(regs->ARM_pc, &sf->uc.uc_mcontext.arm_pc, err);
-       __get_user_error(regs->ARM_cpsr, &sf->uc.uc_mcontext.arm_cpsr, err);
+       err |= __copy_from_user(&context, &sf->uc.uc_mcontext, sizeof(context));
+       if (err == 0) {
+               regs->ARM_r0 = context.arm_r0;
+               regs->ARM_r1 = context.arm_r1;
+               regs->ARM_r2 = context.arm_r2;
+               regs->ARM_r3 = context.arm_r3;
+               regs->ARM_r4 = context.arm_r4;
+               regs->ARM_r5 = context.arm_r5;
+               regs->ARM_r6 = context.arm_r6;
+               regs->ARM_r7 = context.arm_r7;
+               regs->ARM_r8 = context.arm_r8;
+               regs->ARM_r9 = context.arm_r9;
+               regs->ARM_r10 = context.arm_r10;
+               regs->ARM_fp = context.arm_fp;
+               regs->ARM_ip = context.arm_ip;
+               regs->ARM_sp = context.arm_sp;
+               regs->ARM_lr = context.arm_lr;
+               regs->ARM_pc = context.arm_pc;
+               regs->ARM_cpsr = context.arm_cpsr;
+       }
  
        err |= !valid_user_regs(regs);
  
@@@ -544,7 -544,7 +544,7 @@@ static void handle_signal(struct ksigna
         * Increment event counter and perform fixup for the pre-signal
         * frame.
         */
 -      rseq_signal_deliver(regs);
 +      rseq_signal_deliver(ksig, regs);
  
        /*
         * Set up the stack frame
@@@ -666,7 -666,7 +666,7 @@@ do_work_pending(struct pt_regs *regs, u
                        } else {
                                clear_thread_flag(TIF_NOTIFY_RESUME);
                                tracehook_notify_resume(regs);
 -                              rseq_handle_notify_resume(regs);
 +                              rseq_handle_notify_resume(NULL, regs);
                        }
                }
                local_irq_disable();
This page took 0.0774 seconds and 4 git commands to generate.