|
@@ -197,12 +197,17 @@ static inline pte_t pte_mkold(pte_t pte)
|
|
|
|
|
|
|
|
static inline pte_t pte_wrprotect(pte_t pte)
|
|
static inline pte_t pte_wrprotect(pte_t pte)
|
|
|
{
|
|
{
|
|
|
- pte_clear_bits(pte, _PAGE_RW);
|
|
|
|
|
|
|
+ if (likely(pte_get_bits(pte, _PAGE_RW)))
|
|
|
|
|
+ pte_clear_bits(pte, _PAGE_RW);
|
|
|
|
|
+ else
|
|
|
|
|
+ return pte;
|
|
|
return(pte_mknewprot(pte));
|
|
return(pte_mknewprot(pte));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static inline pte_t pte_mkread(pte_t pte)
|
|
static inline pte_t pte_mkread(pte_t pte)
|
|
|
{
|
|
{
|
|
|
|
|
+ if (unlikely(pte_get_bits(pte, _PAGE_USER)))
|
|
|
|
|
+ return pte;
|
|
|
pte_set_bits(pte, _PAGE_USER);
|
|
pte_set_bits(pte, _PAGE_USER);
|
|
|
return(pte_mknewprot(pte));
|
|
return(pte_mknewprot(pte));
|
|
|
}
|
|
}
|
|
@@ -221,6 +226,8 @@ static inline pte_t pte_mkyoung(pte_t pte)
|
|
|
|
|
|
|
|
static inline pte_t pte_mkwrite(pte_t pte)
|
|
static inline pte_t pte_mkwrite(pte_t pte)
|
|
|
{
|
|
{
|
|
|
|
|
+ if (unlikely(pte_get_bits(pte, _PAGE_RW)))
|
|
|
|
|
+ return pte;
|
|
|
pte_set_bits(pte, _PAGE_RW);
|
|
pte_set_bits(pte, _PAGE_RW);
|
|
|
return(pte_mknewprot(pte));
|
|
return(pte_mknewprot(pte));
|
|
|
}
|
|
}
|