Commit 95e1c7b1 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'powerpc-5.10-4' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux

Pull powerpc fixes from Michael Ellerman:
 "Some more powerpc fixes for 5.10:

   - regression fix for a boot failure on some 32-bit machines.

   - fix for host crashes in the KVM system reset handling.

   - fix for a possible oops in the KVM XIVE interrupt handling on
     Power9.

   - fix for host crashes triggerable via the KVM emulated MMIO handling
     when running HPT guests.

   - a couple of small build fixes.

  Thanks to Andreas Schwab, Cédric Le Goater, Christophe Leroy, Erhard
  Furtner, Greg Kurz, Greg Kurz, Németh Márton, Nicholas Piggin, Nick
  Desaulniers, Serge Belyshev, and Stephen Rothwell"

* tag 'powerpc-5.10-4' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
  powerpc/64s: Fix allnoconfig build since uaccess flush
  powerpc/64s/exception: KVM Fix for host DSI being taken in HPT guest MMU context
  powerpc: Drop -me200 addition to build flags
  KVM: PPC: Book3S HV: XIVE: Fix possible oops when accessing ESB page
  powerpc/64s: Fix KVM system reset handling when CONFIG_PPC_PSERIES=y
  powerpc/32s: Use relocation offset when setting early hash table
parents e4e94580 b6b79dd5
...@@ -248,7 +248,6 @@ KBUILD_CFLAGS += $(call cc-option,-mno-string) ...@@ -248,7 +248,6 @@ KBUILD_CFLAGS += $(call cc-option,-mno-string)
cpu-as-$(CONFIG_40x) += -Wa,-m405 cpu-as-$(CONFIG_40x) += -Wa,-m405
cpu-as-$(CONFIG_44x) += -Wa,-m440 cpu-as-$(CONFIG_44x) += -Wa,-m440
cpu-as-$(CONFIG_ALTIVEC) += $(call as-option,-Wa$(comma)-maltivec) cpu-as-$(CONFIG_ALTIVEC) += $(call as-option,-Wa$(comma)-maltivec)
cpu-as-$(CONFIG_E200) += -Wa,-me200
cpu-as-$(CONFIG_E500) += -Wa,-me500 cpu-as-$(CONFIG_E500) += -Wa,-me500
# When using '-many -mpower4' gas will first try and find a matching power4 # When using '-many -mpower4' gas will first try and find a matching power4
......
...@@ -63,6 +63,8 @@ ...@@ -63,6 +63,8 @@
#else /* !__ASSEMBLY__ */ #else /* !__ASSEMBLY__ */
#include <linux/jump_label.h>
DECLARE_STATIC_KEY_FALSE(uaccess_flush_key); DECLARE_STATIC_KEY_FALSE(uaccess_flush_key);
#ifdef CONFIG_PPC_KUAP #ifdef CONFIG_PPC_KUAP
......
...@@ -1000,8 +1000,6 @@ TRAMP_REAL_BEGIN(system_reset_idle_wake) ...@@ -1000,8 +1000,6 @@ TRAMP_REAL_BEGIN(system_reset_idle_wake)
* Vectors for the FWNMI option. Share common code. * Vectors for the FWNMI option. Share common code.
*/ */
TRAMP_REAL_BEGIN(system_reset_fwnmi) TRAMP_REAL_BEGIN(system_reset_fwnmi)
/* XXX: fwnmi guest could run a nested/PR guest, so why no test? */
__IKVM_REAL(system_reset)=0
GEN_INT_ENTRY system_reset, virt=0 GEN_INT_ENTRY system_reset, virt=0
#endif /* CONFIG_PPC_PSERIES */ #endif /* CONFIG_PPC_PSERIES */
...@@ -1412,6 +1410,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) ...@@ -1412,6 +1410,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
* If none is found, do a Linux page fault. Linux page faults can happen in * If none is found, do a Linux page fault. Linux page faults can happen in
* kernel mode due to user copy operations of course. * kernel mode due to user copy operations of course.
* *
* KVM: The KVM HDSI handler may perform a load with MSR[DR]=1 in guest
* MMU context, which may cause a DSI in the host, which must go to the
* KVM handler. MSR[IR] is not enabled, so the real-mode handler will
* always be used regardless of AIL setting.
*
* - Radix MMU * - Radix MMU
* The hardware loads from the Linux page table directly, so a fault goes * The hardware loads from the Linux page table directly, so a fault goes
* immediately to Linux page fault. * immediately to Linux page fault.
...@@ -1422,10 +1425,8 @@ INT_DEFINE_BEGIN(data_access) ...@@ -1422,10 +1425,8 @@ INT_DEFINE_BEGIN(data_access)
IVEC=0x300 IVEC=0x300
IDAR=1 IDAR=1
IDSISR=1 IDSISR=1
#ifdef CONFIG_KVM_BOOK3S_PR_POSSIBLE
IKVM_SKIP=1 IKVM_SKIP=1
IKVM_REAL=1 IKVM_REAL=1
#endif
INT_DEFINE_END(data_access) INT_DEFINE_END(data_access)
EXC_REAL_BEGIN(data_access, 0x300, 0x80) EXC_REAL_BEGIN(data_access, 0x300, 0x80)
...@@ -1464,6 +1465,8 @@ ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_TYPE_RADIX) ...@@ -1464,6 +1465,8 @@ ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_TYPE_RADIX)
* ppc64_bolted_size (first segment). The kernel handler must avoid stomping * ppc64_bolted_size (first segment). The kernel handler must avoid stomping
* on user-handler data structures. * on user-handler data structures.
* *
* KVM: Same as 0x300, DSLB must test for KVM guest.
*
* A dedicated save area EXSLB is used (XXX: but it actually need not be * A dedicated save area EXSLB is used (XXX: but it actually need not be
* these days, we could use EXGEN). * these days, we could use EXGEN).
*/ */
...@@ -1472,10 +1475,8 @@ INT_DEFINE_BEGIN(data_access_slb) ...@@ -1472,10 +1475,8 @@ INT_DEFINE_BEGIN(data_access_slb)
IAREA=PACA_EXSLB IAREA=PACA_EXSLB
IRECONCILE=0 IRECONCILE=0
IDAR=1 IDAR=1
#ifdef CONFIG_KVM_BOOK3S_PR_POSSIBLE
IKVM_SKIP=1 IKVM_SKIP=1
IKVM_REAL=1 IKVM_REAL=1
#endif
INT_DEFINE_END(data_access_slb) INT_DEFINE_END(data_access_slb)
EXC_REAL_BEGIN(data_access_slb, 0x380, 0x80) EXC_REAL_BEGIN(data_access_slb, 0x380, 0x80)
......
...@@ -156,6 +156,7 @@ __after_mmu_off: ...@@ -156,6 +156,7 @@ __after_mmu_off:
bl initial_bats bl initial_bats
bl load_segment_registers bl load_segment_registers
BEGIN_MMU_FTR_SECTION BEGIN_MMU_FTR_SECTION
bl reloc_offset
bl early_hash_table bl early_hash_table
END_MMU_FTR_SECTION_IFSET(MMU_FTR_HPTE_TABLE) END_MMU_FTR_SECTION_IFSET(MMU_FTR_HPTE_TABLE)
#if defined(CONFIG_BOOTX_TEXT) #if defined(CONFIG_BOOTX_TEXT)
...@@ -920,7 +921,7 @@ early_hash_table: ...@@ -920,7 +921,7 @@ early_hash_table:
ori r6, r6, 3 /* 256kB table */ ori r6, r6, 3 /* 256kB table */
mtspr SPRN_SDR1, r6 mtspr SPRN_SDR1, r6
lis r6, early_hash@h lis r6, early_hash@h
lis r3, Hash@ha addis r3, r3, Hash@ha
stw r6, Hash@l(r3) stw r6, Hash@l(r3)
blr blr
......
...@@ -251,6 +251,13 @@ static vm_fault_t xive_native_esb_fault(struct vm_fault *vmf) ...@@ -251,6 +251,13 @@ static vm_fault_t xive_native_esb_fault(struct vm_fault *vmf)
} }
state = &sb->irq_state[src]; state = &sb->irq_state[src];
/* Some sanity checking */
if (!state->valid) {
pr_devel("%s: source %lx invalid !\n", __func__, irq);
return VM_FAULT_SIGBUS;
}
kvmppc_xive_select_irq(state, &hw_num, &xd); kvmppc_xive_select_irq(state, &hw_num, &xd);
arch_spin_lock(&sb->lock); arch_spin_lock(&sb->lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment