arm64: updates for 4.3
Hi Linus,
Here is the arm64 queue for 4.3. There's quite a lot here and the diffstat looks pretty alarming at first glance, so let me walk you through it:
- There are a bunch of new arm64 features and these are summarised in the tag (see below).
- One of these features (LSE) involves a pretty hefty rework of our atomic operations, which interacts badly with the atomic_{or,xor,and} rework from PeterZ in tip. To solve this, tglx made a stable branch (tip/locking/arch-atomic) which is included here and accounts for most of the surprising diffstat (it touches all users of atomic_{set,clear}_mask). You've already pulled this from tip.
- We move our PSCI (a firmware interface for CPU power management) implementation out into drivers/firmware/ so that it can be shared with arch/arm/, rather than each architecture having a carbon copy of the code. This was merged as a separate branch so that RMK can include the changes in his tree too and subsequently move arch/arm/ over to the common code (again, you've already pulled this).
- There is a single patch to drivers/of/fdt.c, but that has been Acked-by Rob and is included here due to a dependency from the memblock linear-mapping restriction change.
Note that there is a conflict in arch/arm64/include/asm/barrier.h between 76695af20c01 ("locking, arch: use WRITE_ONCE()/READ_ONCE() in smp_store_release()/smp_load_acquire()") and 4b3dc9679cf7 ("arm64: force CONFIG_SMP=y and remove redundant #ifdefs"). The correct resolution is to take the version here (i.e. remove the #ifndef CONFIG_SMP block altogether).
Please pull.
Thanks,
Will
--->8
The following changes since commit cbfe8fa6cd672011c755c3cd85c9ffd4e2d10a6f:
Linux 4.2-rc4 (2015-07-26 12:26:21 -0700)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git tags/arm64-upstream
for you to fetch changes up to 674c242c9323d3c293fc4f9a3a3a619fe3063290:
arm64: flush FP/SIMD state correctly after execve() (2015-08-27 09:55:26 +0100)
----------------------------------------------------------------
arm64 updates for 4.3:
- Support for new architectural features introduced in ARMv8.1:
* Privileged Access Never (PAN) to catch user pointer dereferences in the kernel
* Large System Extension (LSE) for building scalable atomics and locks (depends on locking/arch-atomic from tip, which is included here)
* Hardware Dirty Bit Management (DBM) for updating clean PTEs automatically
- Move our PSCI implementation out into drivers/firmware/, where it can be shared with arch/arm/. RMK has also pulled this component branch and has additional patches moving arch/arm/ over. MAINTAINERS is updated accordingly.
- Better BUG implementation based on the BRK instruction for trapping
- Leaf TLB invalidation for unmapping user pages
- Support for PROBE_ONLY PCI configurations
- Various cleanups and non-critical fixes, including:
* Always flush FP/SIMD state over exec()
* Restrict memblock additions based on range of linear mapping
* Ensure *(LIST_POISON) generates a fatal fault
* Context-tracking syscall return no longer corrupts return value when not forced on.
* Alternatives patching synchronisation/stability improvements
* Signed sub-word cmpxchg compare fix (tickled by HAVE_CMPXCHG_LOCAL)
* Force SMP=y
* Hide direct DCC access from userspace
* Fix EFI stub memory allocation when DRAM starts at 0x0
----------------------------------------------------------------
Alexander Kuleshov (1):
arm64: Fix source code file path in comments
Ard Biesheuvel (5):
arm64: efi: prefer AllocatePages() over efi_low_alloc() for vmlinux arm64/Documentation: clarify wording regarding memory below the Image of/fdt: make memblock maximum physical address arch configurable
arm64: set MAX_MEMBLOCK_ADDR according to linear region size
arm64: flush FP/SIMD state correctly after execve()
Catalin Marinas (4):
arm64: Add support for hardware updates of the access and dirty pte bits
arm64: Better native ptrace support for compat tasks
arm64: Clean up __flush_tlb(_kernel)_range functions
arm64: Use last level TLBI for user pte changes
Chris Metcalf (1):
tile: Provide atomic_{or,xor,and}Daniel Thompson (5):
arm64: Remove unused macros from assembler.h
arm64: alternative: Provide if/else/endif assembler macros
arm64: mm: Adopt new alternative assembler macros
arm64: kernel: Adopt new alternative assembler macros
arm64: kvm: Adopt new alternative assembler macros
Dave P Martin (9):
arm64/debug: Eliminate magic number for size of BRK instruction arm64/debug: Mask off all reserved bits from generated ESR values arm64/debug: Eliminate magic number from ESR template definition arm64/debug: More consistent naming for the BRK ESR template macro arm64/debug: Move BRK ESR template macro into <asm/esr.h> arm64/debug: Simplify BRK insn opcode declarations arm64/debug: Add missing #includes
arm64/BUG: Use BRK instruction for generic BUG traps arm64/BUG: Show explicit backtrace for WARNs
James Morse (6):
arm64: kernel: Add cpuid_feature_extract_field() for 4bit sign extension
arm64: kernel: Move config_sctlr_el1
arm64: kernel: Add cpufeature 'enable' callback
arm64: kernel: Add min_field_value and use '>=' for feature detection
arm64: kernel: Add optional CONFIG_ parameter to ALTERNATIVE()
arm64: kernel: Add support for Privileged Access Never
Jeff Vander Stoep (1):
arm64: kconfig: Move LIST_POISON to a safe value
Jisheng Zhang (1):
arm64: hugetlb: remove paragraph about writing to FSF
Jonas Rabenstein (2):
arm64: remove dead-code depending on CONFIG_UP_LATE_INIT
arm64: remove redundant object file list
Jungseok Lee (1):
arm64: Add __exception_irq_entry definition for function graph
Lorenzo Pieralisi (1):
ARM64: PCI: do not enable resources on PROBE_ONLY systems
Mark Rutland (7):
arm64: perf: factor out callchain code
arm64: perf: condense event number maps
arm64: mm: mark create_mapping as __init
arm64: psci: factor invocation code to drivers
drivers: psci: support native SMC{32,64} calls
MAINTAINERS: add PSCI entry
arm64: make ll/sc __cmpxchg_case_##name asm consistent
Mark Salter (1):
arm64: remove dead code
Olof Johansson (1):
arm64: enable more compressed Image formats
Peter Zijlstra (27):
atomic: Prepare generic atomic implementation for logic ops
alpha: Provide atomic_{or,xor,and}
arc: Provide atomic_{or,xor,and}
arm: Provide atomic_{or,xor,and}
arm64: Provide atomic_{or,xor,and}
avr32: Provide atomic_{or,xor,and}
blackfin: Provide atomic_{or,xor,and}
hexagon: Provide atomic_{or,xor,and}
ia64: Provide atomic_{or,xor,and}
m32r: Provide atomic_{or,xor,and}
m68k: Provide atomic_{or,xor,and}
metag: Provide atomic_{or,xor,and}
mips: Provide atomic_{or,xor,and}
mn10300: Provide atomic_{or,xor,and}
parisc: Provide atomic_{or,xor,and}
powerpc: Provide atomic_{or,xor,and}
sh: Provide atomic_{or,xor,and}
sparc: Provide atomic_{or,xor,and}
xtensa: Provide atomic_{or,xor,and}
s390: Provide atomic_{or,xor,and}
x86: Provide atomic_{or,xor,and}
frv: Rewrite atomic implementation
h8300: Provide atomic_{or,xor,and}
atomic: Provide atomic_{or,xor,and}
atomic: Collapse all atomic_{set,clear}_mask definitions
atomic: Replace atomic_{set,clear}_mask() usage
atomic: Add simple atomic_t testsRobin Murphy (3):
arm64: consolidate __swiotlb_mmap
arm64: dma-mapping: implement dma_get_sgtable()
arm64: dma-mapping: Simplify pgprot handling
Rohit Thapliyal (1):
arm64: modify the dump mem for 64 bit addresses
Sudeep Holla (3):
arm64: perf: replace arch_find_n_match_cpu_physical_id with of_cpu_device_node_get
arm64: kernel: remove non-legit DT warnings when booting using ACPI
arm64: restore cpu suspend/resume functionality
Suzuki K. Poulose (2):
arm64: perf: Remove unnecessary printk
arm64: Generalise msr_s/mrs_s operations
Wang Long (1):
arm64: mm: add __init section marker to free_initrd_mem
Will Deacon (41):
arm64: move update_mmu_cache() into asm/pgtable.h
arm64: lib: use pair accessors for copy_*_user routines
arm64: force CONFIG_SMP=y and remove redundant #ifdefs
arm64: alternatives: add enable parameter to conditional asm macros
arm64: include linux/types.h in asm/spinlock_types.h
Merge branch 'locking/arch-atomic' of git://git.kernel.org/.../tip/tip into aarch64/for-next/core
arm64: rwlocks: don't fail trylock purely due to contention
arm64: cpufeature.h: add missing #include of kernel.h
arm64: atomics: move ll/sc atomics into separate header file
arm64: elf: advertise 8.1 atomic instructions as new hwcap
arm64: alternatives: add cpu feature for lse atomics
arm64: introduce CONFIG_ARM64_LSE_ATOMICS as fallback to ll/sc atomics
arm64: atomics: patch in lse instructions when supported by the CPU
arm64: locks: patch in lse instructions when supported by the CPU
arm64: bitops: patch in lse instructions when supported by the CPU
arm64: xchg: patch in lse instructions when supported by the CPU
arm64: cmpxchg: patch in lse instructions when supported by the CPU
arm64: cmpxchg_dbl: patch in lse instructions when supported by the CPU
arm64: cmpxchg: avoid "cc" clobber in ll/sc routines
arm64: cmpxchg: avoid memory barrier on comparison failure
arm64: atomics: tidy up common atomic{,64}_* macros
arm64: atomics: prefetch the destination word for write prior to stxr
arm64: atomics: implement atomic{,64}_cmpxchg using cmpxchg
arm64: atomic64_dec_if_positive: fix incorrect branch condition
arm64: kconfig: select HAVE_CMPXCHG_LOCAL
arm64: lse: rename ARM64_CPU_FEAT_LSE_ATOMICS for consistency
arm64: kconfig: group the v8.1 features together
arm64: lse: use generic cpufeature detection for LSE atomics
arm64: elf: use cpuid_feature_extract_field for hwcap detection
arm64: debug: rename enum debug_el to avoid symbol collision
arm64: spinlock: fix ll/sc unlock on big-endian systems
arm64: pgtable: fix definition of pte_valid
arm64: lse: fix lse cmpxchg code indentation
arm64: alternative: put secondary CPUs into polling loop during patch
arm64: cmpxchg: truncate sub-word signed types before comparison
arm64: alternatives: ensure secondary CPUs execute ISB after patching
arm64: mm: ensure patched kernel text is fetched from PoU
Merge branch 'aarch64/psci/drivers' into aarch64/for-next/core
arm64: mdscr_el1: avoid exposing DCC to userspace
arm64: entry: always restore x0 from the stack on syscall return
arm64: makefile: fix perf_callchain.o kconfig dependency
yalin wang (1):
arm64: insn: use set_fixmap_offset to make it more clear
Documentation/arm64/booting.txt | 11 +- MAINTAINERS | 9 + arch/alpha/include/asm/atomic.h | 42 ++-- arch/arc/include/asm/atomic.h | 8 +- arch/arm/include/asm/atomic.h | 14 ++ arch/arm64/Kconfig | 87 +++++-- arch/arm64/Makefile | 18 +- arch/arm64/boot/Makefile | 12 + arch/arm64/include/asm/acpi.h | 4 +- arch/arm64/include/asm/alternative.h | 78 ++++++- arch/arm64/include/asm/assembler.h | 14 -- arch/arm64/include/asm/atomic.h | 265 +++++----------------- arch/arm64/include/asm/atomic_ll_sc.h | 247 ++++++++++++++++++++ arch/arm64/include/asm/atomic_lse.h | 391 ++++++++++++++++++++++++++++++++ arch/arm64/include/asm/barrier.h | 24 -- arch/arm64/include/asm/bug.h | 64 ++++++ arch/arm64/include/asm/cmpxchg.h | 192 ++++++---------- arch/arm64/include/asm/cpufeature.h | 18 +- arch/arm64/include/asm/cputype.h | 3 - arch/arm64/include/asm/debug-monitors.h | 44 ++-- arch/arm64/include/asm/esr.h | 9 + arch/arm64/include/asm/exception.h | 6 + arch/arm64/include/asm/fixmap.h | 2 +- arch/arm64/include/asm/futex.h | 10 + arch/arm64/include/asm/hardirq.h | 4 - arch/arm64/include/asm/hugetlb.h | 4 - arch/arm64/include/asm/irq_work.h | 11 - arch/arm64/include/asm/lse.h | 53 +++++ arch/arm64/include/asm/memory.h | 8 + arch/arm64/include/asm/mmu.h | 1 - arch/arm64/include/asm/percpu.h | 8 - arch/arm64/include/asm/perf_event.h | 2 +- arch/arm64/include/asm/pgtable-hwdef.h | 3 + arch/arm64/include/asm/pgtable.h | 167 +++++++++++++- arch/arm64/include/asm/processor.h | 2 + arch/arm64/include/asm/psci.h | 28 --- arch/arm64/include/asm/ptrace.h | 4 - arch/arm64/include/asm/smp.h | 4 - arch/arm64/include/asm/smp_plat.h | 2 - arch/arm64/include/asm/spinlock.h | 147 +++++++++--- arch/arm64/include/asm/spinlock_types.h | 2 + arch/arm64/include/asm/sysreg.h | 40 +++- arch/arm64/include/asm/tlb.h | 7 +- arch/arm64/include/asm/tlbflush.h | 76 +++---- arch/arm64/include/asm/topology.h | 9 - arch/arm64/include/asm/traps.h | 23 +- arch/arm64/include/asm/uaccess.h | 11 + arch/arm64/include/uapi/asm/hwcap.h | 1 + arch/arm64/include/uapi/asm/ptrace.h | 1 + arch/arm64/kernel/Makefile | 6 +- arch/arm64/kernel/alternative.c | 30 ++- arch/arm64/kernel/armv8_deprecated.c | 19 +- arch/arm64/kernel/cpu_ops.c | 2 - arch/arm64/kernel/cpufeature.c | 53 ++++- arch/arm64/kernel/debug-monitors.c | 4 +- arch/arm64/kernel/efi-stub.c | 41 +++- arch/arm64/kernel/entry.S | 46 ++-- arch/arm64/kernel/fpsimd.c | 1 + arch/arm64/kernel/head.S | 15 +- arch/arm64/kernel/hw_breakpoint.c | 6 +- arch/arm64/kernel/insn.c | 5 +- arch/arm64/kernel/irq.c | 2 - arch/arm64/kernel/kgdb.c | 12 +- arch/arm64/kernel/pci.c | 13 ++ arch/arm64/kernel/perf_callchain.c | 196 ++++++++++++++++ arch/arm64/kernel/perf_event.c | 310 ++----------------------- arch/arm64/kernel/psci.c | 366 +----------------------------- arch/arm64/kernel/ptrace.c | 92 +++++++- arch/arm64/kernel/setup.c | 87 +++---- arch/arm64/kernel/sleep.S | 14 +- arch/arm64/kernel/smp.c | 15 +- arch/arm64/kernel/time.c | 2 - arch/arm64/kernel/topology.c | 2 +- arch/arm64/kernel/traps.c | 94 ++++++-- arch/arm64/kvm/hyp.S | 12 +- arch/arm64/lib/Makefile | 13 ++ arch/arm64/lib/atomic_ll_sc.c | 3 + arch/arm64/lib/bitops.S | 45 ++-- arch/arm64/lib/clear_user.S | 8 + arch/arm64/lib/copy_from_user.S | 25 +- arch/arm64/lib/copy_in_user.S | 25 +- arch/arm64/lib/copy_to_user.S | 25 +- arch/arm64/mm/cache.S | 7 +- arch/arm64/mm/context.c | 16 -- arch/arm64/mm/dma-mapping.c | 33 +-- arch/arm64/mm/fault.c | 28 ++- arch/arm64/mm/flush.c | 4 - arch/arm64/mm/hugetlbpage.c | 4 - arch/arm64/mm/init.c | 4 +- arch/arm64/mm/mmu.c | 13 +- arch/arm64/mm/proc.S | 21 +- arch/avr32/include/asm/atomic.h | 12 + arch/blackfin/include/asm/atomic.h | 16 +- arch/blackfin/kernel/bfin_ksyms.c | 7 +- arch/blackfin/mach-bf561/atomic.S | 30 +-- arch/blackfin/mach-common/smp.c | 2 +- arch/frv/include/asm/atomic.h | 107 ++++----- arch/frv/include/asm/atomic_defs.h | 172 ++++++++++++++ arch/frv/include/asm/bitops.h | 99 +------- arch/frv/kernel/dma.c | 6 +- arch/frv/kernel/frv_ksyms.c | 5 - arch/frv/lib/Makefile | 2 +- arch/frv/lib/atomic-lib.c | 7 + arch/frv/lib/atomic-ops.S | 110 --------- arch/frv/lib/atomic64-ops.S | 94 -------- arch/h8300/include/asm/atomic.h | 137 +++-------- arch/hexagon/include/asm/atomic.h | 4 + arch/ia64/include/asm/atomic.h | 24 +- arch/m32r/include/asm/atomic.h | 45 +--- arch/m32r/kernel/smp.c | 4 +- arch/m68k/include/asm/atomic.h | 14 +- arch/metag/include/asm/atomic_lnkget.h | 38 +--- arch/metag/include/asm/atomic_lock1.h | 23 +- arch/mips/include/asm/atomic.h | 7 + arch/mn10300/include/asm/atomic.h | 71 +----- arch/mn10300/mm/tlb-smp.c | 2 +- arch/parisc/include/asm/atomic.h | 7 + arch/powerpc/include/asm/atomic.h | 7 + arch/powerpc/kernel/misc_32.S | 19 -- arch/s390/include/asm/atomic.h | 41 ++-- arch/s390/kernel/time.c | 4 +- arch/s390/kvm/interrupt.c | 30 +-- arch/s390/kvm/kvm-s390.c | 32 +-- arch/sh/include/asm/atomic-grb.h | 43 +--- arch/sh/include/asm/atomic-irq.h | 21 +- arch/sh/include/asm/atomic-llsc.h | 31 +-- arch/sparc/include/asm/atomic_32.h | 4 +- arch/sparc/include/asm/atomic_64.h | 4 + arch/sparc/lib/atomic32.c | 22 +- arch/sparc/lib/atomic_64.S | 6 + arch/sparc/lib/ksyms.c | 3 + arch/tile/include/asm/atomic_32.h | 28 +++ arch/tile/include/asm/atomic_64.h | 40 ++++ arch/tile/lib/atomic_32.c | 23 ++ arch/tile/lib/atomic_asm_32.S | 4 + arch/x86/include/asm/atomic.h | 25 +- arch/x86/include/asm/atomic64_32.h | 14 ++ arch/x86/include/asm/atomic64_64.h | 15 ++ arch/xtensa/include/asm/atomic.h | 73 +----- drivers/firmware/Kconfig | 3 + drivers/firmware/Makefile | 1 + drivers/firmware/psci.c | 382 +++++++++++++++++++++++++++++++ drivers/gpu/drm/i915/i915_drv.c | 2 +- drivers/gpu/drm/i915/i915_gem.c | 2 +- drivers/gpu/drm/i915/i915_irq.c | 4 +- drivers/of/fdt.c | 12 +- drivers/s390/scsi/zfcp_aux.c | 2 +- drivers/s390/scsi/zfcp_erp.c | 62 ++--- drivers/s390/scsi/zfcp_fc.c | 8 +- drivers/s390/scsi/zfcp_fsf.c | 26 +-- drivers/s390/scsi/zfcp_qdio.c | 14 +- include/asm-generic/atomic.h | 11 +- include/asm-generic/atomic64.h | 4 + include/linux/atomic.h | 38 ++-- include/linux/psci.h | 52 +++++ lib/atomic64.c | 3 + lib/atomic64_test.c | 68 ++++-- 157 files changed, 3601 insertions(+), 2536 deletions(-) create mode 100644 arch/arm64/include/asm/atomic_ll_sc.h create mode 100644 arch/arm64/include/asm/atomic_lse.h create mode 100644 arch/arm64/include/asm/bug.h create mode 100644 arch/arm64/include/asm/lse.h delete mode 100644 arch/arm64/include/asm/psci.h create mode 100644 arch/arm64/kernel/perf_callchain.c create mode 100644 arch/arm64/lib/atomic_ll_sc.c create mode 100644 arch/frv/include/asm/atomic_defs.h create mode 100644 arch/frv/lib/atomic-lib.c create mode 100644 drivers/firmware/psci.c create mode 100644 include/linux/psci.h
Quoted 2 lines · Will Deacon
* Hide direct DCC access from userspace
Doesn't this make sense only if DCC is enabled for ARM64? These patches are not part of your patchset:
[v5] ARM64: TTY: hvc_dcc: Add support for ARM64 dcc [v3] hvc_dcc: don't ignore errors during initialization
Signature · 3 lines
Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
Quoted 9 lines · Timur Tabi
Quoted 2 lines · Will Deacon
* Hide direct DCC access from userspace
Doesn't this make sense only if DCC is enabled for ARM64? These patches are not part of your patchset:
[v5] ARM64: TTY:
hvc_dcc: Add support for ARM64 dcc [v3]hvc_dcc: don't ignore errors during initialization
Those patches should go via the usual route for tty changes (i.e. Greg). I merged the arm64 change here because it (a) makes sense as a standalone patch and (b) is a dependency for your other stuff.
Will
Quoted 6 lines · Will Deacon
Quoted 2 lines
[v5] ARM64: TTY:
hvc_dcc: Add support for ARM64 dcc [v3]hvc_dcc: don't ignore errors during initializationThose patches should go via the usual route for tty changes (i.e. Greg). I merged the arm64 change here because it (a) makes sense as a standalone patch and (b) is a dependency for your other stuff.
Greg,
Any chance these patches can get into 4.3-rc1?
https://patchwork.kernel.org/patch/7039851/
https://patchwork.kernel.org/patch/7039841/
Quoted 9 lines · Timur Tabi
Quoted 6 lines · Will Deacon
Quoted 2 lines
[v5] ARM64: TTY:
hvc_dcc: Add support for ARM64 dcc [v3]hvc_dcc: don't ignore errors during initializationThose patches should go via the usual route for tty changes (i.e. Greg). I merged the arm64 change here because it (a) makes sense as a standalone patch and (b) is a dependency for your other stuff.
Quoted 6 lines
Greg,
Any chance these patches can get into 4.3-rc1?
https://patchwork.kernel.org/patch/7039851/
https://patchwork.kernel.org/patch/7039841/
My tty/serial tree is long closed and has been merged with Linus last week. And, I don't even see these in my queue, as I don't even know if they were sent to me.
If you want them in, please resend, but note that it will have to wait for 4.4-rc1.
thanks,
greg k-h