|
@@ -591,11 +591,11 @@ void ptep_zap_key(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
|
|
|
unsigned long ptev;
|
|
|
pgste_t pgste;
|
|
|
|
|
|
- /* Clear storage key */
|
|
|
+ /* Clear storage key ACC and F, but set R/C */
|
|
|
preempt_disable();
|
|
|
pgste = pgste_get_lock(ptep);
|
|
|
- pgste_val(pgste) &= ~(PGSTE_ACC_BITS | PGSTE_FP_BIT |
|
|
|
- PGSTE_GR_BIT | PGSTE_GC_BIT);
|
|
|
+ pgste_val(pgste) &= ~(PGSTE_ACC_BITS | PGSTE_FP_BIT);
|
|
|
+ pgste_val(pgste) |= PGSTE_GR_BIT | PGSTE_GC_BIT;
|
|
|
ptev = pte_val(*ptep);
|
|
|
if (!(ptev & _PAGE_INVALID) && (ptev & _PAGE_WRITE))
|
|
|
page_set_storage_key(ptev & PAGE_MASK, PAGE_DEFAULT_KEY, 1);
|