delayed_free
if (obj->ops->delayed_free) {
obj->ops->delayed_free(obj);
void (*delayed_free)(struct drm_i915_gem_object *obj);
.delayed_free = i915_ttm_delayed_free,
call_rcu(&sbi->rcu, delayed_free);
call_rcu(&sbi->rcu, delayed_free);
call_rcu(&sbi->rcu, delayed_free);
call_rcu(&server->rcu, delayed_free);
call_rcu(&cifs_sb->rcu, delayed_free);
for (i = 0, pf = delayed_free.pf; i < ARRAY_SIZE(delayed_free.pf); i++, pf++) {
init_rcu_head(&delayed_free.rcu_head);
INIT_LIST_HEAD(&delayed_free.pf[0].zapped);
INIT_LIST_HEAD(&delayed_free.pf[1].zapped);
} delayed_free;
return delayed_free.pf + delayed_free.index;
if (delayed_free.scheduled)
delayed_free.scheduled = true;
WARN_ON_ONCE(delayed_free.pf + delayed_free.index != pf);
delayed_free.index ^= 1;
if (WARN_ON_ONCE(ch != &delayed_free.rcu_head))
pf = delayed_free.pf + (delayed_free.index ^ 1);
delayed_free.scheduled = false;
prepare_call_rcu_zapped(delayed_free.pf + delayed_free.index);
call_rcu(&delayed_free.rcu_head, free_zapped_rcu);
call_rcu(&delayed_free.rcu_head, free_zapped_rcu);
struct pending_free *pf = delayed_free.pf;
call_rcu(&delayed_free.rcu_head, free_zapped_rcu);
struct pending_free *pf = delayed_free.pf;
call_rcu(&delayed_free.rcu_head, free_zapped_rcu);
sizeof(delayed_free)
struct rcu_delayed_free *delayed_free;
delayed_free = kmalloc_obj(*delayed_free, GFP_NOWAIT);
if (delayed_free) {
delayed_free->object = x;
call_rcu(&delayed_free->head, slab_free_after_rcu_debug);
struct rcu_delayed_free *delayed_free =
void *object = delayed_free->object;
kfree(delayed_free);