[GIT PULL] arm64: updates for 4.15

From: Will Deacon
Date: Tue Nov 14 2017 - 15:13:17 EST


Hi Linus,

Please pull the following arm64 updates for 4.15. As per usual, there is a
summary in the tag, but the big highlight is support for the Scalable Vector
Extension (SVE) which required extensive ABI work to ensure we don't break
existing applications by blowing away their signal stack with the rather large
new vector context (<= 2 kbit per vector register). There's further work to
be done optimising things like exception return, but the ABI is solid now.

Much of the line count comes from some new PMU drivers we have, but they're
pretty self-contained and I suspect we'll have more of them in future.

Finally, there are a few small conflicts that have been addressed in -next, but
I've also included my resolution below [1].

Cheers,

Will

[1]:

diff --cc arch/arm64/Kconfig
index 6205f52,df296b7..e6fa0f5
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@@ -21,25 -21,8 +21,25 @@@ config ARM6
select ARCH_HAS_STRICT_KERNEL_RWX
select ARCH_HAS_STRICT_MODULE_RWX
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
- select ARCH_HAVE_NMI_SAFE_CMPXCHG if ACPI_APEI_SEA
+ select ARCH_HAVE_NMI_SAFE_CMPXCHG
+ select ARCH_INLINE_READ_LOCK if !PREEMPT
+ select ARCH_INLINE_READ_LOCK_BH if !PREEMPT
+ select ARCH_INLINE_READ_LOCK_IRQ if !PREEMPT
+ select ARCH_INLINE_READ_LOCK_IRQSAVE if !PREEMPT
+ select ARCH_INLINE_READ_UNLOCK if !PREEMPT
+ select ARCH_INLINE_READ_UNLOCK_BH if !PREEMPT
+ select ARCH_INLINE_READ_UNLOCK_IRQ if !PREEMPT
+ select ARCH_INLINE_READ_UNLOCK_IRQRESTORE if !PREEMPT
+ select ARCH_INLINE_WRITE_LOCK if !PREEMPT
+ select ARCH_INLINE_WRITE_LOCK_BH if !PREEMPT
+ select ARCH_INLINE_WRITE_LOCK_IRQ if !PREEMPT
+ select ARCH_INLINE_WRITE_LOCK_IRQSAVE if !PREEMPT
+ select ARCH_INLINE_WRITE_UNLOCK if !PREEMPT
+ select ARCH_INLINE_WRITE_UNLOCK_BH if !PREEMPT
+ select ARCH_INLINE_WRITE_UNLOCK_IRQ if !PREEMPT
+ select ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE if !PREEMPT
select ARCH_USE_CMPXCHG_LOCKREF
+ select ARCH_USE_QUEUED_RWLOCKS
select ARCH_SUPPORTS_MEMORY_FAILURE
select ARCH_SUPPORTS_ATOMIC_RMW
select ARCH_SUPPORTS_NUMA_BALANCING
diff --cc arch/arm64/kernel/fpsimd.c
index 5d547de,931fd8d..143b3e7
--- a/arch/arm64/kernel/fpsimd.c
+++ b/arch/arm64/kernel/fpsimd.c
@@@ -442,6 -1296,6 +1296,6 @@@ static int __init fpsimd_init(void
if (!(elf_hwcap & HWCAP_ASIMD))
pr_notice("Advanced SIMD is not implemented\n");

- return 0;
+ return sve_sysctl_init();
}
-late_initcall(fpsimd_init);
+core_initcall(fpsimd_init);
diff --cc drivers/acpi/arm64/iort.c
index de56394,7dc964f..95255ec
--- a/drivers/acpi/arm64/iort.c
+++ b/drivers/acpi/arm64/iort.c
@@@ -1215,7 -1326,7 +1357,8 @@@ static void __init iort_init_platform_d
struct acpi_table_iort *iort;
struct fwnode_handle *fwnode;
int i, ret;
+ bool acs_enabled = false;
+ const struct iort_dev_config *ops;

