|
|
@@ -551,20 +551,11 @@ unsigned long get_guest_storage_key(struct mm_struct *mm, unsigned long addr)
|
|
|
return -EFAULT;
|
|
|
|
|
|
pgste = pgste_get_lock(ptep);
|
|
|
- if (pte_val(*ptep) & _PAGE_INVALID) {
|
|
|
- key = (pgste_val(pgste) & PGSTE_ACC_BITS) >> 56;
|
|
|
- key |= (pgste_val(pgste) & PGSTE_FP_BIT) >> 56;
|
|
|
- key |= (pgste_val(pgste) & PGSTE_GR_BIT) >> 48;
|
|
|
- key |= (pgste_val(pgste) & PGSTE_GC_BIT) >> 48;
|
|
|
- } else {
|
|
|
+ key = (pgste_val(pgste) & (PGSTE_ACC_BITS | PGSTE_FP_BIT)) >> 56;
|
|
|
+ if (!(pte_val(*ptep) & _PAGE_INVALID))
|
|
|
key = page_get_storage_key(pte_val(*ptep) & PAGE_MASK);
|
|
|
-
|
|
|
- /* Reflect guest's logical view, not physical */
|
|
|
- if (pgste_val(pgste) & PGSTE_GR_BIT)
|
|
|
- key |= _PAGE_REFERENCED;
|
|
|
- if (pgste_val(pgste) & PGSTE_GC_BIT)
|
|
|
- key |= _PAGE_CHANGED;
|
|
|
- }
|
|
|
+ /* Reflect guest's logical view, not physical */
|
|
|
+ key |= (pgste_val(pgste) & (PGSTE_GR_BIT | PGSTE_GC_BIT)) >> 48;
|
|
|
pgste_set_unlock(ptep, pgste);
|
|
|
pte_unmap_unlock(ptep, ptl);
|
|
|
return key;
|