arm64: updates for 4.7
Subsystems (5)
Hi Linus,
Here's the arm64 queue for 4.7 -- the highlights are detailed in the tag.
There are a few changes here outside of arch/arm64/ as a result of dependencies (all acked by the relevant maintainers), but these have generated some conflicts in linux-next:
1. KVM: There is a conflict in arch/arm/kvm/arm.c with mainline (06a71a24bae5). The resolution is small, but slightly confusing, since the conflict is around a register_cpu_notifier and the resolution removes the corresponding unregister_cpu_notifier.
2. Xen: Minor conflict due to everybody changing their initialisation order in setup_arch.
3. EFI: Minor conflict with removal of global 'memmap' symbol
4. Irqchip: Churn in the GIC driver (ARM's interrupt controller) conflicting with the rework of our CPU feature interface, which is used to detect broken firmware/hardware.
I've included the resolutions from linux-next in order below. The pull request follows the resolutions.
Thanks,
Will
--->8
arch/arm/kvm/arm.c +0 -0
@@@ -1198,8 -1226,6 +1233,7 @@@ static void teardown_hyp_mode(voidfree_hyp_pgds ();for_each_possible_cpu (cpu)free_page (per_cpu (kvm_arm_hyp_stack_page, cpu)); -unregister_cpu_notifier (&hyp_init_cpu_nb); +hyp_cpu_pm_exit (); }static int init_vhe_mode (void )
--->8
arch/arm64/kernel/setup.c +0 -0
@@@ -277,13 -336,13 +278,11 @@@ void __init setup_arch(char **cmdline_pearly_ioremap_reset (); - if (acpi_disabled) { -unflatten_device_tree (); + if (acpi_disabled)psci_dt_init (); - } else { + else psci_acpi_init(); - } - xen_early_init(); - cpu_read_bootcpu_ops();smp_init_cpus ();smp_build_mpidr_hash ();
--->8
drivers/firmware/efi/arm-init.c +0 -0
@@@ -143,15 -178,7 +178,15 @@@ static __init void reserve_regions(voidif (efi_enabled (EFI_DBG ))pr_info ("Processing EFI memory map:\n" ); +/* + * Discard memblocks discovered so far: if there are any at this + * point, they originate from memory nodes in the DT, and UEFI + * uses its own memory map instead. + */ +memblock_dump_all (); +memblock_remove (0 , (phys_addr_t )ULLONG_MAX ); + - for_each_efi_memory_desc(&memmap, md) { + for_each_efi_memory_desc(md) { paddr = md->phys_addr; npages = md->num_pages;
--->8
drivers/irqchip/irq-gic.c +0 -0
@@@ -489,8 -486,9 +486,10 @@@ static int gic_cpu_init(struct gic_chip/* * Get what the GIC says our CPU mask is. */ -BUG_ON (cpu >=NR_GIC_CPU_IF ); +if (WARN_ON (cpu >=NR_GIC_CPU_IF )) +return -EINVAL ; + +gic_check_cpu_features (); cpu_mask =gic_get_cpumask (gic); gic_cpu_map[cpu] = cpu_mask; .unmap = gic_irq_domain_unmap, }; -static void __init __gic_init_bases (unsigned int gic_nr,int irq_start, -void __iomem *dist_base,void __iomem *cpu_base, -u32 percpu_offset,struct fwnode_handle *handle) +static int __init __gic_init_bases (struct gic_chip_data *gic,int irq_start, +struct fwnode_handle *handle) {irq_hw_number_t hwirq_base; -struct gic_chip_data *gic; -int gic_irqs, irq_base, i; - -BUG_ON (gic_nr >=CONFIG_ARM_GIC_MAX_NR ); +int gic_irqs, irq_base, i, ret; - gic = &gic_data[gic_nr]; +if (WARN_ON (!gic || gic->domain)) +return -EINVAL ; -gic_check_cpu_features (); -/* Initialize irq_chip */ - if (static_key_true(&supports_deactivate) && gic_nr == 0) { - gic->chip = gic_eoimode1_chip; + gic->chip = gic_chip; + +if (static_key_true (&supports_deactivate) && gic == &gic_data[0 ]) { + gic->chip.irq_mask = gic_eoimode1_mask_irq; + gic->chip.irq_eoi = gic_eoimode1_eoi_irq; + gic->chip.irq_set_vcpu_affinity = gic_irq_set_vcpu_affinity; + gic->chip.name =kasprintf (GFP_KERNEL ,"GICv2" ); }else { - gic->chip = gic_chip; - gic->chip.name =kasprintf (GFP_KERNEL ,"GIC-%d" , gic_nr); + gic->chip.name =kasprintf (GFP_KERNEL ,"GIC-%d" , + (int )(gic - &gic_data[0 ])); }#ifdef CONFIG_SMP
--->8
The following changes since commit bf16200689118d19de1b8d2a3c314fc21f5dc7bb:
Linux 4.6-rc3 (2016-04-10 17:58:30 -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 e6d9a52543338603e25e71e0e4942f05dae0dd8a:
arm64: do not enforce strict 16 byte alignment to stack pointer (2016-05-12 14:20:49 +0100)
----------------------------------------------------------------
arm64 updates for 4.7:
- virt_to_page/page_address optimisations
- Support for NUMA systems described using device-tree
- Support for hibernate/suspend-to-disk
- Proper support for maxcpus= command line parameter
- Detection and graceful handling of AArch64-only CPUs
- Miscellaneous cleanups and non-critical fixes
----------------------------------------------------------------
AKASHI Takahiro (1):
arm64: kvm: allows kvm cpu hotplug
Anna-Maria Gleixner (2):
arm64/debug: Remove superfluous SMP function call
arm64: hw-breakpoint: Remove superfluous SMP function call
Ard Biesheuvel (30):
arm64/mm: ensure memstart_addr remains sufficiently aligned
arm64: choose memstart_addr based on minimum sparsemem section alignment Revert "arm64: account for sparsemem section alignment when choosing vmemmap offset"
arm64: add the initrd region to the linear mapping explicitly
arm64: remove the now unneeded relocate_initrd()
arm64: vdso: avoid virt_to_page() translations on kernel symbols
arm64: mm: free __init memory via the linear mapping
arm64: mm: avoid virt_to_page() translation for the zero page
arm64: insn: avoid virt_to_page() translations on core kernel symbols
arm64: mm: move vmemmap region right below the linear region
arm64: mm: restrict virt_to_page() to the linear mapping
arm64: use 'segment' rather than 'chunk' to describe mapped kernel regions
arm64: move early boot code to the .init segment
arm64: cover the .head.text section in the .text segment mapping
arm64: simplify kernel segment mapping granularity
efi: ARM/arm64: ignore DT memory nodes instead of removing them
nios2: use correct void* return type for page_to_virt()
openrisc: drop wrongly typed definition of page_to_virt()
mm: replace open coded page to virt conversion with page_to_virt()
arm64: ptdump: use static initializers for vmemmap region boundaries
arm64: ptdump: add region marker for kasan shadow region
arm64: kernel: don't export local symbols from head.S
arm64: kernel: use literal for relocated address of __secondary_switched
arm64: kernel: perform relocation processing from ID map
arm64: introduce mov_q macro to move a constant into a 64-bit register
arm64: kernel: replace early 64-bit literal loads with move-immediates
arm64: don't map TEXT_OFFSET bytes below the kernel if we can avoid it
arm64: relocatable: deal with physically misaligned kernel images
arm64: acpi: add acpi=on cmdline option to prefer ACPI boot over DT
arm64: kaslr: increase randomization granularity
Arnd Bergmann (1):
efi: ARM: avoid warning about phys_addr_t cast
Catalin Marinas (5):
arm64: Implement ptep_set_access_flags() for hardware AF/DBM
arm64: Fix typo in the pmdp_huge_get_and_clear() definition
arm64: Implement pmdp_set_access_flags() for hardware AF/DBM
arm64: Replace hard-coded values in the pmd/pud_bad() macros
arm64: Ensure pmd_present() returns false after pmd_mknotpresent()
Colin Ian King (1):
arm64: do not enforce strict 16 byte alignment to stack pointer
David Daney (2):
of, numa: Add NUMA of binding implementation.
arm64: Move unflatten_device_tree() call earlier.
Ezequiel Garcia (1):
arm64: kconfig: drop CONFIG_RTC_LIB dependency
Ganapatrao Kulkarni (3):
Documentation, dt, numa: dt bindings for NUMA. arm64, numa: Add NUMA support for arm64 platforms. arm64, mm, numa: Add NUMA balancing support for arm64.
Geoff Levand (4):
arm64: Fold proc-macros.S into assembler.h
arm64: Cleanup SCTLR flags
arm64: hyp/kvm: Make hyp-stub extensible
arm64: Add new asm macro copy_page
Huang Shijie (1):
arm64: mm: remove the redundant code
James Morse (11):
arm64: mm: Add trace_irqflags annotations to do_debug_exception()
arm64: kvm: Move lr save/restore from do_el2_call into EL1
arm64: hyp/kvm: Make hyp-stub reject kvm_call_hyp()
arm64: kernel: Rework finisher callback out of __cpu_suspend_enter()
arm64: Change cpu_resume() to enable mmu early then access sleep_sp by va
arm64: kernel: Include _AC definition in page.h
arm64: Promote KERNEL_START/KERNEL_END definitions to a header file PM / Hibernate: Call flush_icache_range() on pages restored in-place
arm64: kernel: Add support for hibernate/suspend-to-disk
arm64: hibernate: Refuse to hibernate if the boot cpu is offline
arm64: kvm: Fix kvm teardown for systems using the extended idmap
Jan Glauber (1):
arm64: Reduce verbosity on SMP CPU stop
Jisheng Zhang (1):
arm64: cpuidle: make arm_cpuidle_suspend() a bit more efficient
Julien Grall (1):
arm64: cpuinfo: Missing NULL terminator in compat_hwcap_str
Kees Cook (1):
arm64: kernel: Fix incorrect brk randomization
Kefeng Wang (3):
arm64: cpufeature: append additional id_aa64mmfr2 fields to cpufeature
arm64: mm: make pr_cont() per line in Virtual kernel memory layout
arm64: mm: Show bss segment in kernel memory layout
Marc Zyngier (2):
arm64: Allow a capability to be checked on a single CPU irqchip/gic: Restore CPU interface checking
Mark Rutland (2):
arm64: asm: remove unused push/pop macros
arm64: make dt_scan_depth1_nodes more readable
Robin Murphy (2):
arm64/dma-mapping: Extend DMA ops workaround to PCI devices arm64/dma-mapping: Remove default domain workaround
Shannon Zhao (1):
ARM64: ACPI: Check if it runs on Xen to enable or disable ACPI
Suzuki K Poulose (12):
arm64: Add cpu_panic_kernel helper
arm64: vhe: Verify CPU Exception Levels
arm64: hwcaps: Cleanup naming
arm64: HWCAP: Split COMPAT HWCAP table entries
arm64: Add helpers for detecting AArch32 support at EL0
arm64: cpufeature: Check availability of AArch32
arm64: cpufeature: Track 32bit EL0 support
arm64: compat: Check for AArch32 state
arm64: cpufeature: Add scope for capability check
arm64: Verify CPU errata work arounds on hotplugged CPU
arm64: Fix behavior of maxcpus=N
arm64: secondary_start_kernel: Remove unnecessary barrier
Will Deacon (1):
arm64: make ARCH_SUPPORTS_DEBUG_PAGEALLOC depend on !HIBERNATION
Yang Shi (3):
arm64: Kconfig: remove redundant HAVE_ARCH_TRANSPARENT_HUGEPAGE definition
arm64: always use STRICT_MM_TYPECHECKS
arm64: mm: remove unnecessary EXPORT_SYMBOL_GPL
Documentation/arm64/booting.txt | 4 + Documentation/devicetree/bindings/numa.txt | 275 ++++++++++++++++ Documentation/kernel-parameters.txt | 6 +- arch/arm/include/asm/kvm_host.h | 10 +- arch/arm/include/asm/kvm_mmu.h | 1 + arch/arm/kvm/arm.c | 119 ++++--- arch/arm/kvm/mmu.c | 5 + arch/arm64/Kconfig | 45 ++- arch/arm64/Kconfig.debug | 2 +- arch/arm64/include/asm/assembler.h | 133 +++++++- arch/arm64/include/asm/cpufeature.h | 27 +- arch/arm64/include/asm/elf.h | 3 +- arch/arm64/include/asm/kernel-pgtable.h | 21 +- arch/arm64/include/asm/kvm_arm.h | 11 - arch/arm64/include/asm/kvm_asm.h | 3 + arch/arm64/include/asm/kvm_host.h | 14 +- arch/arm64/include/asm/kvm_mmu.h | 1 + arch/arm64/include/asm/memory.h | 33 +- arch/arm64/include/asm/mmu.h | 1 + arch/arm64/include/asm/mmzone.h | 12 + arch/arm64/include/asm/numa.h | 45 +++ arch/arm64/include/asm/page.h | 2 + arch/arm64/include/asm/pgtable-hwdef.h | 1 - arch/arm64/include/asm/pgtable-types.h | 32 -- arch/arm64/include/asm/pgtable.h | 62 ++-- arch/arm64/include/asm/smp.h | 11 + arch/arm64/include/asm/suspend.h | 32 +- arch/arm64/include/asm/sysreg.h | 24 +- arch/arm64/include/asm/topology.h | 10 + arch/arm64/include/asm/virt.h | 22 ++ arch/arm64/kernel/Makefile | 1 + arch/arm64/kernel/acpi.c | 33 +- arch/arm64/kernel/asm-offsets.c | 10 +- arch/arm64/kernel/cpu_errata.c | 24 +- arch/arm64/kernel/cpufeature.c | 343 ++++++++++++-------- arch/arm64/kernel/cpuidle.c | 9 +- arch/arm64/kernel/cpuinfo.c | 40 +-- arch/arm64/kernel/debug-monitors.c | 3 +- arch/arm64/kernel/efi-entry.S | 2 +- arch/arm64/kernel/head.S | 165 +++++----- arch/arm64/kernel/hibernate-asm.S | 176 +++++++++++ arch/arm64/kernel/hibernate.c | 487 +++++++++++++++++++++++++++++ arch/arm64/kernel/hw_breakpoint.c | 8 +- arch/arm64/kernel/hyp-stub.S | 45 ++- arch/arm64/kernel/image.h | 2 + arch/arm64/kernel/insn.c | 2 +- arch/arm64/kernel/kaslr.c | 6 +- arch/arm64/kernel/pci.c | 10 + arch/arm64/kernel/process.c | 18 +- arch/arm64/kernel/setup.c | 81 +---- arch/arm64/kernel/sleep.S | 157 ++++------ arch/arm64/kernel/smp.c | 78 +++-- arch/arm64/kernel/suspend.c | 102 +++--- arch/arm64/kernel/sys.c | 10 + arch/arm64/kernel/vdso.c | 4 +- arch/arm64/kernel/vmlinux.lds.S | 48 ++- arch/arm64/kvm/handle_exit.c | 7 + arch/arm64/kvm/hyp-init.S | 48 ++- arch/arm64/kvm/hyp.S | 11 +- arch/arm64/kvm/hyp/entry.S | 19 ++ arch/arm64/kvm/hyp/hyp-entry.S | 10 +- arch/arm64/kvm/reset.c | 30 ++ arch/arm64/mm/Makefile | 1 + arch/arm64/mm/cache.S | 2 - arch/arm64/mm/context.c | 3 +- arch/arm64/mm/dma-mapping.c | 56 +--- arch/arm64/mm/dump.c | 52 +-- arch/arm64/mm/fault.c | 87 +++++- arch/arm64/mm/init.c | 112 +++++-- arch/arm64/mm/mm.h | 1 - arch/arm64/mm/mmap.c | 2 - arch/arm64/mm/mmu.c | 24 +- arch/arm64/mm/numa.c | 396 +++++++++++++++++++++++ arch/arm64/mm/proc-macros.S | 98 ------ arch/arm64/mm/proc.S | 56 ++-- arch/nios2/include/asm/io.h | 1 - arch/nios2/include/asm/page.h | 2 +- arch/nios2/include/asm/pgtable.h | 2 +- arch/openrisc/include/asm/page.h | 2 - drivers/firmware/efi/arm-init.c | 8 + drivers/firmware/efi/libstub/arm64-stub.c | 15 +- drivers/firmware/efi/libstub/fdt.c | 24 +- drivers/irqchip/irq-gic.c | 5 +- drivers/of/Kconfig | 3 + drivers/of/Makefile | 1 + drivers/of/of_numa.c | 211 +++++++++++++ include/linux/mm.h | 6 +- include/linux/of.h | 9 + kernel/power/swap.c | 18 ++ 89 files changed, 3127 insertions(+), 1026 deletions(-) create mode 100644 Documentation/devicetree/bindings/numa.txt create mode 100644 arch/arm64/include/asm/mmzone.h create mode 100644 arch/arm64/include/asm/numa.h create mode 100644 arch/arm64/kernel/hibernate-asm.S create mode 100644 arch/arm64/kernel/hibernate.c create mode 100644 arch/arm64/mm/numa.c delete mode 100644 arch/arm64/mm/proc-macros.S create mode 100644 drivers/of/of_numa.c