/*
* iort_table and iort both point to the start of IORT table, but
@@@ -1235,12 -1346,8 +1378,11 @@@
return;
}

+ if (!acs_enabled)
+ acs_enabled = iort_enable_acs(iort_node);
+
- if ((iort_node->type == ACPI_IORT_NODE_SMMU) ||
- (iort_node->type == ACPI_IORT_NODE_SMMU_V3)) {
-
+ ops = iort_get_dev_cfg(iort_node);
+ if (ops) {
fwnode = acpi_alloc_fwnode_static();
if (!fwnode)
return;
diff --cc drivers/perf/Makefile
index 9402dc8,4f5815d..710a013
--- a/drivers/perf/Makefile
+++ b/drivers/perf/Makefile
@@@ -1,6 -1,6 +1,7 @@@
+# SPDX-License-Identifier: GPL-2.0
obj-$(CONFIG_ARM_PMU) += arm_pmu.o arm_pmu_platform.o
obj-$(CONFIG_ARM_PMU_ACPI) += arm_pmu_acpi.o
+ obj-$(CONFIG_HISI_PMU) += hisilicon/
obj-$(CONFIG_QCOM_L2_PMU) += qcom_l2_pmu.o
obj-$(CONFIG_QCOM_L3_PMU) += qcom_l3_pmu.o
obj-$(CONFIG_XGENE_PMU) += xgene_pmu.o

--->8

The following changes since commit 9e66317d3c92ddaab330c125dfe9d06eee268aff:

Linux 4.14-rc3 (2017-10-01 14:54:54 -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 6cfa7cc46b1a7a15d81d5389c99cfca633c12b8e:

arm64: Make ARMV8_DEPRECATED depend on SYSCTL (2017-11-13 16:05:55 +0000)

----------------------------------------------------------------
arm64 updates for 4.15

Plenty of acronym soup here:

- Initial support for the Scalable Vector Extension (SVE)
- Improved handling for SError interrupts (required to handle RAS events)
- Enable GCC support for 128-bit integer types
- Remove kernel text addresses from backtraces and register dumps
- Use of WFE to implement long delay()s
- ACPI IORT updates from Lorenzo Pieralisi
- Perf PMU driver for the Statistical Profiling Extension (SPE)
- Perf PMU driver for Hisilicon's system PMUs
- Misc cleanups and non-critical fixes

----------------------------------------------------------------
Arvind Yadav (1):
acpi/arm64: pr_err() strings should end with newlines

Ben Hutchings (1):
arm64: elf.h: Correct comment about READ_IMPLIES_EXEC propagation

Catalin Marinas (1):
arm64: Implement arch-specific pte_access_permitted()

Dave Martin (30):
arm64: asm-bug: Renumber macro local labels to avoid clashes
regset: Add support for dynamically sized regsets
arm64: fpsimd: Correctly annotate exception helpers called from asm
arm64: signal: Verify extra data is user-readable in sys_rt_sigreturn
arm64: KVM: Hide unsupported AArch64 CPU features from guests
arm64: efi: Add missing Kconfig dependency on KERNEL_MODE_NEON
arm64: Port deprecated instruction emulation to new sysctl interface
arm64: fpsimd: Simplify uses of {set,clear}_ti_thread_flag()
arm64/sve: System register and exception syndrome definitions
arm64/sve: Low-level SVE architectural state manipulation functions
arm64/sve: Kconfig update and conditional compilation support
arm64/sve: Signal frame and context structure definition
arm64/sve: Low-level CPU setup
arm64/sve: Core task context handling
arm64/sve: Support vector length resetting for new processes
arm64/sve: Signal handling support
arm64/sve: Backend logic for setting the vector length
arm64: cpufeature: Move sys_caps_initialised declarations
arm64/sve: Probe SVE capabilities and usable vector lengths
arm64/sve: Preserve SVE registers around kernel-mode NEON use
arm64/sve: Preserve SVE registers around EFI runtime service calls
arm64/sve: ptrace and ELF coredump support
arm64/sve: Add prctl controls for userspace vector length management
arm64/sve: Add sysctl to set the default vector length for new processes
arm64/sve: KVM: Prevent guests from using SVE
arm64/sve: KVM: Treat guest SVE use as undefined instruction execution
arm64/sve: KVM: Hide SVE from CPU features exposed to guests
arm64/sve: Detect SVE and activate runtime support
arm64/sve: Add documentation
arm64: Make ARMV8_DEPRECATED depend on SYSCTL

Hanjun Guo (3):
ACPI/IORT: Look up IORT node through struct fwnode_handle pointer
ACPI/IORT: Enable special index ITS group mappings for IORT nodes
ACPI/IORT: Add SMMUv3 specific special index mapping handling

James Morse (8):
arm64: explicitly mask all exceptions
arm64: introduce an order for exceptions
arm64: Move the async/fiq helpers to explicitly set process context flags
arm64: Mask all exceptions during kernel_exit
arm64: entry.S: Remove disable_dbg
arm64: entry.S: convert el1_sync
arm64: entry.S convert el0_sync
arm64: entry.S: convert elX_irq

Jason A. Donenfeld (2):
arm64: support __int128 on gcc 5+
arm64: Implement __lshrti3 library function

Julien Thierry (8):
arm_arch_timer: Expose event stream status
arm64: use WFE for long delays
arm64: Update fault_info table with new exception types
irqdesc: Add function to identify percpu_devid irqs
arm/arm64: pmu: Distinguish percpu irq and percpu_devid irq
arm64: Use existing defines for mdscr
arm64: Fix single stepping in kernel traps
arm64: Fix static use of function graph

Kees Cook (1):
arm64: Always use REFCOUNT_FULL

Lorenzo Pieralisi (4):
ACPI/IORT: Remove leftover ACPI_IORT_SMMU_V3_PXM_VALID guard
ACPI/IORT: Improve functions return type/storage class specifier indentation
ACPI/IORT: Make platform devices initialization code SMMU agnostic
ACPI/IORT: Enable SMMUv3/PMCG IORT MSI domain set-up

Mark Rutland (4):
arm64: consistently log boot/secondary CPU IDs
arm64: docs: describe ELF hwcaps
arm64: consistently log ESR and page table
arm64: vdso: fix clock_getres for 4GiB-aligned res

Mark Salyzyn (1):
arm64: Avoid aligning normal memory pointers in __memcpy_{to,from}io

Masahiro Yamada (1):
arm64: remove unneeded copy to init_utsname()->machine

Matthieu CASTET (1):
dma mapping : export caller to vmallocinfo

Neil Leeder (1):
perf: qcom_l2_pmu: add event names

Nick Desaulniers (1):
arm64: prevent regressions in compressed kernel image size when upgrading to binutils 2.27

Shaokun Zhang (7):
drivers/perf: arm_pmu_acpi: drop redundant acpi_disabled check
Documentation: perf: hisi: Documentation for HiSilicon SoC PMU driver
perf: hisi: Add support for HiSilicon SoC uncore PMU driver
perf: hisi: Add support for HiSilicon SoC L3C PMU driver
perf: hisi: Add support for HiSilicon SoC HHA PMU driver
perf: hisi: Add support for HiSilicon SoC DDRC PMU driver
arm64: MAINTAINERS: hisi: Add HiSilicon SoC PMU support

Stephen Boyd (1):
arm64: Unconditionally support {ARCH_}HAVE_NMI{_SAFE_CMPXCHG}

Suzuki K Poulose (4):
arm64: Expose support for optional ARMv8-A features
arm64: Fix the feature type for ID register fields
perf: arm_spe: Prevent module unload while the PMU is in use
arm-ccn: perf: Prevent module unload while PMU is in use

Thomas Meyer (1):
arm64: dma-mapping: Cocci spatch "vma_pages"

Will Deacon (14):
arm64: mm: Remove useless and wrong comments from fault.c
Merge tag 'acpi/iort-for-v4.15' of git://git.kernel.org/.../lpieralisi/linux into aarch64/for-next/core
genirq: export irq_get_percpu_devid_partition to modules
perf/core: Export AUX buffer helpers to modules
perf/core: Add PERF_AUX_FLAG_COLLISION to report colliding samples
arm64: sysreg: Move SPE registers and PSB into common header files
arm64: head: Init PMSCR_EL2.{PA,PCT} when entered at EL2 without VHE
dt-bindings: Document devicetree binding for ARM SPE
drivers/perf: Add support for ARMv8.2 Statistical Profiling Extension
Merge branch 'for-next/perf' into aarch64/for-next/core
arm64: traps: Don't print stack or raw PC/LR values in backtraces
arm64: traps: Pretty-print pstate in register dumps
arm64: uapi: Remove PSR_Q_BIT
arm64: Don't walk page table for user faults in do_mem_abort

Xie XiuQi (1):
arm64: entry.S: move SError handling into a C function for future expansion

Yisheng Xie (1):
arm64: suspend: remove useless included file

Yury Norov (2):
arm64: move TASK_* definitions to <asm/processor.h>
arm64: fix documentation on kernel pages mappings to HYP VA

Documentation/arm64/cpu-feature-registers.txt | 18 +-
Documentation/arm64/elf_hwcaps.txt | 160 +++
Documentation/arm64/memory.txt | 10 +-
Documentation/arm64/sve.txt | 508 +++++++++
Documentation/devicetree/bindings/arm/spe-pmu.txt | 20 +
Documentation/perf/hisi-pmu.txt | 53 +
MAINTAINERS | 7 +
arch/arm/include/asm/arch_timer.h | 1 +
arch/arm/include/asm/kvm_host.h | 3 +
arch/arm64/Kconfig | 18 +-
arch/arm64/Makefile | 10 +-
arch/arm64/include/asm/arch_timer.h | 1 +
arch/arm64/include/asm/asm-bug.h | 8 +-
arch/arm64/include/asm/assembler.h | 51 +-
arch/arm64/include/asm/barrier.h | 2 +
arch/arm64/include/asm/cpu.h | 4 +
arch/arm64/include/asm/cpucaps.h | 3 +-
arch/arm64/include/asm/cpufeature.h | 42 +
arch/arm64/include/asm/daifflags.h | 72 ++
arch/arm64/include/asm/elf.h | 4 +-
arch/arm64/include/asm/esr.h | 3 +-
arch/arm64/include/asm/fpsimd.h | 71 +-
arch/arm64/include/asm/fpsimdmacros.h | 148 +++
arch/arm64/include/asm/irqflags.h | 40 +-
arch/arm64/include/asm/kvm_arm.h | 5 +-
arch/arm64/include/asm/kvm_host.h | 11 +
arch/arm64/include/asm/memory.h | 15 -
arch/arm64/include/asm/pgtable.h | 14 +
arch/arm64/include/asm/processor.h | 28 +
arch/arm64/include/asm/sysreg.h | 121 ++
arch/arm64/include/asm/thread_info.h | 5 +
arch/arm64/include/asm/traps.h | 8 +
arch/arm64/include/uapi/asm/hwcap.h | 6 +
arch/arm64/include/uapi/asm/ptrace.h | 139 ++-
arch/arm64/include/uapi/asm/sigcontext.h | 120 +-
arch/arm64/kernel/Makefile | 2 -
arch/arm64/kernel/armv8_deprecated.c | 23 +-
arch/arm64/kernel/cpufeature.c | 204 ++--
arch/arm64/kernel/cpuinfo.c | 12 +
arch/arm64/kernel/debug-monitors.c | 5 +-
arch/arm64/kernel/entry-fpsimd.S | 17 +
arch/arm64/kernel/entry-ftrace.S | 12 +-
arch/arm64/kernel/entry.S | 128 ++-
arch/arm64/kernel/fpsimd.c | 908 ++++++++++++++-
arch/arm64/kernel/head.S | 30 +-
arch/arm64/kernel/hibernate.c | 5 +-
arch/arm64/kernel/io.c | 12 +-
arch/arm64/kernel/machine_kexec.c | 4 +-
arch/arm64/kernel/process.c | 64 +-
arch/arm64/kernel/ptrace.c | 280 ++++-
arch/arm64/kernel/setup.c | 15 +-
arch/arm64/kernel/signal.c | 179 ++-
arch/arm64/kernel/signal32.c | 2 +-
arch/arm64/kernel/smp.c | 18 +-
arch/arm64/kernel/suspend.c | 8 +-
arch/arm64/kernel/traps.c | 109 +-
arch/arm64/kernel/vdso/gettimeofday.S | 2 +-
arch/arm64/kvm/handle_exit.c | 8 +
arch/arm64/kvm/hyp/debug-sr.c | 24 +-
arch/arm64/kvm/hyp/switch.c | 12 +-
arch/arm64/kvm/sys_regs.c | 292 ++++-
arch/arm64/lib/Makefile | 2 +-
arch/arm64/lib/delay.c | 23 +-
arch/arm64/lib/tishift.S | 80 ++
arch/arm64/mm/dma-mapping.c | 5 +-
arch/arm64/mm/fault.c | 72 +-
arch/arm64/mm/proc.S | 9 +-
drivers/acpi/arm64/gtdt.c | 2 +-
drivers/acpi/arm64/iort.c | 258 ++++-
drivers/bus/arm-ccn.c | 1 +
drivers/clocksource/arm_arch_timer.c | 25 +-
drivers/perf/Kconfig | 15 +
drivers/perf/Makefile | 2 +
drivers/perf/arm_pmu.c | 10 +-
drivers/perf/arm_pmu_acpi.c | 3 -
drivers/perf/arm_pmu_platform.c | 4 +-
drivers/perf/arm_spe_pmu.c | 1249 +++++++++++++++++++++
drivers/perf/hisilicon/Makefile | 1 +
drivers/perf/hisilicon/hisi_uncore_ddrc_pmu.c | 463 ++++++++
drivers/perf/hisilicon/hisi_uncore_hha_pmu.c | 473 ++++++++
drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c | 463 ++++++++
drivers/perf/hisilicon/hisi_uncore_pmu.c | 447 ++++++++
drivers/perf/hisilicon/hisi_uncore_pmu.h | 102 ++
drivers/perf/qcom_l2_pmu.c | 54 +
fs/binfmt_elf.c | 10 +-
include/clocksource/arm_arch_timer.h | 10 +-
include/linux/acpi_iort.h | 4 +-
include/linux/cpuhotplug.h | 3 +
include/linux/irqdesc.h | 8 +
include/linux/regset.h | 67 +-
include/uapi/linux/elf.h | 1 +
include/uapi/linux/perf_event.h | 1 +
include/uapi/linux/prctl.h | 9 +
kernel/events/ring_buffer.c | 4 +
kernel/irq/irqdesc.c | 1 +
kernel/sys.c | 12 +
virt/kvm/arm/arm.c | 3 +
97 files changed, 7399 insertions(+), 601 deletions(-)
create mode 100644 Documentation/arm64/elf_hwcaps.txt
create mode 100644 Documentation/arm64/sve.txt
create mode 100644 Documentation/devicetree/bindings/arm/spe-pmu.txt
create mode 100644 Documentation/perf/hisi-pmu.txt
create mode 100644 arch/arm64/include/asm/daifflags.h
create mode 100644 arch/arm64/lib/tishift.S
create mode 100644 drivers/perf/arm_spe_pmu.c
create mode 100644 drivers/perf/hisilicon/Makefile
create mode 100644 drivers/perf/hisilicon/hisi_uncore_ddrc_pmu.c
create mode 100644 drivers/perf/hisilicon/hisi_uncore_hha_pmu.c
create mode 100644 drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c
create mode 100644 drivers/perf/hisilicon/hisi_uncore_pmu.c
create mode 100644 drivers/perf/hisilicon/hisi_uncore_pmu.h