mirror of
https://git.FreeBSD.org/src.git
synced 2024-11-30 08:19:09 +00:00
pmap: Micro-optimize pmap_remove_pages() on amd64 and arm64
Reduce the live ranges for three variables so that they do not span the call to PHYS_TO_VM_PAGE(). This enables the compiler to generate slightly smaller machine code. Reviewed by: kib, markj MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D31161
This commit is contained in:
parent
4a9a41650c
commit
d411b285bc
@ -8201,6 +8201,16 @@ pmap_remove_pages(pmap_t pmap)
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Mark free */
|
||||
pc->pc_map[field] |= bitmask;
|
||||
|
||||
/*
|
||||
* Because this pmap is not active on other
|
||||
* processors, the dirty bit cannot have
|
||||
* changed state since we last loaded pte.
|
||||
*/
|
||||
pte_clear(pte);
|
||||
|
||||
if (superpage)
|
||||
pa = tpte & PG_PS_FRAME;
|
||||
else
|
||||
@ -8217,8 +8227,6 @@ pmap_remove_pages(pmap_t pmap)
|
||||
("pmap_remove_pages: bad tpte %#jx",
|
||||
(uintmax_t)tpte));
|
||||
|
||||
pte_clear(pte);
|
||||
|
||||
/*
|
||||
* Update the vm_page_t clean/reference bits.
|
||||
*/
|
||||
@ -8232,8 +8240,6 @@ pmap_remove_pages(pmap_t pmap)
|
||||
|
||||
CHANGE_PV_LIST_LOCK_TO_VM_PAGE(&lock, m);
|
||||
|
||||
/* Mark free */
|
||||
pc->pc_map[field] |= bitmask;
|
||||
if (superpage) {
|
||||
pmap_resident_count_adj(pmap, -NBPDR / PAGE_SIZE);
|
||||
pvh = pa_to_pvh(tpte & PG_PS_FRAME);
|
||||
|
@ -4951,6 +4951,16 @@ pmap_remove_pages(pmap_t pmap)
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Mark free */
|
||||
pc->pc_map[field] |= bitmask;
|
||||
|
||||
/*
|
||||
* Because this pmap is not active on other
|
||||
* processors, the dirty bit cannot have
|
||||
* changed state since we last loaded pte.
|
||||
*/
|
||||
pmap_clear(pte);
|
||||
|
||||
pa = tpte & ~ATTR_MASK;
|
||||
|
||||
m = PHYS_TO_VM_PAGE(pa);
|
||||
@ -4964,13 +4974,6 @@ pmap_remove_pages(pmap_t pmap)
|
||||
("pmap_remove_pages: bad pte %#jx",
|
||||
(uintmax_t)tpte));
|
||||
|
||||
/*
|
||||
* Because this pmap is not active on other
|
||||
* processors, the dirty bit cannot have
|
||||
* changed state since we last loaded pte.
|
||||
*/
|
||||
pmap_clear(pte);
|
||||
|
||||
/*
|
||||
* Update the vm_page_t clean/reference bits.
|
||||
*/
|
||||
@ -4988,8 +4991,6 @@ pmap_remove_pages(pmap_t pmap)
|
||||
|
||||
CHANGE_PV_LIST_LOCK_TO_VM_PAGE(&lock, m);
|
||||
|
||||
/* Mark free */
|
||||
pc->pc_map[field] |= bitmask;
|
||||
switch (lvl) {
|
||||
case 1:
|
||||
pmap_resident_count_dec(pmap,
|
||||
|
Loading…
Reference in New Issue
Block a user