Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 740f834e authored by Alexander Graf's avatar Alexander Graf
Browse files

KVM: PPC: Book3S: PR: Fix C/R bit setting



Commit 9308ab8e made C/R HTAB updates go byte-wise into the target HTAB.
However, it didn't update the guest's copy of the HTAB, but instead the
host local copy of it.

Write to the guest's HTAB instead.

Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
CC: Paul Mackerras <paulus@samba.org>
Acked-by: default avatarPaul Mackerras <paulus@samba.org>
parent 7562c4fd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -270,7 +270,7 @@ static int kvmppc_mmu_book3s_32_xlate_pte(struct kvm_vcpu *vcpu, gva_t eaddr,
	   page */
	if (found) {
		u32 pte_r = pteg[i+1];
		char __user *addr = (char __user *) &pteg[i+1];
		char __user *addr = (char __user *) (ptegp + (i+1) * sizeof(u32));

		/*
		 * Use single-byte writes to update the HPTE, to
+2 −2
Original line number Diff line number Diff line
@@ -342,14 +342,14 @@ static int kvmppc_mmu_book3s_64_xlate(struct kvm_vcpu *vcpu, gva_t eaddr,
		 * non-PAPR platforms such as mac99, and this is
		 * what real hardware does.
		 */
		char __user *addr = (char __user *) &pteg[i+1];
                char __user *addr = (char __user *) (ptegp + (i + 1) * sizeof(u64));
		r |= HPTE_R_R;
		put_user(r >> 8, addr + 6);
	}
	if (iswrite && gpte->may_write && !(r & HPTE_R_C)) {
		/* Set the dirty flag */
		/* Use a single byte write */
		char __user *addr = (char __user *) &pteg[i+1];
                char __user *addr = (char __user *) (ptegp + (i + 1) * sizeof(u64));
		r |= HPTE_R_C;
		put_user(r, addr + 7);
	}