Browse Source

KVM: PPC: Book3S HV: Fix kvmppc_bad_host_intr for real mode interrupts

When CONFIG_RELOCATABLE=n, the Linux real mode interrupt handlers call
into KVM using real address. This needs to be translated to the kernel
linear effective address before the MMU is switched on.

kvmppc_bad_host_intr misses adding these bits, so when it is used to
handle a system reset interrupt (that always gets delivered in real
mode), it results in an instruction access fault immediately after
the MMU is turned on.

Fix this by ensuring the top 2 address bits are set when the MMU is
turned on.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
Nicholas Piggin 7 years ago
parent
commit
eadce3b48b
1 changed files with 2 additions and 0 deletions
  1. 2 0
      arch/powerpc/kvm/book3s_hv_rmhandlers.S

+ 2 - 0
arch/powerpc/kvm/book3s_hv_rmhandlers.S

@@ -3568,6 +3568,8 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_TYPE_RADIX)
 	bcl	20, 31, .+4
 	bcl	20, 31, .+4
 5:	mflr	r3
 5:	mflr	r3
 	addi	r3, r3, 9f - 5b
 	addi	r3, r3, 9f - 5b
+	li	r4, -1
+	rldimi	r3, r4, 62, 0	/* ensure 0xc000000000000000 bits are set */
 	ld	r4, PACAKMSR(r13)
 	ld	r4, PACAKMSR(r13)
 	mtspr	SPRN_SRR0, r3
 	mtspr	SPRN_SRR0, r3
 	mtspr	SPRN_SRR1, r4
 	mtspr	SPRN_SRR1, r4