From ba97fd8a78dd933e21efbf28471c77985274af0d Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Sun, 10 Aug 2003 21:53:55 +0000 Subject: [PATCH] Rename pmap_changebit() to pmap_clear_ptes() and remove the last parameter. The new name better reflects what the function does and how it is used. The last parameter was always FALSE. Note: In theory, gcc would perform constant propagation and dead code elimination to achieve the same effect as removing the last parameter, which is always FALSE. In practice, recent versions do not. So, there is little point in letting unused code pessimize execution. --- sys/amd64/amd64/pmap.c | 44 ++++++++++++++++++------------------------ sys/i386/i386/pmap.c | 44 ++++++++++++++++++------------------------ 2 files changed, 38 insertions(+), 50 deletions(-) diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 915e6472b37..c34607d15b8 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -208,7 +208,7 @@ static caddr_t crashdumpmap; static PMAP_INLINE void free_pv_entry(pv_entry_t pv); static pv_entry_t get_pv_entry(void); static void amd64_protection_init(void); -static void pmap_changebit(vm_page_t m, int bit, boolean_t setem) +static void pmap_clear_ptes(vm_page_t m, int bit) __always_inline; static int pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, vm_offset_t sva); @@ -2611,17 +2611,17 @@ pmap_is_modified(vm_page_t m) } /* - * this routine is used to modify bits in ptes + * Clear the given bit in each of the given page's ptes. */ static __inline void -pmap_changebit(vm_page_t m, int bit, boolean_t setem) +pmap_clear_ptes(vm_page_t m, int bit) { register pv_entry_t pv; - register pt_entry_t *pte; + pt_entry_t pbits, *pte; int s; if (!pmap_initialized || (m->flags & PG_FICTITIOUS) || - (!setem && bit == PG_RW && (m->flags & PG_WRITEABLE) == 0)) + (bit == PG_RW && (m->flags & PG_WRITEABLE) == 0)) return; s = splvm(); @@ -2634,7 +2634,7 @@ pmap_changebit(vm_page_t m, int bit, boolean_t setem) /* * don't write protect pager mappings */ - if (!setem && (bit == PG_RW)) { + if (bit == PG_RW) { if (!pmap_track_modified(pv->pv_va)) continue; } @@ -2647,26 +2647,20 @@ pmap_changebit(vm_page_t m, int bit, boolean_t setem) #endif pte = pmap_pte(pv->pv_pmap, pv->pv_va); - - if (setem) { - *pte |= bit; - pmap_invalidate_page(pv->pv_pmap, pv->pv_va); - } else { - pt_entry_t pbits = *pte; - if (pbits & bit) { - if (bit == PG_RW) { - if (pbits & PG_M) { - vm_page_dirty(m); - } - pte_store(pte, pbits & ~(PG_M|PG_RW)); - } else { - pte_store(pte, pbits & ~bit); + pbits = *pte; + if (pbits & bit) { + if (bit == PG_RW) { + if (pbits & PG_M) { + vm_page_dirty(m); } - pmap_invalidate_page(pv->pv_pmap, pv->pv_va); + pte_store(pte, pbits & ~(PG_M|PG_RW)); + } else { + pte_store(pte, pbits & ~bit); } + pmap_invalidate_page(pv->pv_pmap, pv->pv_va); } } - if (!setem && bit == PG_RW) + if (bit == PG_RW) vm_page_flag_clear(m, PG_WRITEABLE); splx(s); } @@ -2681,7 +2675,7 @@ pmap_page_protect(vm_page_t m, vm_prot_t prot) { if ((prot & VM_PROT_WRITE) == 0) { if (prot & (VM_PROT_READ | VM_PROT_EXECUTE)) { - pmap_changebit(m, PG_RW, FALSE); + pmap_clear_ptes(m, PG_RW); } else { pmap_remove_all(m); } @@ -2752,7 +2746,7 @@ pmap_ts_referenced(vm_page_t m) void pmap_clear_modify(vm_page_t m) { - pmap_changebit(m, PG_M, FALSE); + pmap_clear_ptes(m, PG_M); } /* @@ -2763,7 +2757,7 @@ pmap_clear_modify(vm_page_t m) void pmap_clear_reference(vm_page_t m) { - pmap_changebit(m, PG_A, FALSE); + pmap_clear_ptes(m, PG_A); } /* diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index 3e2adf9ad40..174b30ccc6b 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -240,7 +240,7 @@ static pt_entry_t *PADDR1 = 0; static PMAP_INLINE void free_pv_entry(pv_entry_t pv); static pv_entry_t get_pv_entry(void); static void i386_protection_init(void); -static void pmap_changebit(vm_page_t m, int bit, boolean_t setem) +static void pmap_clear_ptes(vm_page_t m, int bit) __always_inline; static int pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, vm_offset_t sva); @@ -2839,17 +2839,17 @@ pmap_is_modified(vm_page_t m) } /* - * this routine is used to modify bits in ptes + * Clear the given bit in each of the given page's ptes. */ static __inline void -pmap_changebit(vm_page_t m, int bit, boolean_t setem) +pmap_clear_ptes(vm_page_t m, int bit) { register pv_entry_t pv; - register pt_entry_t *pte; + pt_entry_t pbits, *pte; int s; if (!pmap_initialized || (m->flags & PG_FICTITIOUS) || - (!setem && bit == PG_RW && (m->flags & PG_WRITEABLE) == 0)) + (bit == PG_RW && (m->flags & PG_WRITEABLE) == 0)) return; s = splvm(); @@ -2862,7 +2862,7 @@ pmap_changebit(vm_page_t m, int bit, boolean_t setem) /* * don't write protect pager mappings */ - if (!setem && (bit == PG_RW)) { + if (bit == PG_RW) { if (!pmap_track_modified(pv->pv_va)) continue; } @@ -2875,26 +2875,20 @@ pmap_changebit(vm_page_t m, int bit, boolean_t setem) #endif pte = pmap_pte_quick(pv->pv_pmap, pv->pv_va); - - if (setem) { - *pte |= bit; - pmap_invalidate_page(pv->pv_pmap, pv->pv_va); - } else { - pt_entry_t pbits = *pte; - if (pbits & bit) { - if (bit == PG_RW) { - if (pbits & PG_M) { - vm_page_dirty(m); - } - pte_store(pte, pbits & ~(PG_M|PG_RW)); - } else { - pte_store(pte, pbits & ~bit); + pbits = *pte; + if (pbits & bit) { + if (bit == PG_RW) { + if (pbits & PG_M) { + vm_page_dirty(m); } - pmap_invalidate_page(pv->pv_pmap, pv->pv_va); + pte_store(pte, pbits & ~(PG_M|PG_RW)); + } else { + pte_store(pte, pbits & ~bit); } + pmap_invalidate_page(pv->pv_pmap, pv->pv_va); } } - if (!setem && bit == PG_RW) + if (bit == PG_RW) vm_page_flag_clear(m, PG_WRITEABLE); splx(s); } @@ -2909,7 +2903,7 @@ pmap_page_protect(vm_page_t m, vm_prot_t prot) { if ((prot & VM_PROT_WRITE) == 0) { if (prot & (VM_PROT_READ | VM_PROT_EXECUTE)) { - pmap_changebit(m, PG_RW, FALSE); + pmap_clear_ptes(m, PG_RW); } else { pmap_remove_all(m); } @@ -2980,7 +2974,7 @@ pmap_ts_referenced(vm_page_t m) void pmap_clear_modify(vm_page_t m) { - pmap_changebit(m, PG_M, FALSE); + pmap_clear_ptes(m, PG_M); } /* @@ -2991,7 +2985,7 @@ pmap_clear_modify(vm_page_t m) void pmap_clear_reference(vm_page_t m) { - pmap_changebit(m, PG_A, FALSE); + pmap_clear_ptes(m, PG_A); } /*