1. 04 Sep, 2020 22 commits
    • Steven Price's avatar
      mm: Add arch hooks for saving/restoring tags · 8a84802e
      Steven Price authored
      Arm's Memory Tagging Extension (MTE) adds some metadata (tags) to
      every physical page, when swapping pages out to disk it is necessary to
      save these tags, and later restore them when reading the pages back.
      
      Add some hooks along with dummy implementations to enable the
      arch code to handle this.
      
      Three new hooks are added to the swap code:
       * arch_prepare_to_swap() and
       * arch_swap_invalidate_page() / arch_swap_invalidate_area().
      One new hook is added to shmem:
       * arch_swap_restore()
      Signed-off-by: default avatarSteven Price <steven.price@arm.com>
      [catalin.marinas@arm.com: add unlock_page() on the error path]
      [catalin.marinas@arm.com: dropped the _tags suffix]
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Acked-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      8a84802e
    • Catalin Marinas's avatar
      fs: Handle intra-page faults in copy_mount_options() · d563d678
      Catalin Marinas authored
      The copy_mount_options() function takes a user pointer argument but no
      size and it tries to read up to a PAGE_SIZE. However, copy_from_user()
      is not guaranteed to return all the accessible bytes if, for example,
      the access crosses a page boundary and gets a fault on the second page.
      To work around this, the current copy_mount_options() implementation
      performs two copy_from_user() passes, first to the end of the current
      page and the second to what's left in the subsequent page.
      
      On arm64 with MTE enabled, access to a user page may trigger a fault
      after part of the buffer in a page has been copied (when the user
      pointer tag, bits 56-59, no longer matches the allocation tag stored in
      memory). Allow copy_mount_options() to handle such intra-page faults by
      resorting to byte at a time copy in case of copy_from_user() failure.
      
      Note that copy_from_user() handles the zeroing of the kernel buffer in
      case of error.
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      d563d678
    • Catalin Marinas's avatar
      arm64: mte: ptrace: Add NT_ARM_TAGGED_ADDR_CTRL regset · 2200aa71
      Catalin Marinas authored
      This regset allows read/write access to a ptraced process
      prctl(PR_SET_TAGGED_ADDR_CTRL) setting.
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      Cc: Alan Hayward <Alan.Hayward@arm.com>
      Cc: Luis Machado <luis.machado@linaro.org>
      Cc: Omair Javaid <omair.javaid@linaro.org>
      2200aa71
    • Catalin Marinas's avatar
      arm64: mte: ptrace: Add PTRACE_{PEEK,POKE}MTETAGS support · 18ddbaa0
      Catalin Marinas authored
      Add support for bulk setting/getting of the MTE tags in a tracee's
      address space at 'addr' in the ptrace() syscall prototype. 'data' points
      to a struct iovec in the tracer's address space with iov_base
      representing the address of a tracer's buffer of length iov_len. The
      tags to be copied to/from the tracer's buffer are stored as one tag per
      byte.
      
      On successfully copying at least one tag, ptrace() returns 0 and updates
      the tracer's iov_len with the number of tags copied. In case of error,
      either -EIO or -EFAULT is returned, trying to follow the ptrace() man
      page.
      
      Note that the tag copying functions are not performance critical,
      therefore they lack optimisations found in typical memory copy routines.
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      Cc: Alan Hayward <Alan.Hayward@arm.com>
      Cc: Luis Machado <luis.machado@linaro.org>
      Cc: Omair Javaid <omair.javaid@linaro.org>
      18ddbaa0
    • Catalin Marinas's avatar
      arm64: mte: Allow {set,get}_tagged_addr_ctrl() on non-current tasks · 93f067f6
      Catalin Marinas authored
      In preparation for ptrace() access to the prctl() value, allow calling
      these functions on non-current tasks.
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      93f067f6
    • Catalin Marinas's avatar
      arm64: mte: Restore the GCR_EL1 register after a suspend · 39d08e83
      Catalin Marinas authored
      The CPU resume/suspend routines only take care of the common system
      registers. Restore GCR_EL1 in addition via the __cpu_suspend_exit()
      function.
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      Reviewed-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      39d08e83
    • Catalin Marinas's avatar
      arm64: mte: Allow user control of the generated random tags via prctl() · af5ce952
      Catalin Marinas authored
      The IRG, ADDG and SUBG instructions insert a random tag in the resulting
      address. Certain tags can be excluded via the GCR_EL1.Exclude bitmap
      when, for example, the user wants a certain colour for freed buffers.
      Since the GCR_EL1 register is not accessible at EL0, extend the
      prctl(PR_SET_TAGGED_ADDR_CTRL) interface to include a 16-bit field in
      the first argument for controlling which tags can be generated by the
      above instruction (an include rather than exclude mask). Note that by
      default all non-zero tags are excluded. This setting is per-thread.
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      af5ce952
    • Catalin Marinas's avatar
      arm64: mte: Allow user control of the tag check mode via prctl() · 1c101da8
      Catalin Marinas authored
      By default, even if PROT_MTE is set on a memory range, there is no tag
      check fault reporting (SIGSEGV). Introduce a set of option to the
      exiting prctl(PR_SET_TAGGED_ADDR_CTRL) to allow user control of the tag
      check fault mode:
      
        PR_MTE_TCF_NONE  - no reporting (default)
        PR_MTE_TCF_SYNC  - synchronous tag check fault reporting
        PR_MTE_TCF_ASYNC - asynchronous tag check fault reporting
      
      These options translate into the corresponding SCTLR_EL1.TCF0 bitfield,
      context-switched by the kernel. Note that the kernel accesses to the
      user address space (e.g. read() system call) are not checked if the user
      thread tag checking mode is PR_MTE_TCF_NONE or PR_MTE_TCF_ASYNC. If the
      tag checking mode is PR_MTE_TCF_SYNC, the kernel makes a best effort to
      check its user address accesses, however it cannot always guarantee it.
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      1c101da8
    • Catalin Marinas's avatar
      mm: Allow arm64 mmap(PROT_MTE) on RAM-based files · 51b0bff2
      Catalin Marinas authored
      Since arm64 memory (allocation) tags can only be stored in RAM, mapping
      files with PROT_MTE is not allowed by default. RAM-based files like
      those in a tmpfs mount or memfd_create() can support memory tagging, so
      update the vm_flags accordingly in shmem_mmap().
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Acked-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      51b0bff2
    • Catalin Marinas's avatar
      arm64: mte: Validate the PROT_MTE request via arch_validate_flags() · 00420905
      Catalin Marinas authored
      Make use of the newly introduced arch_validate_flags() hook to
      sanity-check the PROT_MTE request passed to mmap() and mprotect(). If
      the mapping does not support MTE, these syscalls will return -EINVAL.
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      00420905
    • Catalin Marinas's avatar
      mm: Introduce arch_validate_flags() · c462ac28
      Catalin Marinas authored
      Similarly to arch_validate_prot() called from do_mprotect_pkey(), an
      architecture may need to sanity-check the new vm_flags.
      
      Define a dummy function always returning true. In addition to
      do_mprotect_pkey(), also invoke it from mmap_region() prior to updating
      vma->vm_page_prot to allow the architecture code to veto potentially
      inconsistent vm_flags.
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Acked-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      c462ac28
    • Catalin Marinas's avatar
      arm64: mte: Add PROT_MTE support to mmap() and mprotect() · 9f341931
      Catalin Marinas authored
      To enable tagging on a memory range, the user must explicitly opt in via
      a new PROT_MTE flag passed to mmap() or mprotect(). Since this is a new
      memory type in the AttrIndx field of a pte, simplify the or'ing of these
      bits over the protection_map[] attributes by making MT_NORMAL index 0.
      
      There are two conditions for arch_vm_get_page_prot() to return the
      MT_NORMAL_TAGGED memory type: (1) the user requested it via PROT_MTE,
      registered as VM_MTE in the vm_flags, and (2) the vma supports MTE,
      decided during the mmap() call (only) and registered as VM_MTE_ALLOWED.
      
      arch_calc_vm_prot_bits() is responsible for registering the user request
      as VM_MTE. The newly introduced arch_calc_vm_flag_bits() sets
      VM_MTE_ALLOWED if the mapping is MAP_ANONYMOUS. An MTE-capable
      filesystem (RAM-based) may be able to set VM_MTE_ALLOWED during its
      mmap() file ops call.
      
      In addition, update VM_DATA_DEFAULT_FLAGS to allow mprotect(PROT_MTE) on
      stack or brk area.
      
      The Linux mmap() syscall currently ignores unknown PROT_* flags. In the
      presence of MTE, an mmap(PROT_MTE) on a file which does not support MTE
      will not report an error and the memory will not be mapped as Normal
      Tagged. For consistency, mprotect(PROT_MTE) will not report an error
      either if the memory range does not support MTE. Two subsequent patches
      in the series will propose tightening of this behaviour.
      Co-developed-by: default avatarVincenzo Frascino <vincenzo.frascino@arm.com>
      Signed-off-by: default avatarVincenzo Frascino <vincenzo.frascino@arm.com>
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      9f341931
    • Kevin Brodsky's avatar
      mm: Introduce arch_calc_vm_flag_bits() · b3fbbea4
      Kevin Brodsky authored
      Similarly to arch_calc_vm_prot_bits(), introduce a dummy
      arch_calc_vm_flag_bits() invoked from calc_vm_flag_bits(). This macro
      can be overridden by architectures to insert specific VM_* flags derived
      from the mmap() MAP_* flags.
      Signed-off-by: default avatarKevin Brodsky <Kevin.Brodsky@arm.com>
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      b3fbbea4
    • Catalin Marinas's avatar
      arm64: mte: Tags-aware aware memcmp_pages() implementation · 4d1a8a2d
      Catalin Marinas authored
      When the Memory Tagging Extension is enabled, two pages are identical
      only if both their data and tags are identical.
      
      Make the generic memcmp_pages() a __weak function and add an
      arm64-specific implementation which returns non-zero if any of the two
      pages contain valid MTE tags (PG_mte_tagged set). There isn't much
      benefit in comparing the tags of two pages since these are normally used
      for heap allocations and likely to differ anyway.
      Co-developed-by: default avatarVincenzo Frascino <vincenzo.frascino@arm.com>
      Signed-off-by: default avatarVincenzo Frascino <vincenzo.frascino@arm.com>
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      4d1a8a2d
    • Catalin Marinas's avatar
      arm64: Avoid unnecessary clear_user_page() indirection · 738c8780
      Catalin Marinas authored
      Since clear_user_page() calls clear_page() directly, avoid the
      unnecessary indirection.
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      738c8780
    • Vincenzo Frascino's avatar
      arm64: mte: Tags-aware copy_{user_,}highpage() implementations · 2563776b
      Vincenzo Frascino authored
      When the Memory Tagging Extension is enabled, the tags need to be
      preserved across page copy (e.g. for copy-on-write, page migration).
      
      Introduce MTE-aware copy_{user_,}highpage() functions to copy tags to
      the destination if the source page has the PG_mte_tagged flag set.
      copy_user_page() does not need to handle tag copying since, with this
      patch, it is only called by the DAX code where there is no source page
      structure (and no source tags).
      Signed-off-by: default avatarVincenzo Frascino <vincenzo.frascino@arm.com>
      Co-developed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      2563776b
    • Catalin Marinas's avatar
      arm64: mte: Clear the tags when a page is mapped in user-space with PROT_MTE · 34bfeea4
      Catalin Marinas authored
      Pages allocated by the kernel are not guaranteed to have the tags
      zeroed, especially as the kernel does not (yet) use MTE itself. To
      ensure the user can still access such pages when mapped into its address
      space, clear the tags via set_pte_at(). A new page flag - PG_mte_tagged
      (PG_arch_2) - is used to track pages with valid allocation tags.
      
      Since the zero page is mapped as pte_special(), it won't be covered by
      the above set_pte_at() mechanism. Clear its tags during early MTE
      initialisation.
      Co-developed-by: default avatarSteven Price <steven.price@arm.com>
      Signed-off-by: default avatarSteven Price <steven.price@arm.com>
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      34bfeea4
    • Catalin Marinas's avatar
      mm: Preserve the PG_arch_2 flag in __split_huge_page_tail() · 72e6afa0
      Catalin Marinas authored
      When a huge page is split into normal pages, part of the head page flags
      are transferred to the tail pages. However, the PG_arch_* flags are not
      part of the preserved set.
      
      PG_arch_2 is used by the arm64 MTE support to mark pages that have valid
      tags. The absence of such flag would cause the arm64 set_pte_at() to
      clear the tags in order to avoid stale tags exposed to user or the
      swapping out hooks to ignore the tags. Not preserving PG_arch_2 on huge
      page splitting leads to tag corruption in the tail pages.
      
      Preserve the newly added PG_arch_2 flag in __split_huge_page_tail().
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      72e6afa0
    • Steven Price's avatar
      mm: Add PG_arch_2 page flag · 4beba948
      Steven Price authored
      For arm64 MTE support it is necessary to be able to mark pages that
      contain user space visible tags that will need to be saved/restored e.g.
      when swapped out.
      
      To support this add a new arch specific flag (PG_arch_2). This flag is
      only available on 64-bit architectures due to the limited number of
      spare page flags on the 32-bit ones.
      Signed-off-by: default avatarSteven Price <steven.price@arm.com>
      [catalin.marinas@arm.com: use CONFIG_64BIT for guarding this new flag]
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      4beba948
    • Vincenzo Frascino's avatar
      arm64: mte: Handle synchronous and asynchronous tag check faults · 637ec831
      Vincenzo Frascino authored
      The Memory Tagging Extension has two modes of notifying a tag check
      fault at EL0, configurable through the SCTLR_EL1.TCF0 field:
      
      1. Synchronous raising of a Data Abort exception with DFSC 17.
      2. Asynchronous setting of a cumulative bit in TFSRE0_EL1.
      
      Add the exception handler for the synchronous exception and handling of
      the asynchronous TFSRE0_EL1.TF0 bit setting via a new TIF flag in
      do_notify_resume().
      
      On a tag check failure in user-space, whether synchronous or
      asynchronous, a SIGSEGV will be raised on the faulting thread.
      Signed-off-by: default avatarVincenzo Frascino <vincenzo.frascino@arm.com>
      Co-developed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      637ec831
    • Vincenzo Frascino's avatar
      arm64: mte: Add specific SIGSEGV codes · 74f10824
      Vincenzo Frascino authored
      Add MTE-specific SIGSEGV codes to siginfo.h and update the x86
      BUILD_BUG_ON(NSIGSEGV != 7) compile check.
      Signed-off-by: default avatarVincenzo Frascino <vincenzo.frascino@arm.com>
      [catalin.marinas@arm.com: renamed precise/imprecise to sync/async]
      [catalin.marinas@arm.com: dropped #ifdef __aarch64__, renumbered]
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Acked-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Will Deacon <will@kernel.org>
      74f10824
    • Catalin Marinas's avatar
      arm64: kvm: mte: Hide the MTE CPUID information from the guests · 2ac638fc
      Catalin Marinas authored
      KVM does not support MTE in guests yet, so clear the corresponding field
      in the ID_AA64PFR1_EL1 register. In addition, inject an undefined
      exception in the guest if it accesses one of the GCR_EL1, RGSR_EL1,
      TFSR_EL1 or TFSRE0_EL1 registers. While the emulate_sys_reg() function
      already injects an undefined exception, this patch prevents the
      unnecessary printk.
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Steven Price <steven.price@arm.com>
      Acked-by: default avatarMarc Zyngier <maz@kernel.org>
      2ac638fc
  2. 03 Sep, 2020 3 commits
  3. 30 Aug, 2020 12 commits
    • Linus Torvalds's avatar
      Linux 5.9-rc3 · f75aef39
      Linus Torvalds authored
      f75aef39
    • Linus Torvalds's avatar
      Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 · e43327c7
      Linus Torvalds authored
      Pull crypto fixes from Herbert Xu:
      
       - fix regression in af_alg that affects iwd
      
       - restore polling delay in qat
      
       - fix double free in ingenic on error path
      
       - fix potential build failure in sa2ul due to missing Kconfig dependency
      
      * 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
        crypto: af_alg - Work around empty control messages without MSG_MORE
        crypto: sa2ul - add Kconfig selects to fix build error
        crypto: ingenic - Drop kfree for memory allocated with devm_kzalloc
        crypto: qat - add delay before polling mailbox
      e43327c7
    • Linus Torvalds's avatar
      Merge tag 'x86-urgent-2020-08-30' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · dcc5c6f0
      Linus Torvalds authored
      Pull x86 fixes from Thomas Gleixner:
       "Three interrupt related fixes for X86:
      
         - Move disabling of the local APIC after invoking fixup_irqs() to
           ensure that interrupts which are incoming are noted in the IRR and
           not ignored.
      
         - Unbreak affinity setting.
      
           The rework of the entry code reused the regular exception entry
           code for device interrupts. The vector number is pushed into the
           errorcode slot on the stack which is then lifted into an argument
           and set to -1 because that's regs->orig_ax which is used in quite
           some places to check whether the entry came from a syscall.
      
           But it was overlooked that orig_ax is used in the affinity cleanup
           code to validate whether the interrupt has arrived on the new
           target. It turned out that this vector check is pointless because
           interrupts are never moved from one vector to another on the same
           CPU. That check is a historical leftover from the time where x86
           supported multi-CPU affinities, but not longer needed with the now
           strict single CPU affinity. Famous last words ...
      
         - Add a missing check for an empty cpumask into the matrix allocator.
      
           The affinity change added a warning to catch the case where an
           interrupt is moved on the same CPU to a different vector. This
           triggers because a condition with an empty cpumask returns an
           assignment from the allocator as the allocator uses for_each_cpu()
           without checking the cpumask for being empty. The historical
           inconsistent for_each_cpu() behaviour of ignoring the cpumask and
           unconditionally claiming that CPU0 is in the mask struck again.
           Sigh.
      
        plus a new entry into the MAINTAINER file for the HPE/UV platform"
      
      * tag 'x86-urgent-2020-08-30' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        genirq/matrix: Deal with the sillyness of for_each_cpu() on UP
        x86/irq: Unbreak interrupt affinity setting
        x86/hotplug: Silence APIC only after all interrupts are migrated
        MAINTAINERS: Add entry for HPE Superdome Flex (UV) maintainers
      dcc5c6f0
    • Linus Torvalds's avatar
      Merge tag 'irq-urgent-2020-08-30' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · d2283cdc
      Linus Torvalds authored
      Pull irq fixes from Thomas Gleixner:
       "A set of fixes for interrupt chip drivers:
      
         - Revert the platform driver conversion of interrupt chip drivers as
           it turned out to create more problems than it solves.
      
         - Fix a trivial typo in the new module helpers which made probing
           reliably fail.
      
         - Small fixes in the STM32 and MIPS Ingenic drivers
      
         - The TI firmware rework which had badly managed dependencies and had
           to wait post rc1"
      
      * tag 'irq-urgent-2020-08-30' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        irqchip/ingenic: Leave parent IRQ unmasked on suspend
        irqchip/stm32-exti: Avoid losing interrupts due to clearing pending bits by mistake
        irqchip: Revert modular support for drivers using IRQCHIP_PLATFORM_DRIVER helperse
        irqchip: Fix probing deferal when using IRQCHIP_PLATFORM_DRIVER helpers
        arm64: dts: k3-am65: Update the RM resource types
        arm64: dts: k3-am65: ti-sci-inta/intr: Update to latest bindings
        arm64: dts: k3-j721e: ti-sci-inta/intr: Update to latest bindings
        irqchip/ti-sci-inta: Add support for INTA directly connecting to GIC
        irqchip/ti-sci-inta: Do not store TISCI device id in platform device id field
        dt-bindings: irqchip: Convert ti, sci-inta bindings to yaml
        dt-bindings: irqchip: ti, sci-inta: Update docs to support different parent.
        irqchip/ti-sci-intr: Add support for INTR being a parent to INTR
        dt-bindings: irqchip: Convert ti, sci-intr bindings to yaml
        dt-bindings: irqchip: ti, sci-intr: Update bindings to drop the usage of gic as parent
        firmware: ti_sci: Add support for getting resource with subtype
        firmware: ti_sci: Drop unused structure ti_sci_rm_type_map
        firmware: ti_sci: Drop the device id to resource type translation
      d2283cdc
    • Linus Torvalds's avatar
      Merge tag 'sched-urgent-2020-08-30' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 0063a82d
      Linus Torvalds authored
      Pull scheduler fix from Thomas Gleixner:
       "A single fix for the scheduler:
      
         - Make is_idle_task() __always_inline to prevent the compiler from
           putting it out of line into the wrong section because it's used
           inside noinstr sections"
      
      * tag 'sched-urgent-2020-08-30' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        sched: Use __always_inline on is_idle_task()
      0063a82d
    • Linus Torvalds's avatar
      Merge tag 'locking-urgent-2020-08-30' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · b69bea8a
      Linus Torvalds authored
      Pull locking fixes from Thomas Gleixner:
       "A set of fixes for lockdep, tracing and RCU:
      
         - Prevent recursion by using raw_cpu_* operations
      
         - Fixup the interrupt state in the cpu idle code to be consistent
      
         - Push rcu_idle_enter/exit() invocations deeper into the idle path so
           that the lock operations are inside the RCU watching sections
      
         - Move trace_cpu_idle() into generic code so it's called before RCU
           goes idle.
      
         - Handle raw_local_irq* vs. local_irq* operations correctly
      
         - Move the tracepoints out from under the lockdep recursion handling
           which turned out to be fragile and inconsistent"
      
      * tag 'locking-urgent-2020-08-30' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        lockdep,trace: Expose tracepoints
        lockdep: Only trace IRQ edges
        mips: Implement arch_irqs_disabled()
        arm64: Implement arch_irqs_disabled()
        nds32: Implement arch_irqs_disabled()
        locking/lockdep: Cleanup
        x86/entry: Remove unused THUNKs
        cpuidle: Move trace_cpu_idle() into generic code
        cpuidle: Make CPUIDLE_FLAG_TLB_FLUSHED generic
        sched,idle,rcu: Push rcu_idle deeper into the idle path
        cpuidle: Fixup IRQ state
        lockdep: Use raw_cpu_*() for per-cpu variables
      b69bea8a
    • Linus Torvalds's avatar
      Merge tag '5.9-rc2-smb-fix' of git://git.samba.org/sfrench/cifs-2.6 · 3edd8db2
      Linus Torvalds authored
      Pull cfis fix from Steve French:
       "DFS fix for referral problem when using SMB1"
      
      * tag '5.9-rc2-smb-fix' of git://git.samba.org/sfrench/cifs-2.6:
        cifs: fix check of tcon dfs in smb1
      3edd8db2
    • Linus Torvalds's avatar
      Merge tag 'powerpc-5.9-4' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux · 8bb5021c
      Linus Torvalds authored
      Pull powerpc fixes from Michael Ellerman:
      
       - Revert our removal of PROT_SAO, at least one user expressed an
         interest in using it on Power9. Instead don't allow it to be used in
         guests unless enabled explicitly at compile time.
      
       - A fix for a crash introduced by a recent change to FP handling.
      
       - Revert a change to our idle code that left Power10 with no idle
         support.
      
       - One minor fix for the new scv system call path to set PPR.
      
       - Fix a crash in our "generic" PMU if branch stack events were enabled.
      
       - A fix for the IMC PMU, to correctly identify host kernel samples.
      
       - The ADB_PMU powermac code was found to be incompatible with
         VMAP_STACK, so make them incompatible in Kconfig until the code can
         be fixed.
      
       - A build fix in drivers/video/fbdev/controlfb.c, and a documentation
         fix.
      
      Thanks to Alexey Kardashevskiy, Athira Rajeev, Christophe Leroy,
      Giuseppe Sacco, Madhavan Srinivasan, Milton Miller, Nicholas Piggin,
      Pratik Rajesh Sampat, Randy Dunlap, Shawn Anastasio, Vaidyanathan
      Srinivasan.
      
      * tag 'powerpc-5.9-4' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
        powerpc/32s: Disable VMAP stack which CONFIG_ADB_PMU
        Revert "powerpc/powernv/idle: Replace CPU feature check with PVR check"
        powerpc/perf: Fix reading of MSR[HV/PR] bits in trace-imc
        powerpc/perf: Fix crashes with generic_compat_pmu & BHRB
        powerpc/64s: Fix crash in load_fp_state() due to fpexc_mode
        powerpc/64s: scv entry should set PPR
        Documentation/powerpc: fix malformed table in syscall64-abi
        video: fbdev: controlfb: Fix build for COMPILE_TEST=y && PPC_PMAC=n
        selftests/powerpc: Update PROT_SAO test to skip ISA 3.1
        powerpc/64s: Disallow PROT_SAO in LPARs by default
        Revert "powerpc/64s: Remove PROT_SAO support"
      8bb5021c
    • Linus Torvalds's avatar
      Merge tag 'usb-5.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb · 6f0306d1
      Linus Torvalds authored
      Pull USB fixes from Greg KH:
       "Let's try this again...  Here are some USB fixes for 5.9-rc3.
      
        This differs from the previous pull request for this release in that
        the usb gadget patch now does not break some systems, and actually
        does what it was intended to do. Many thanks to Marek Szyprowski for
        quickly noticing and testing the patch from Andy Shevchenko to resolve
        this issue.
      
        Additionally, some more new USB quirks have been added to get some new
        devices to work properly based on user reports.
      
        Other than that, the patches are all here, and they contain:
      
         - usb gadget driver fixes
      
         - xhci driver fixes
      
         - typec fixes
      
         - new quirks and ids
      
         - fixes for USB patches that went into 5.9-rc1.
      
        All of these have been tested in linux-next with no reported issues"
      
      * tag 'usb-5.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (33 commits)
        usb: storage: Add unusual_uas entry for Sony PSZ drives
        USB: Ignore UAS for JMicron JMS567 ATA/ATAPI Bridge
        usb: host: ohci-exynos: Fix error handling in exynos_ohci_probe()
        USB: gadget: u_f: Unbreak offset calculation in VLAs
        USB: quirks: Ignore duplicate endpoint on Sound Devices MixPre-D
        usb: typec: tcpm: Fix Fix source hard reset response for TDA 2.3.1.1 and TDA 2.3.1.2 failures
        USB: PHY: JZ4770: Fix static checker warning.
        USB: gadget: f_ncm: add bounds checks to ncm_unwrap_ntb()
        USB: gadget: u_f: add overflow checks to VLA macros
        xhci: Always restore EP_SOFT_CLEAR_TOGGLE even if ep reset failed
        xhci: Do warm-reset when both CAS and XDEV_RESUME are set
        usb: host: xhci: fix ep context print mismatch in debugfs
        usb: uas: Add quirk for PNY Pro Elite
        tools: usb: move to tools buildsystem
        USB: Fix device driver race
        USB: Also match device drivers using the ->match vfunc
        usb: host: xhci-tegra: fix tegra_xusb_get_phy()
        usb: host: xhci-tegra: otg usb2/usb3 port init
        usb: hcd: Fix use after free in usb_hcd_pci_remove()
        usb: typec: ucsi: Hold con->lock for the entire duration of ucsi_register_port()
        ...
      6f0306d1
    • Linus Torvalds's avatar
      Merge tag 'edac_urgent_for_v5.9_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras · 42df60fc
      Linus Torvalds authored
      Pull EDAC fix from Borislav Petkov:
       "A fix to properly clear ghes_edac driver state on driver remove so
        that a subsequent load can probe the system properly (Shiju Jose)"
      
      * tag 'edac_urgent_for_v5.9_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras:
        EDAC/ghes: Fix NULL pointer dereference in ghes_edac_register()
      42df60fc
    • Linus Torvalds's avatar
      Merge tag 'dma-mapping-5.9-2' of git://git.infradead.org/users/hch/dma-mapping · c4011283
      Linus Torvalds authored
      Pull dma-mapping fix from Christoph Hellwig:
       "Fix a possibly uninitialized variable (Dan Carpenter)"
      
      * tag 'dma-mapping-5.9-2' of git://git.infradead.org/users/hch/dma-mapping:
        dma-pool: Fix an uninitialized variable bug in atomic_pool_expand()
      c4011283
    • Thomas Gleixner's avatar
      genirq/matrix: Deal with the sillyness of for_each_cpu() on UP · 784a0830
      Thomas Gleixner authored
      Most of the CPU mask operations behave the same way, but for_each_cpu() and
      it's variants ignore the cpumask argument and claim that CPU0 is always in
      the mask. This is historical, inconsistent and annoying behaviour.
      
      The matrix allocator uses for_each_cpu() and can be called on UP with an
      empty cpumask. The calling code does not expect that this succeeds but
      until commit e027ffff ("x86/irq: Unbreak interrupt affinity setting")
      this went unnoticed. That commit added a WARN_ON() to catch cases which
      move an interrupt from one vector to another on the same CPU. The warning
      triggers on UP.
      
      Add a check for the cpumask being empty to prevent this.
      
      Fixes: 2f75d9e1 ("genirq: Implement bitmap matrix allocator")
      Reported-by: default avatarkernel test robot <rong.a.chen@intel.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: stable@vger.kernel.org
      784a0830
  4. 29 Aug, 2020 3 commits
    • Linus Torvalds's avatar
      Merge tag 'fallthrough-fixes-5.9-rc3' of... · 1127b219
      Linus Torvalds authored
      Merge tag 'fallthrough-fixes-5.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gustavoars/linux
      
      Pull fallthrough fixes from Gustavo A. R. Silva:
       "Fix some minor issues introduced by the recent treewide fallthrough
        conversions:
      
         - Fix identation issue
      
         - Fix erroneous fallthrough annotation
      
         - Remove unnecessary fallthrough annotation
      
         - Fix code comment changed by fallthrough conversion"
      
      * tag 'fallthrough-fixes-5.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gustavoars/linux:
        arm64/cpuinfo: Remove unnecessary fallthrough annotation
        media: dib0700: Fix identation issue in dib8096_set_param_override()
        afs: Remove erroneous fallthough annotation
        iio: dpot-dac: fix code comment in dpot_dac_read_raw()
      1127b219
    • Linus Torvalds's avatar
      fsldma: fix very broken 32-bit ppc ioread64 functionality · 0a4c56c8
      Linus Torvalds authored
      Commit ef91bb19 ("kernel.h: Silence sparse warning in
      lower_32_bits") caused new warnings to show in the fsldma driver, but
      that commit was not to blame: it only exposed some very incorrect code
      that tried to take the low 32 bits of an address.
      
      That made no sense for multiple reasons, the most notable one being that
      that code was intentionally limited to only 32-bit ppc builds, so "only
      low 32 bits of an address" was completely nonsensical.  There were no
      high bits to mask off to begin with.
      
      But even more importantly fropm a correctness standpoint, turning the
      address into an integer then caused the subsequent address arithmetic to
      be completely wrong too, and the "+1" actually incremented the address
      by one, rather than by four.
      
      Which again was incorrect, since the code was reading two 32-bit values
      and trying to make a 64-bit end result of it all.  Surprisingly, the
      iowrite64() did not suffer from the same odd and incorrect model.
      
      This code has never worked, but it's questionable whether anybody cared:
      of the two users that actually read the 64-bit value (by way of some C
      preprocessor hackery and eventually the 'get_cdar()' inline function),
      one of them explicitly ignored the value, and the other one might just
      happen to work despite the incorrect value being read.
      
      This patch at least makes it not fail the build any more, and makes the
      logic superficially sane.  Whether it makes any difference to the code
      _working_ or not shall remain a mystery.
      Compile-tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      0a4c56c8
    • Linus Torvalds's avatar
      Merge branch 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux · e77aee13
      Linus Torvalds authored
      Pull i2c fixes from Wolfram Sang:
       "A core fix for ACPI matching and two driver bugfixes"
      
      * 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
        i2c: iproc: Fix shifting 31 bits
        i2c: rcar: in slave mode, clear NACK earlier
        i2c: acpi: Remove dead code, i.e. i2c_acpi_match_device()
        i2c: core: Don't fail PRP0001 enumeration when no ID table exist
      e77aee13