Messages in this thread Patch in this message | | | Date | Sun, 21 Aug 2005 23:03:11 +0200 | From | Manfred Spraul <> | Subject | [PATCH] slab: removes local_irq_save()/local_irq_restore() pair |
| |
Proposed by and based on a patch from Eric Dumazet <dada1@cosmosbay.com>: This patch removes unnecessary critical section in ksize() function, as cli/sti are rather expensive on modern CPUS. It additionally adds a docbook entry for ksize() and further simplifies the code.
Signed-Off-By: Manfred Spraul <manfred@colorfullife.com> --- 2.6/mm/slab.c 2005-08-14 12:09:18.000000000 +0200 +++ build-2.6/mm/slab.c 2005-08-21 22:54:04.000000000 +0200 @@ -3073,20 +3073,24 @@ } #endif +/** + * ksize - get the actual amount of memory allocated for a given object + * @objp: Pointer to the object + * + * kmalloc may internally round up allocations and return more memory + * than requested. ksize() can be used to determine the actual amount of + * memory allocated. The caller may use this additional memory, even though + * a smaller amount of memory was initially specified with the kmalloc call. + * The caller must guarantee that objp points to a valid object previously + * allocated with either kmalloc() or kmem_cache_alloc(). The object + * must not be freed during the duration of the call. + */ unsigned int ksize(const void *objp) { - kmem_cache_t *c; - unsigned long flags; - unsigned int size = 0; - - if (likely(objp != NULL)) { - local_irq_save(flags); - c = GET_PAGE_CACHE(virt_to_page(objp)); - size = kmem_cache_size(c); - local_irq_restore(flags); - } + if (unlikely(objp == NULL)) + return 0; - return size; + return obj_reallen(GET_PAGE_CACHE(virt_to_page(objp))); } | |