pmd_clear(pmd);
return;
}
- if (!(start & ~PMD_MASK) && !(end & ~PMD_MASK)) {
+ if (!((start | end) & ~PMD_MASK)) {
+ /* Only clear full, aligned ranges */
page = pmd_page(*pmd);
pmd_clear(pmd);
dec_page_state(nr_page_table_pages);
addr = next;
} while (addr && (addr < end));
- if (!(start & ~PUD_MASK) && !(end & ~PUD_MASK)) {
+ if (!((start | end) & ~PUD_MASK)) {
+ /* Only clear full, aligned ranges */
pud_clear(pud);
pmd_free_tlb(tlb, __pmd);
}
addr = next;
} while (addr && (addr < end));
- if (!(start & ~PGDIR_MASK) && !(end & ~PGDIR_MASK)) {
+ if (!((start | end) & ~PGDIR_MASK)) {
+ /* Only clear full, aligned ranges */
pgd_clear(pgd);
pud_free_tlb(tlb, __pud);
}