Skip to content

Commit

Permalink
[PATCH] slab: removes local_irq_save()/local_irq_restore() pair
Browse files Browse the repository at this point in the history
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]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
manfred-colorfu authored and Linus Torvalds committed Sep 5, 2005
1 parent 34342e8 commit 00e145b
Showing 1 changed file with 15 additions and 11 deletions.
26 changes: 15 additions & 11 deletions mm/slab.c
Original file line number Diff line number Diff line change
Expand Up @@ -3076,20 +3076,24 @@ ssize_t slabinfo_write(struct file *file, const char __user *buffer,
}
#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)));
}


Expand Down

0 comments on commit 00e145b

Please sign in to comment.