Skip to content

Commit 16ce771

Browse files
committed
Merge branch 'kvm-ppc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc into next
Two bug fixes for HV KVM on POWER9 machines.
2 parents acc9ab6 + 4e5acdc commit 16ce771

File tree

3 files changed

+9
-7
lines changed

3 files changed

+9
-7
lines changed

arch/powerpc/include/asm/book3s/64/mmu.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ extern struct patb_entry *partition_tb;
4646

4747
/* Bits in patb0 field */
4848
#define PATB_HR (1UL << 63)
49-
#define RPDB_MASK 0x0ffffffffffff00fUL
49+
#define RPDB_MASK 0x0fffffffffffff00UL
5050
#define RPDB_SHIFT (1UL << 8)
5151
#define RTS1_SHIFT 61 /* top 2 bits of radix tree size */
5252
#define RTS1_MASK (3UL << RTS1_SHIFT)
@@ -57,6 +57,7 @@ extern struct patb_entry *partition_tb;
5757
/* Bits in patb1 field */
5858
#define PATB_GR (1UL << 63) /* guest uses radix; must match HR */
5959
#define PRTS_MASK 0x1f /* process table size field */
60+
#define PRTB_MASK 0x0ffffffffffff000UL
6061

6162
/*
6263
* Limit process table to PAGE_SIZE table. This

arch/powerpc/kvm/book3s_64_mmu_radix.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ int kvmppc_mmu_radix_xlate(struct kvm_vcpu *vcpu, gva_t eaddr,
3232
u32 pid;
3333
int ret, level, ps;
3434
__be64 prte, rpte;
35+
unsigned long ptbl;
3536
unsigned long root, pte, index;
3637
unsigned long rts, bits, offset;
3738
unsigned long gpa;
@@ -53,8 +54,8 @@ int kvmppc_mmu_radix_xlate(struct kvm_vcpu *vcpu, gva_t eaddr,
5354
return -EINVAL;
5455

5556
/* Read partition table to find root of tree for effective PID */
56-
ret = kvm_read_guest(kvm, kvm->arch.process_table + pid * 16,
57-
&prte, sizeof(prte));
57+
ptbl = (kvm->arch.process_table & PRTB_MASK) + (pid * 16);
58+
ret = kvm_read_guest(kvm, ptbl, &prte, sizeof(prte));
5859
if (ret)
5960
return ret;
6061

arch/powerpc/kvm/book3s_hv_rmhandlers.S

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1787,12 +1787,12 @@ kvmppc_hdsi:
17871787
/* HPTE not found fault or protection fault? */
17881788
andis. r0, r6, (DSISR_NOHPTE | DSISR_PROTFAULT)@h
17891789
beq 1f /* if not, send it to the guest */
1790+
andi. r0, r11, MSR_DR /* data relocation enabled? */
1791+
beq 3f
17901792
BEGIN_FTR_SECTION
17911793
mfspr r5, SPRN_ASDR /* on POWER9, use ASDR to get VSID */
17921794
b 4f
17931795
END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
1794-
andi. r0, r11, MSR_DR /* data relocation enabled? */
1795-
beq 3f
17961796
clrrdi r0, r4, 28
17971797
PPC_SLBFEE_DOT(R5, R0) /* if so, look up SLB */
17981798
li r0, BOOK3S_INTERRUPT_DATA_SEGMENT
@@ -1879,12 +1879,12 @@ kvmppc_hisi:
18791879
bne .Lradix_hisi /* for radix, just save ASDR */
18801880
andis. r0, r11, SRR1_ISI_NOPT@h
18811881
beq 1f
1882+
andi. r0, r11, MSR_IR /* instruction relocation enabled? */
1883+
beq 3f
18821884
BEGIN_FTR_SECTION
18831885
mfspr r5, SPRN_ASDR /* on POWER9, use ASDR to get VSID */
18841886
b 4f
18851887
END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
1886-
andi. r0, r11, MSR_IR /* instruction relocation enabled? */
1887-
beq 3f
18881888
clrrdi r0, r10, 28
18891889
PPC_SLBFEE_DOT(R5, R0) /* if so, look up SLB */
18901890
li r0, BOOK3S_INTERRUPT_INST_SEGMENT

0 commit comments

Comments
 (0)