30 Dec, 2020

2 commits

  • [ Upstream commit 3cce9d44321e460e7c88cdec4e4537a6e9ad7c0d ]

    Commit f77ac2e378be9dd6 ("ARM: 9030/1: entry: omit FP emulation for UND
    exceptions taken in kernel mode") failed to take into account that there
    is in fact a case where we relied on this code path: during boot, the
    VFP detection code issues a read of FPSID, which will trigger an undef
    exception on cores that lack VFP support.

    So let's reinstate this logic using an undef hook which is registered
    only for the duration of the initcall to vpf_init(), and which sets
    VFP_arch to a non-zero value - as before - if no VFP support is present.

    Fixes: f77ac2e378be9dd6 ("ARM: 9030/1: entry: omit FP emulation for UND ...")
    Reported-by: "kernelci.org bot"
    Signed-off-by: Ard Biesheuvel
    Signed-off-by: Russell King
    Signed-off-by: Sasha Levin

    Ard Biesheuvel
     
  • [ Upstream commit f77ac2e378be9dd61eb88728f0840642f045d9d1 ]

    There are a couple of problems with the exception entry code that deals
    with FP exceptions (which are reported as UND exceptions) when building
    the kernel in Thumb2 mode:
    - the conditional branch to vfp_kmode_exception in vfp_support_entry()
    may be out of range for its target, depending on how the linker decides
    to arrange the sections;
    - when the UND exception is taken in kernel mode, the emulation handling
    logic is entered via the 'call_fpe' label, which means we end up using
    the wrong value/mask pairs to match and detect the NEON opcodes.

    Since UND exceptions in kernel mode are unlikely to occur on a hot path
    (as opposed to the user mode version which is invoked for VFP support
    code and lazy restore), we can use the existing undef hook machinery for
    any kernel mode instruction emulation that is needed, including calling
    the existing vfp_kmode_exception() routine for unexpected cases. So drop
    the call to call_fpe, and instead, install an undef hook that will get
    called for NEON and VFP instructions that trigger an UND exception in
    kernel mode.

    While at it, make sure that the PC correction is accurate for the
    execution mode where the exception was taken, by checking the PSR
    Thumb bit.

    Cc: Dmitry Osipenko
    Cc: Kees Cook
    Fixes: eff8728fe698 ("vmlinux.lds.h: Add PGO and AutoFDO input sections")
    Signed-off-by: Ard Biesheuvel
    Reviewed-by: Linus Walleij
    Reviewed-by: Nick Desaulniers
    Signed-off-by: Russell King
    Signed-off-by: Sasha Levin

    Ard Biesheuvel
     

21 Jul, 2020

2 commits

  • The integrated assembler of Clang 10 and earlier do not allow to access
    the VFP registers through the coprocessor load/store instructions:
    arch/arm/vfp/vfpmodule.c:342:2: error: invalid operand for instruction
    fmxr(FPEXC, fpexc & ~(FPEXC_EX|FPEXC_DEX|FPEXC_FP2V|FPEXC_VV|FPEXC_TRAP_MASK));
    ^
    arch/arm/vfp/vfpinstr.h:79:6: note: expanded from macro 'fmxr'
    asm("mcr p10, 7, %0, " vfpreg(_vfp_) ", cr0, 0 @ fmxr " #_vfp_ ", %0"
    ^
    :1:6: note: instantiated into assembly here
    mcr p10, 7, r0, cr8, cr0, 0 @ fmxr FPEXC, r0
    ^

    This has been addressed with Clang 11 [0]. However, to support earlier
    versions of Clang and for better readability use of VFP assembler
    mnemonics still is preferred.

    Ideally we would replace this code with the unified assembler language
    mnemonics vmrs/vmsr on call sites along with .fpu assembler directives.
    The GNU assembler supports the .fpu directive at least since 2.17 (when
    documentation has been added). Since Linux requires binutils 2.21 it is
    safe to use .fpu directive. However, binutils does not allow to use
    FPINST or FPINST2 as an argument to vmrs/vmsr instructions up to
    binutils 2.24 (see binutils commit 16d02dc907c5):
    arch/arm/vfp/vfphw.S: Assembler messages:
    arch/arm/vfp/vfphw.S:162: Error: operand 0 must be FPSID or FPSCR pr FPEXC -- `vmsr FPINST,r6'
    arch/arm/vfp/vfphw.S:165: Error: operand 0 must be FPSID or FPSCR pr FPEXC -- `vmsr FPINST2,r8'
    arch/arm/vfp/vfphw.S:235: Error: operand 1 must be a VFP extension System Register -- `vmrs r3,FPINST'
    arch/arm/vfp/vfphw.S:238: Error: operand 1 must be a VFP extension System Register -- `vmrs r12,FPINST2'

    Use as-instr in Kconfig to check if FPINST/FPINST2 can be used. If they
    can be used make use of .fpu directives and UAL VFP mnemonics for
    register access.

    This allows to build vfpmodule.c with Clang and its integrated assembler.

    [0] https://reviews.llvm.org/D59733

    Link: https://github.com/ClangBuiltLinux/linux/issues/905

    Signed-off-by: Stefan Agner
    Signed-off-by: Russell King

    Stefan Agner
     
  • Explicit FPU selection has been introduced in commit 1a6be26d5b1a
    ("[ARM] Enable VFP to be built when non-VFP capable CPUs are selected")
    to make use of assembler mnemonics for VFP instructions.

    However, clang currently does not support passing assembler flags
    like this and errors out with:
    clang-10: error: the clang compiler does not support '-Wa,-mfpu=softvfp+vfp'

    Make use of the .fpu assembler directives to select the floating point
    hardware selectively. Also use the new unified assembler language
    mnemonics. This allows to build these procedures with Clang.

    Link: https://github.com/ClangBuiltLinux/linux/issues/762

    Signed-off-by: Stefan Agner
    Signed-off-by: Russell King

    Stefan Agner
     

19 Jun, 2019

1 commit

  • Based on 2 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation #

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 4122 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Enrico Weigelt
    Reviewed-by: Kate Stewart
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190604081206.933168790@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

21 May, 2019

1 commit


15 Nov, 2018

1 commit


12 Nov, 2018

1 commit

  • In vfp_preserve_user_clear_hwstate, ufp_exc->fpinst2 gets assigned to
    itself. It should actually be hwstate->fpinst2 that gets assigned to the
    ufp_exc field.

    Fixes commit 3aa2df6ec2ca6bc143a65351cca4266d03a8bc41 ("ARM: 8791/1:
    vfp: use __copy_to_user() when saving VFP state").

    Reported-by: David Binderman
    Signed-off-by: Julien Thierry
    Signed-off-by: Russell King

    Julien Thierry
     

24 Oct, 2018

1 commit

  • …iederm/user-namespace

    Pull siginfo updates from Eric Biederman:
    "I have been slowly sorting out siginfo and this is the culmination of
    that work.

    The primary result is in several ways the signal infrastructure has
    been made less error prone. The code has been updated so that manually
    specifying SEND_SIG_FORCED is never necessary. The conversion to the
    new siginfo sending functions is now complete, which makes it
    difficult to send a signal without filling in the proper siginfo
    fields.

    At the tail end of the patchset comes the optimization of decreasing
    the size of struct siginfo in the kernel from 128 bytes to about 48
    bytes on 64bit. The fundamental observation that enables this is by
    definition none of the known ways to use struct siginfo uses the extra
    bytes.

    This comes at the cost of a small user space observable difference.
    For the rare case of siginfo being injected into the kernel only what
    can be copied into kernel_siginfo is delivered to the destination, the
    rest of the bytes are set to 0. For cases where the signal and the
    si_code are known this is safe, because we know those bytes are not
    used. For cases where the signal and si_code combination is unknown
    the bits that won't fit into struct kernel_siginfo are tested to
    verify they are zero, and the send fails if they are not.

    I made an extensive search through userspace code and I could not find
    anything that would break because of the above change. If it turns out
    I did break something it will take just the revert of a single change
    to restore kernel_siginfo to the same size as userspace siginfo.

    Testing did reveal dependencies on preferring the signo passed to
    sigqueueinfo over si->signo, so bit the bullet and added the
    complexity necessary to handle that case.

    Testing also revealed bad things can happen if a negative signal
    number is passed into the system calls. Something no sane application
    will do but something a malicious program or a fuzzer might do. So I
    have fixed the code that performs the bounds checks to ensure negative
    signal numbers are handled"

    * 'siginfo-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (80 commits)
    signal: Guard against negative signal numbers in copy_siginfo_from_user32
    signal: Guard against negative signal numbers in copy_siginfo_from_user
    signal: In sigqueueinfo prefer sig not si_signo
    signal: Use a smaller struct siginfo in the kernel
    signal: Distinguish between kernel_siginfo and siginfo
    signal: Introduce copy_siginfo_from_user and use it's return value
    signal: Remove the need for __ARCH_SI_PREABLE_SIZE and SI_PAD_SIZE
    signal: Fail sigqueueinfo if si_signo != sig
    signal/sparc: Move EMT_TAGOVF into the generic siginfo.h
    signal/unicore32: Use force_sig_fault where appropriate
    signal/unicore32: Generate siginfo in ucs32_notify_die
    signal/unicore32: Use send_sig_fault where appropriate
    signal/arc: Use force_sig_fault where appropriate
    signal/arc: Push siginfo generation into unhandled_exception
    signal/ia64: Use force_sig_fault where appropriate
    signal/ia64: Use the force_sig(SIGSEGV,...) in ia64_rt_sigreturn
    signal/ia64: Use the generic force_sigsegv in setup_frame
    signal/arm/kvm: Use send_sig_mceerr
    signal/arm: Use send_sig_fault where appropriate
    signal/arm: Use force_sig_fault where appropriate
    ...

    Linus Torvalds
     

10 Oct, 2018

1 commit


05 Oct, 2018

1 commit


28 Sep, 2018

1 commit


13 Aug, 2018

1 commit


03 Aug, 2018

1 commit

  • __get_user_error() is used as a fast accessor to make copying structure
    members in the signal handling path as efficient as possible. However,
    with software PAN and the recent Spectre variant 1, the efficiency is
    reduced as these are no longer fast accessors.

    In the case of software PAN, it has to switch the domain register around
    each access, and with Spectre variant 1, it would have to repeat the
    access_ok() check for each access.

    Use __copy_from_user() rather than __get_user_err() for individual
    members when restoring VFP state.

    Acked-by: Mark Rutland
    Signed-off-by: Russell King

    Russell King
     

30 Jul, 2018

1 commit

  • Since commit 799c43415442 ("kbuild: thin archives make default for
    all archs"), $(AR) is used instead of $(LD) to combine object files.

    The following code in arch/arm/vfp/Makefile:

    LDFLAGS +=--no-warn-mismatch

    ... is no longer used.

    Also, arch/arm/Makefile already guards arch/arm/vfp/ by a boolean
    symbol, CONFIG_VFP, like this:

    core-$(CONFIG_VFP) += arch/arm/vfp/

    So, $(CONFIG_VFP) is always evaluated to y in arch/arm/vfp/Makefile.
    There is no point to use pseudo object, vfp.o, which never becomes
    a module. Add all objects to obj-y directly.

    Signed-off-by: Masahiro Yamada
    Signed-off-by: Russell King

    Masahiro Yamada
     

05 Jun, 2018

1 commit

  • …iederm/user-namespace

    Pull siginfo updates from Eric Biederman:
    "This set of changes close the known issues with setting si_code to an
    invalid value, and with not fully initializing struct siginfo. There
    remains work to do on nds32, arc, unicore32, powerpc, arm, arm64, ia64
    and x86 to get the code that generates siginfo into a simpler and more
    maintainable state. Most of that work involves refactoring the signal
    handling code and thus careful code review.

    Also not included is the work to shrink the in kernel version of
    struct siginfo. That depends on getting the number of places that
    directly manipulate struct siginfo under control, as it requires the
    introduction of struct kernel_siginfo for the in kernel things.

    Overall this set of changes looks like it is making good progress, and
    with a little luck I will be wrapping up the siginfo work next
    development cycle"

    * 'siginfo-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (46 commits)
    signal/sh: Stop gcc warning about an impossible case in do_divide_error
    signal/mips: Report FPE_FLTUNK for undiagnosed floating point exceptions
    signal/um: More carefully relay signals in relay_signal.
    signal: Extend siginfo_layout with SIL_FAULT_{MCEERR|BNDERR|PKUERR}
    signal: Remove unncessary #ifdef SEGV_PKUERR in 32bit compat code
    signal/signalfd: Add support for SIGSYS
    signal/signalfd: Remove __put_user from signalfd_copyinfo
    signal/xtensa: Use force_sig_fault where appropriate
    signal/xtensa: Consistenly use SIGBUS in do_unaligned_user
    signal/um: Use force_sig_fault where appropriate
    signal/sparc: Use force_sig_fault where appropriate
    signal/sparc: Use send_sig_fault where appropriate
    signal/sh: Use force_sig_fault where appropriate
    signal/s390: Use force_sig_fault where appropriate
    signal/riscv: Replace do_trap_siginfo with force_sig_fault
    signal/riscv: Use force_sig_fault where appropriate
    signal/parisc: Use force_sig_fault where appropriate
    signal/parisc: Use force_sig_mceerr where appropriate
    signal/openrisc: Use force_sig_fault where appropriate
    signal/nios2: Use force_sig_fault where appropriate
    ...

    Linus Torvalds
     

20 May, 2018

1 commit

  • Commit 7771c6645700 ("signal/arm: Document conflicts with SI_USER and
    SIGFPE") broke the siginfo structure for userspace triggered signals,
    causing the strace testsuite to regress. Fix this by eliminating
    the FPE_FIXME definition (which is at the root of the breakage) and
    use FPE_FLTINV instead for the case where the hardware appears to be
    reporting nonsense.

    Fixes: 7771c6645700 ("signal/arm: Document conflicts with SI_USER and SIGFPE")
    Suggested-by: Linus Torvalds
    Signed-off-by: Russell King

    Russell King
     

25 Apr, 2018

1 commit

  • Call clear_siginfo to ensure every stack allocated siginfo is properly
    initialized before being passed to the signal sending functions.

    Note: It is not safe to depend on C initializers to initialize struct
    siginfo on the stack because C is allowed to skip holes when
    initializing a structure.

    The initialization of struct siginfo in tracehook_report_syscall_exit
    was moved from the helper user_single_step_siginfo into
    tracehook_report_syscall_exit itself, to make it clear that the local
    variable siginfo gets fully initialized.

    In a few cases the scope of struct siginfo has been reduced to make it
    clear that siginfo siginfo is not used on other paths in the function
    in which it is declared.

    Instances of using memset to initialize siginfo have been replaced
    with calls clear_siginfo for clarity.

    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     

24 Mar, 2018

1 commit

  • Commit 384b38b66947 ("ARM: 7873/1: vfp: clear vfp_current_hw_state
    for dying cpu") fixed the cpu dying notifier by clearing
    vfp_current_hw_state[]. However commit e5b61bafe704 ("arm: Convert VFP
    hotplug notifiers to state machine") incorrectly used the original
    vfp_force_reload() function in the cpu dying notifier.

    Fix it by going back to clearing vfp_current_hw_state[].

    Fixes: e5b61bafe704 ("arm: Convert VFP hotplug notifiers to state machine")
    Cc: linux-stable
    Reported-by: Kohji Okuno
    Signed-off-by: Fabio Estevam
    Signed-off-by: Russell King

    Fabio Estevam
     

13 Jan, 2018

1 commit

  • Setting si_code to 0 results in a userspace seeing an si_code of 0.
    This is the same si_code as SI_USER. Posix and common sense requires
    that SI_USER not be a signal specific si_code. As such this use of 0
    for the si_code is a pretty horribly broken ABI.

    Further use of si_code == 0 guaranteed that copy_siginfo_to_user saw a
    value of __SI_KILL and now sees a value of SIL_KILL with the result
    that uid and pid fields are copied and which might copying the si_addr
    field by accident but certainly not by design. Making this a very
    flakey implementation.

    Utilizing FPE_FIXME, siginfo_layout will now return SIL_FAULT and the
    appropriate fields will be reliably copied.

    Possible ABI fixes includee:
    - Send the signal without siginfo
    - Don't generate a signal
    - Possibly assign and use an appropriate si_code
    - Don't handle cases which can't happen

    Cc: Russell King
    Cc: linux-arm-kernel@lists.infradead.org
    Ref: 451436b7bbb2 ("[ARM] Add support code for ARM hardware vector floating point")
    History Tree: https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git
    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     

02 Mar, 2017

1 commit


25 Dec, 2016

1 commit

  • When the state names got added a script was used to add the extra argument
    to the calls. The script basically converted the state constant to a
    string, but the cleanup to convert these strings into meaningful ones did
    not happen.

    Replace all the useless strings with 'subsys/xxx/yyy:state' strings which
    are used in all the other places already.

    Signed-off-by: Thomas Gleixner
    Cc: Peter Zijlstra
    Cc: Sebastian Siewior
    Link: http://lkml.kernel.org/r/20161221192112.085444152@linutronix.de
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     

22 Nov, 2016

1 commit


15 Jul, 2016

1 commit

  • Straight forward conversion plus commentary why code which is executed
    in hotplug callbacks needs to be invoked before installing them.

    Signed-off-by: Thomas Gleixner
    Signed-off-by: Anna-Maria Gleixner
    Reviewed-by: Sebastian Andrzej Siewior
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Russell King
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: rt@linutronix.de
    Link: http://lkml.kernel.org/r/20160713153335.713612993@linutronix.de
    Signed-off-by: Ingo Molnar

    Thomas Gleixner
     

21 May, 2016

1 commit

  • We need to call exit_thread from copy_process in a fail path. So make it
    accept task_struct as a parameter.

    [v2]
    * s390: exit_thread_runtime_instr doesn't make sense to be called for
    non-current tasks.
    * arm: fix the comment in vfp_thread_copy
    * change 'me' to 'tsk' for task_struct
    * now we can change only archs that actually have exit_thread

    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: Jiri Slaby
    Cc: "David S. Miller"
    Cc: "H. Peter Anvin"
    Cc: "James E.J. Bottomley"
    Cc: Aurelien Jacquiot
    Cc: Benjamin Herrenschmidt
    Cc: Catalin Marinas
    Cc: Chen Liqin
    Cc: Chris Metcalf
    Cc: Chris Zankel
    Cc: David Howells
    Cc: Fenghua Yu
    Cc: Geert Uytterhoeven
    Cc: Guan Xuetao
    Cc: Haavard Skinnemoen
    Cc: Hans-Christian Egtvedt
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: Ingo Molnar
    Cc: Ivan Kokshaysky
    Cc: James Hogan
    Cc: Jeff Dike
    Cc: Jesper Nilsson
    Cc: Jiri Slaby
    Cc: Jonas Bonn
    Cc: Koichi Yasutake
    Cc: Lennox Wu
    Cc: Ley Foon Tan
    Cc: Mark Salter
    Cc: Martin Schwidefsky
    Cc: Matt Turner
    Cc: Max Filippov
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Mikael Starvik
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Ralf Baechle
    Cc: Rich Felker
    Cc: Richard Henderson
    Cc: Richard Kuo
    Cc: Richard Weinberger
    Cc: Russell King
    Cc: Steven Miao
    Cc: Thomas Gleixner
    Cc: Tony Luck
    Cc: Vineet Gupta
    Cc: Will Deacon
    Cc: Yoshinori Sato
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jiri Slaby
     

21 May, 2015

1 commit


21 Nov, 2014

3 commits

  • Convert many (but not all) printk(KERN_* to pr_* to simplify the code.
    We take the opportunity to join some printk lines together so we don't
    split the message across several lines, and we also add a few levels
    to some messages which were previously missing them.

    Tested-by: Andrew Lunn
    Tested-by: Felipe Balbi
    Signed-off-by: Russell King

    Russell King
     
  • Stephen Rothwell reports that commit 3f4c9f8f0a20 ("ARM: 8197/1:
    vfp: Fix VFPv3 hwcap detection on CPUID based cpus") introduced a
    variable unused warning.

    arch/arm/vfp/vfpmodule.c: In function 'vfp_init':
    arch/arm/vfp/vfpmodule.c:725:6: warning: unused variable 'mvfr0'
    [-Wunused-variable]
    u32 mvfr0;

    Silence this warning by using IS_ENABLED instead of ifdefs.

    Reported-by: Stephen Rothwell
    Signed-off-by: Stephen Boyd
    Signed-off-by: Russell King

    Stephen Boyd
     
  • The subarchitecture field in the fpsid register is 7 bits wide on
    ARM CPUs using the CPUID identification scheme, spanning bits 22
    to 16. The topmost bit is used to designate that the
    subarchitecture designer is not ARM when it is set to 1. On
    non-CPUID scheme CPUs the subarchitecture field is only 4 bits
    wide and the higher bits are used to indicate no double precision
    support (bit 20) and the FTSMX/FLDMX format (bits 21-22).

    The VFP support code only looks at bits 19-16 to determine the
    VFP version. On Qualcomm's processors (Krait and Scorpion) we
    should see that we have HWCAP_VFPv3 but we don't because bit 22
    is set to 1 to indicate that the subarchitecture is not
    implemented by ARM and the rest of the bits are left as 0 because
    this is the first subarchitecture that Qualcomm has designed.
    Unfortunately we can't just widen the FPSID subarchitecture
    bitmask to consider all the bits on a CPUID scheme because there
    may be CPUs without the CPUID scheme that have VFP without double
    precision support and then the version would be a very wrong and
    large number. Instead, update the version detection logic to
    consider if the CPU is using the CPUID scheme.

    If the CPU is using CPUID scheme, use the MVFR registers to
    determine what version of VFP is supported. We already do this
    for VFPv4, so do something similar for VFPv3 and look for single
    or double precision support in MVFR0. Otherwise fall back to
    using FPSID to detect VFP support on non-CPUID scheme CPUs. We
    know that VFPv3 is only present in CPUs that have support for the
    CPUID scheme so this should be equivalent.

    Tested-by: Rob Clark
    Reviewed-by: Will Deacon
    Signed-off-by: Stephen Boyd
    Signed-off-by: Russell King

    Stephen Boyd
     

18 Nov, 2014

1 commit

  • Certain ARM CPU implementations (e.g. Cortex-A15) may not raise a
    floating- point exception whenever deprecated short-vector VFP
    instructions are executed. Instead these instructions are treated
    as UNALLOCATED. Change the VFP exception handling code to emulate
    short-vector instructions even if FPEXC exception bits are not
    set.

    Signed-off-by: Stepan Moskovchenko
    Tested-by: Will Deacon
    Tested-by: Rob Clark
    Signed-off-by: Stephen Boyd
    Signed-off-by: Russell King

    Stepan Moskovchenko
     

18 Jul, 2014

1 commit

  • ARMv6 and greater introduced a new instruction ("bx") which can be used
    to return from function calls. Recent CPUs perform better when the
    "bx lr" instruction is used rather than the "mov pc, lr" instruction,
    and this sequence is strongly recommended to be used by the ARM
    architecture manual (section A.4.1.1).

    We provide a new macro "ret" with all its variants for the condition
    code which will resolve to the appropriate instruction.

    Rather than doing this piecemeal, and miss some instances, change all
    the "mov pc" instances to use the new macro, with the exception of
    the "movs" instruction and the kprobes code. This allows us to detect
    the "mov pc, lr" case and fix it up - and also gives us the possibility
    of deploying this for other registers depending on the CPU selection.

    Reported-by: Will Deacon
    Tested-by: Stephen Warren # Tegra Jetson TK1
    Tested-by: Robert Jarzmik # mioa701_bootresume.S
    Tested-by: Andrew Lunn # Kirkwood
    Tested-by: Shawn Guo
    Tested-by: Tony Lindgren # OMAPs
    Tested-by: Gregory CLEMENT # Armada XP, 375, 385
    Acked-by: Sekhar Nori # DaVinci
    Acked-by: Christoffer Dall # kvm/hyp
    Acked-by: Haojian Zhuang # PXA3xx
    Acked-by: Stefano Stabellini # Xen
    Tested-by: Uwe Kleine-König # ARMv7M
    Tested-by: Simon Horman # Shmobile
    Signed-off-by: Russell King

    Russell King
     

05 Jun, 2014

1 commit


25 Apr, 2014

1 commit

  • The Undef abort handler in the kernel reads the undefined instruction
    from user space. If the page table was modified from another CPU, the
    user access could fail and do_page_fault() will be executed with
    interrupts disabled. This can potentially deadlock on ARM11MPCore or on
    Cortex-A15 with erratum 798181 workaround enabled (both implying IPI for
    TLB maintenance with page table lock held).

    This patch enables the IRQs in __und_usr before attempting to read the
    instruction from user space.

    Signed-off-by: Catalin Marinas
    Tested-by: Arun KS
    Cc: Hartley Sweeten
    Cc: Ryan Mallon
    Signed-off-by: Russell King

    Catalin Marinas
     

15 Apr, 2014

1 commit

  • The emulation for single and double precision multiply accumulate
    instructions correctly normalised any denormal values in the operand
    registers, but failed to normalise the destination (accumulator)
    register.

    This fixes https://bugzilla.kernel.org/show_bug.cgi?id=70501

    Signed-off-by: Jay Foad
    Signed-off-by: Russell King

    Jay Foad
     

09 Apr, 2014

2 commits


31 Oct, 2013

1 commit


09 Jul, 2013

3 commits

  • In order to safely support the use of NEON instructions in
    kernel mode, some precautions need to be taken:
    - the userland context that may be present in the registers (even
    if the NEON/VFP is currently disabled) must be stored under the
    correct task (which may not be 'current' in the UP case),
    - to avoid having to keep track of additional vfpstates for the
    kernel side, disallow the use of NEON in interrupt context
    and run with preemption disabled,
    - after use, re-enable preemption and re-enable the lazy restore
    machinery by disabling the NEON/VFP unit.

    This patch adds the functions kernel_neon_begin() and
    kernel_neon_end() which take care of the above. It also adds
    the Kconfig symbol KERNEL_MODE_NEON to enable it.

    Signed-off-by: Ard Biesheuvel
    Acked-by: Nicolas Pitre

    Ard Biesheuvel
     
  • The support code in vfp_support_entry does not care whether the
    exception that caused it to be invoked occurred in kernel mode or
    in user mode. However, neither condition that could trigger this
    exception (lazy restore and VFP bounce to support code) is
    currently allowable in kernel mode.

    In either case, print a message describing the condition before
    letting the undefined instruction handler run its course and trigger
    an oops.

    Signed-off-by: Ard Biesheuvel
    Acked-by: Nicolas Pitre

    Ard Biesheuvel
     
  • In order to use the NEON unit in the kernel, we should
    initialize it a bit earlier in the boot process so NEON users
    that like to do a quick benchmark at load time (like the
    xor_blocks or RAID-6 code) find the NEON/VFP unit already
    enabled.

    Replaced late_initcall() with core_initcall().

    Signed-off-by: Ard Biesheuvel
    Acked-by: Nicolas Pitre

    Ard Biesheuvel