Date: Wed, 6 Feb 2013 18:37:46 +0000 (UTC) From: Attilio Rao <attilio@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r246430 - user/attilio/vmc-playground/sys/vm Message-ID: <201302061837.r16Ibknx018453@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: attilio Date: Wed Feb 6 18:37:46 2013 New Revision: 246430 URL: http://svnweb.freebsd.org/changeset/base/246430 Log: Cleanup vm_radix KPI: - Avoid the return value for vm_radix_insert() - Name the functions argument per-style(9) - Avoid to get and return opaque objects but use vm_page_t as vm_radix is thought to not really be general code but to cater specifically page cache and resident cache. Modified: user/attilio/vmc-playground/sys/vm/vm_page.c user/attilio/vmc-playground/sys/vm/vm_radix.c user/attilio/vmc-playground/sys/vm/vm_radix.h Modified: user/attilio/vmc-playground/sys/vm/vm_page.c ============================================================================== --- user/attilio/vmc-playground/sys/vm/vm_page.c Wed Feb 6 18:36:26 2013 (r246429) +++ user/attilio/vmc-playground/sys/vm/vm_page.c Wed Feb 6 18:37:46 2013 (r246430) @@ -833,8 +833,7 @@ vm_page_insert(vm_page_t m, vm_object_t } else TAILQ_INSERT_TAIL(&object->memq, m, listq); } - if (vm_radix_insert(&object->rtree, pindex, m) != 0) - panic("vm_page_insert: unable to insert the new page"); + vm_radix_insert(&object->rtree, pindex, m); /* * Show that the object has one more resident page. @@ -1108,9 +1107,7 @@ vm_page_cache_transfer(vm_object_t orig_ if ((m->pindex - offidxstart) >= new_object->size) break; vm_radix_remove(&orig_object->cache, m->pindex); - if (vm_radix_insert(&new_object->cache, - m->pindex - offidxstart, m) != 0) - panic("vm_page_cache_transfer: failed vm_radix_insert"); + vm_radix_insert(&new_object->cache, m->pindex - offidxstart, m); m->object = new_object; m->pindex -= offidxstart; } @@ -2182,8 +2179,7 @@ vm_page_cache(vm_page_t m) m->flags |= PG_CACHED; old_empty_cache = vm_object_cache_is_empty(object); cnt.v_cache_count++; - if (vm_radix_insert(&object->cache, m->pindex, m) != 0) - panic("vm_page_cache: vm_radix_insert failed"); + vm_radix_insert(&object->cache, m->pindex, m); #if VM_NRESERVLEVEL > 0 if (!vm_reserv_free_page(m)) { #else Modified: user/attilio/vmc-playground/sys/vm/vm_radix.c ============================================================================== --- user/attilio/vmc-playground/sys/vm/vm_radix.c Wed Feb 6 18:36:26 2013 (r246429) +++ user/attilio/vmc-playground/sys/vm/vm_radix.c Wed Feb 6 18:37:46 2013 (r246430) @@ -292,14 +292,14 @@ vm_radix_setroot(struct vm_radix *rtree, rtree->rt_root = root; } -static inline void * +static inline vm_page_t vm_radix_match(void *child) { uintptr_t c; c = (uintptr_t)child; - return ((void *)(c & ~VM_RADIX_FLAGS)); + return ((vm_page_t)(c & ~VM_RADIX_FLAGS)); } static void @@ -338,8 +338,8 @@ vm_radix_reclaim_allnodes_internal(struc * Inserts the key-value pair in to the radix tree. Returns errno. * Panics if the key already exists. */ -int -vm_radix_insert(struct vm_radix *rtree, vm_pindex_t index, void *val) +void +vm_radix_insert(struct vm_radix *rtree, vm_pindex_t index, vm_page_t page) { struct vm_radix_node *rnode; struct vm_radix_node *root; @@ -347,8 +347,8 @@ vm_radix_insert(struct vm_radix *rtree, int slot; CTR4(KTR_VM, - "insert: tree %p, " KFRMT64(index) ", val %p", rtree, - KSPLT64L(index), KSPLT64H(index), val); + "insert: tree %p, " KFRMT64(index) ", page %p", rtree, + KSPLT64L(index), KSPLT64H(index), page); if (index == -1) panic("vm_radix_insert: -1 is not a valid index.\n"); level = vm_radix_height(rtree, &root); @@ -376,7 +376,7 @@ vm_radix_insert(struct vm_radix *rtree, "insert: tree %p, root %p, " KFRMT64(index) ", level %d ENOMEM", rtree, root, KSPLT64L(index), KSPLT64H(index), level); - return (ENOMEM); + panic("vm_radix_insert: failed allocation"); } /* * Store the new pointer with a memory barrier so @@ -408,7 +408,7 @@ vm_radix_insert(struct vm_radix *rtree, "insert: tree %p, rnode %p, child %p, count %u ENOMEM", rtree, rnode, rnode->rn_child[slot], rnode->rn_count); - return (ENOMEM); + panic("vm_radix_insert: failed allocation"); } rnode->rn_count++; } @@ -427,22 +427,20 @@ vm_radix_insert(struct vm_radix *rtree, KASSERT(rnode->rn_child[slot] == NULL, ("vm_radix_insert: Duplicate value %p at index: %lu\n", rnode->rn_child[slot], (u_long)index)); - rnode->rn_child[slot] = val; + rnode->rn_child[slot] = page; rnode->rn_count++; CTR5(KTR_VM, "insert: tree %p, " KFRMT64(index) ", level %d, slot %d", rtree, KSPLT64L(index), KSPLT64H(index), level, slot); CTR3(KTR_VM, "insert: slot %d, rnode %p, count %u", slot, rnode, rnode->rn_count); - - return 0; } /* * Returns the value stored at the index. If the index is not present * NULL is returned. */ -void * +vm_page_t vm_radix_lookup(struct vm_radix *rtree, vm_pindex_t index) { struct vm_radix_node *rnode; @@ -551,44 +549,45 @@ out: /* * Look up any entry at a position bigger than or equal to index. */ -void * -vm_radix_lookup_ge(struct vm_radix *rtree, vm_pindex_t start) +vm_page_t +vm_radix_lookup_ge(struct vm_radix *rtree, vm_pindex_t index) { + vm_page_t page; struct vm_radix_node *rnode; - void *val; int slot; - CTR3(KTR_VM, "lookupn: tree %p, " KFRMT64(start), rtree, - KSPLT64L(start), KSPLT64H(start)); + CTR3(KTR_VM, "lookupn: tree %p, " KFRMT64(index), rtree, + KSPLT64L(index), KSPLT64H(index)); if (rtree->rt_root == 0) return (NULL); - while ((rnode = vm_radix_leaf(rtree, &start)) != NULL) { - slot = vm_radix_slot(start, 0); - for (; slot < VM_RADIX_COUNT; slot++, start++) { - val = vm_radix_match(rnode->rn_child[slot]); - if (val == NULL) { + while ((rnode = vm_radix_leaf(rtree, &index)) != NULL) { + slot = vm_radix_slot(index, 0); + for (; slot < VM_RADIX_COUNT; slot++, index++) { + page = vm_radix_match(rnode->rn_child[slot]); + if (page == NULL) { /* - * The start address can wrap at the + * The index address can wrap at the * VM_RADIX_MAXVAL value. - * We need to make sure that start address + * We need to make sure that index address * point to the next chunk (even if wrapping) * to stay consistent with default scanning * behaviour. Also, because of the nature * of the wrapping, the wrap up checks must * be done after all the necessary controls - * on start are completed. + * on index are completed. */ - if ((VM_RADIX_MAXVAL - start) == 0) + if ((VM_RADIX_MAXVAL - index) == 0) return (NULL); continue; } CTR5(KTR_VM, "lookupn: tree %p " KFRMT64(index) " slot %d found child %p", - rtree, KSPLT64L(start), KSPLT64H(start), slot, val); - return (val); + rtree, KSPLT64L(index), KSPLT64H(index), slot, + page); + return (page); } - MPASS((VM_RADIX_MAXVAL - start) != 0); + MPASS((VM_RADIX_MAXVAL - index) != 0); } return (NULL); } @@ -596,14 +595,14 @@ vm_radix_lookup_ge(struct vm_radix *rtre /* * Look up any entry at a position less than or equal to index. */ -void * +vm_page_t vm_radix_lookup_le(struct vm_radix *rtree, vm_pindex_t index) { struct vm_radix_node *rnode; struct vm_radix_node *child; vm_pindex_t max; vm_pindex_t inc; - void *val; + vm_page_t page; int slot; int level; @@ -661,9 +660,9 @@ restart: } if (rnode) { for (; slot >= 0; slot--, index--) { - val = vm_radix_match(rnode->rn_child[slot]); - if (val) - return (val); + page = vm_radix_match(rnode->rn_child[slot]); + if (page) + return (page); } } if (index != -1) Modified: user/attilio/vmc-playground/sys/vm/vm_radix.h ============================================================================== --- user/attilio/vmc-playground/sys/vm/vm_radix.h Wed Feb 6 18:36:26 2013 (r246429) +++ user/attilio/vmc-playground/sys/vm/vm_radix.h Wed Feb 6 18:37:46 2013 (r246430) @@ -33,13 +33,14 @@ #ifdef _KERNEL -void vm_radix_init(void); -int vm_radix_insert(struct vm_radix *, vm_pindex_t, void *); -void *vm_radix_lookup(struct vm_radix *, vm_pindex_t); -void *vm_radix_lookup_ge(struct vm_radix *, vm_pindex_t); -void *vm_radix_lookup_le(struct vm_radix *, vm_pindex_t); -void vm_radix_reclaim_allnodes(struct vm_radix *); -void vm_radix_remove(struct vm_radix *, vm_pindex_t); +void vm_radix_init(void); +void vm_radix_insert(struct vm_radix *rtree, vm_pindex_t index, + vm_page_t page); +vm_page_t vm_radix_lookup(struct vm_radix *rtree, vm_pindex_t index); +vm_page_t vm_radix_lookup_ge(struct vm_radix *rtree, vm_pindex_t index); +vm_page_t vm_radix_lookup_le(struct vm_radix *rtree, vm_pindex_t index); +void vm_radix_reclaim_allnodes(struct vm_radix *rtree); +void vm_radix_remove(struct vm_radix *rtree, vm_pindex_t index); #endif /* _KERNEL */ #endif /* !_VM_RADIX_H_ */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201302061837.r16Ibknx018453>