Source-Changes-D archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: src/sys/uvm
> Module Name: src
> Committed By: ad
> Date: Sat Dec 21 14:41:44 UTC 2019
>
> - Add inlines to set/get locator values in the unused lower bits of
> pg->phys_addr. Begin by using it to cache the freelist index, because
> computing it is expensive and that shows up during profiling. Discussed
> on tech-kern.
So I guess we won't be switching pg->phys_addr from paddr to pfn?
Speaking of which, any plans for expanding to >32-bit (or >31-bit, if
signed) pfns in the rest of uvm?
> +static inline unsigned
> +uvm_page_get_bucket(struct vm_page *pg)
> +{
> + return (pg->phys_addr & 0x3e0) >> 5;
> +}
Can you use __BITS/__SHIFTIN/__SHIFTOUT for this instead of magic hex
masks?
#define PHYSADDR_FREELIST __BITS(0,4)
#define PHYSADDR_BUCKET __BITS(5,9)
static inline unsigned
uvm_page_get_bucket(struct vm_page *pg)
{
return __SHIFTOUT(pg->phys_addr, PHYSADDR_BUCKET);
}
static inline unsigned
uvm_page_set_bucket(struct vm_page *pg, unsigned b)
{
pg->phys_addr &= ~PHYSADDR_BUCKET;
pg->phys_addr |= __SHIFTIN(b, PHYSADDR_BUCKET);
}
Home |
Main Index |
Thread Index |
Old Index