Lines Matching refs:sp
107 static inline int slob_page_free(struct page *sp) in slob_page_free() argument
109 return PageSlobFree(sp); in slob_page_free()
112 static void set_slob_page_free(struct page *sp, struct list_head *list) in set_slob_page_free() argument
114 list_add(&sp->lru, list); in set_slob_page_free()
115 __SetPageSlobFree(sp); in set_slob_page_free()
118 static inline void clear_slob_page_free(struct page *sp) in clear_slob_page_free() argument
120 list_del(&sp->lru); in clear_slob_page_free()
121 __ClearPageSlobFree(sp); in clear_slob_page_free()
217 static void *slob_page_alloc(struct page *sp, size_t size, int align) in slob_page_alloc() argument
222 for (prev = NULL, cur = sp->freelist; ; prev = cur, cur = slob_next(cur)) { in slob_page_alloc()
246 sp->freelist = next; in slob_page_alloc()
251 sp->freelist = cur + units; in slob_page_alloc()
255 sp->units -= units; in slob_page_alloc()
256 if (!sp->units) in slob_page_alloc()
257 clear_slob_page_free(sp); in slob_page_alloc()
270 struct page *sp; in slob_alloc() local
285 list_for_each_entry(sp, slob_list, lru) { in slob_alloc()
291 if (node != NUMA_NO_NODE && page_to_nid(sp) != node) in slob_alloc()
295 if (sp->units < SLOB_UNITS(size)) in slob_alloc()
299 prev = sp->lru.prev; in slob_alloc()
300 b = slob_page_alloc(sp, size, align); in slob_alloc()
319 sp = virt_to_page(b); in slob_alloc()
320 __SetPageSlab(sp); in slob_alloc()
323 sp->units = SLOB_UNITS(PAGE_SIZE); in slob_alloc()
324 sp->freelist = b; in slob_alloc()
325 INIT_LIST_HEAD(&sp->lru); in slob_alloc()
327 set_slob_page_free(sp, slob_list); in slob_alloc()
328 b = slob_page_alloc(sp, size, align); in slob_alloc()
342 struct page *sp; in slob_free() local
352 sp = virt_to_page(block); in slob_free()
357 if (sp->units + units == SLOB_UNITS(PAGE_SIZE)) { in slob_free()
359 if (slob_page_free(sp)) in slob_free()
360 clear_slob_page_free(sp); in slob_free()
362 __ClearPageSlab(sp); in slob_free()
363 page_mapcount_reset(sp); in slob_free()
368 if (!slob_page_free(sp)) { in slob_free()
370 sp->units = units; in slob_free()
371 sp->freelist = b; in slob_free()
381 set_slob_page_free(sp, slob_list); in slob_free()
389 sp->units += units; in slob_free()
391 if (b < (slob_t *)sp->freelist) { in slob_free()
392 if (b + units == sp->freelist) { in slob_free()
393 units += slob_units(sp->freelist); in slob_free()
394 sp->freelist = slob_next(sp->freelist); in slob_free()
396 set_slob(b, units, sp->freelist); in slob_free()
397 sp->freelist = b; in slob_free()
399 prev = sp->freelist; in slob_free()
486 struct page *sp; in kfree() local
494 sp = virt_to_page(block); in kfree()
495 if (PageSlab(sp)) { in kfree()
500 __free_pages(sp, compound_order(sp)); in kfree()
507 struct page *sp; in ksize() local
515 sp = virt_to_page(block); in ksize()
516 if (unlikely(!PageSlab(sp))) in ksize()
517 return PAGE_SIZE << compound_order(sp); in ksize()