mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 17:23:55 +08:00
KVM: PPC: Book3S: PR: Fix C/R bit setting
Commit 9308ab8e2d
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: Alexander Graf <agraf@suse.de>
CC: Paul Mackerras <paulus@samba.org>
Acked-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
7562c4fded
commit
740f834eb2
@ -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
|
||||
|
@ -342,14 +342,14 @@ do_second:
|
||||
* 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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user