diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-11-04 17:47:13 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-11-04 17:47:13 -0500 |
commit | 2dc10ad81fc017837037e60439662e1b16bdffb9 (patch) | |
tree | fc2f77874339b2f79499e3b34dc5ecb496b68dfc /arch/arm64/kvm | |
parent | e627078a0cbdc0c391efeb5a2c4eb287328fd633 (diff) | |
parent | f8f8bdc48851da979c6e0e4808b6031122e4af47 (diff) |
Merge tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
Pull arm64 updates from Catalin Marinas:
- "genirq: Introduce generic irq migration for cpu hotunplugged" patch
merged from tip/irq/for-arm to allow the arm64-specific part to be
upstreamed via the arm64 tree
- CPU feature detection reworked to cope with heterogeneous systems
where CPUs may not have exactly the same features. The features
reported by the kernel via internal data structures or ELF_HWCAP are
delayed until all the CPUs are up (and before user space starts)
- Support for 16KB pages, with the additional bonus of a 36-bit VA
space, though the latter only depending on EXPERT
- Implement native {relaxed, acquire, release} atomics for arm64
- New ASID allocation algorithm which avoids IPI on roll-over, together
with TLB invalidation optimisations (using local vs global where
feasible)
- KASan support for arm64
- EFI_STUB clean-up and isolation for the kernel proper (required by
KASan)
- copy_{to,from,in}_user optimisations (sharing the memcpy template)
- perf: moving arm64 to the arm32/64 shared PMU framework
- L1_CACHE_BYTES increased to 128 to accommodate Cavium hardware
- Support for the contiguous PTE hint on kernel mapping (16 consecutive
entries may be able to use a single TLB entry)
- Generic CONFIG_HZ now used on arm64
- defconfig updates
* tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: (91 commits)
arm64/efi: fix libstub build under CONFIG_MODVERSIONS
ARM64: Enable multi-core scheduler support by default
arm64/efi: move arm64 specific stub C code to libstub
arm64: page-align sections for DEBUG_RODATA
arm64: Fix build with CONFIG_ZONE_DMA=n
arm64: Fix compat register mappings
arm64: Increase the max granular size
arm64: remove bogus TASK_SIZE_64 check
arm64: make Timer Interrupt Frequency selectable
arm64/mm: use PAGE_ALIGNED instead of IS_ALIGNED
arm64: cachetype: fix definitions of ICACHEF_* flags
arm64: cpufeature: declare enable_cpu_capabilities as static
genirq: Make the cpuhotplug migration code less noisy
arm64: Constify hwcap name string arrays
arm64/kvm: Make use of the system wide safe values
arm64/debug: Make use of the system wide safe value
arm64: Move FP/ASIMD hwcap handling to common code
arm64/HWCAP: Use system wide safe values
arm64/capabilities: Make use of system wide safe value
arm64: Delay cpu feature capability checks
...
Diffstat (limited to 'arch/arm64/kvm')
-rw-r--r-- | arch/arm64/kvm/Kconfig | 3 | ||||
-rw-r--r-- | arch/arm64/kvm/reset.c | 2 | ||||
-rw-r--r-- | arch/arm64/kvm/sys_regs.c | 12 |
3 files changed, 10 insertions, 7 deletions
diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig index ff5292c6277c..c9d1f34daab1 100644 --- a/arch/arm64/kvm/Kconfig +++ b/arch/arm64/kvm/Kconfig | |||
@@ -22,6 +22,7 @@ config KVM_ARM_VGIC_V3 | |||
22 | config KVM | 22 | config KVM |
23 | bool "Kernel-based Virtual Machine (KVM) support" | 23 | bool "Kernel-based Virtual Machine (KVM) support" |
24 | depends on OF | 24 | depends on OF |
25 | depends on !ARM64_16K_PAGES | ||
25 | select MMU_NOTIFIER | 26 | select MMU_NOTIFIER |
26 | select PREEMPT_NOTIFIERS | 27 | select PREEMPT_NOTIFIERS |
27 | select ANON_INODES | 28 | select ANON_INODES |
@@ -37,6 +38,8 @@ config KVM | |||
37 | select KVM_ARM_VGIC_V3 | 38 | select KVM_ARM_VGIC_V3 |
38 | ---help--- | 39 | ---help--- |
39 | Support hosting virtualized guest machines. | 40 | Support hosting virtualized guest machines. |
41 | We don't support KVM with 16K page tables yet, due to the multiple | ||
42 | levels of fake page tables. | ||
40 | 43 | ||
41 | If unsure, say N. | 44 | If unsure, say N. |
42 | 45 | ||
diff --git a/arch/arm64/kvm/reset.c b/arch/arm64/kvm/reset.c index 91cf5350b328..f34745cb3d23 100644 --- a/arch/arm64/kvm/reset.c +++ b/arch/arm64/kvm/reset.c | |||
@@ -53,7 +53,7 @@ static bool cpu_has_32bit_el1(void) | |||
53 | { | 53 | { |
54 | u64 pfr0; | 54 | u64 pfr0; |
55 | 55 | ||
56 | pfr0 = read_cpuid(ID_AA64PFR0_EL1); | 56 | pfr0 = read_system_reg(SYS_ID_AA64PFR0_EL1); |
57 | return !!(pfr0 & 0x20); | 57 | return !!(pfr0 & 0x20); |
58 | } | 58 | } |
59 | 59 | ||
diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index d03d3af17e7e..87a64e8db04c 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c | |||
@@ -693,13 +693,13 @@ static bool trap_dbgidr(struct kvm_vcpu *vcpu, | |||
693 | if (p->is_write) { | 693 | if (p->is_write) { |
694 | return ignore_write(vcpu, p); | 694 | return ignore_write(vcpu, p); |
695 | } else { | 695 | } else { |
696 | u64 dfr = read_cpuid(ID_AA64DFR0_EL1); | 696 | u64 dfr = read_system_reg(SYS_ID_AA64DFR0_EL1); |
697 | u64 pfr = read_cpuid(ID_AA64PFR0_EL1); | 697 | u64 pfr = read_system_reg(SYS_ID_AA64PFR0_EL1); |
698 | u32 el3 = !!((pfr >> 12) & 0xf); | 698 | u32 el3 = !!cpuid_feature_extract_field(pfr, ID_AA64PFR0_EL3_SHIFT); |
699 | 699 | ||
700 | *vcpu_reg(vcpu, p->Rt) = ((((dfr >> 20) & 0xf) << 28) | | 700 | *vcpu_reg(vcpu, p->Rt) = ((((dfr >> ID_AA64DFR0_WRPS_SHIFT) & 0xf) << 28) | |
701 | (((dfr >> 12) & 0xf) << 24) | | 701 | (((dfr >> ID_AA64DFR0_BRPS_SHIFT) & 0xf) << 24) | |
702 | (((dfr >> 28) & 0xf) << 20) | | 702 | (((dfr >> ID_AA64DFR0_CTX_CMPS_SHIFT) & 0xf) << 20) | |
703 | (6 << 16) | (el3 << 14) | (el3 << 12)); | 703 | (6 << 16) | (el3 << 14) | (el3 << 12)); |
704 | return true; | 704 | return true; |
705 | } | 705 | } |