slab: removes local_irq_save()/local_irq_restore() pair
PATCH 1/1 slab: removes local_irq_save()/local_irq_restore() pair
Proposed by and based on a patch from Eric Dumazet <[email protected]>:
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 <[email protected]>
mm/slab.c +15 -11
@@ -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))); }