diff options
author | Richard Braun <rbraun@sceen.net> | 2016-02-22 21:59:07 +0100 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2016-02-22 21:59:07 +0100 |
commit | b325f426b367d813b23799aeb058d7d3ac81f13d (patch) | |
tree | a17f7d46316faadd79958de3760c4ee744014e88 /vm/vm_page.c | |
parent | 9e7f22971be0f427601926b42b640426ab7da4db (diff) | |
download | gnumach-b325f426b367d813b23799aeb058d7d3ac81f13d.tar.gz gnumach-b325f426b367d813b23799aeb058d7d3ac81f13d.tar.bz2 gnumach-b325f426b367d813b23799aeb058d7d3ac81f13d.zip |
Optimize slab lookup on the free path
Caches that use external slab data but allocate slabs from the direct
physical mapping can look up slab data in constant time by associating
the slab data directly with the underlying page.
* kern/slab.c (kmem_slab_use_tree): Take KMEM_CF_DIRECTMAP into account.
(kmem_slab_create): Set page private data if relevant.
(kmem_slab_destroy): Clear page private data if relevant.
(kmem_cache_free_to_slab): Use page private data if relevant.
* vm/vm_page.c (vm_page_init_pa): Set `priv' member to NULL.
* vm/vm_page.h (vm_page_set_priv, vm_page_get_priv): New functions.
Diffstat (limited to 'vm/vm_page.c')
-rw-r--r-- | vm/vm_page.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/vm/vm_page.c b/vm/vm_page.c index 48d70964..a868fce8 100644 --- a/vm/vm_page.c +++ b/vm/vm_page.c @@ -165,6 +165,7 @@ vm_page_init_pa(struct vm_page *page, unsigned short seg_index, phys_addr_t pa) page->type = VM_PT_RESERVED; page->seg_index = seg_index; page->order = VM_PAGE_ORDER_UNLISTED; + page->priv = NULL; page->phys_addr = pa; } |