Lines Matching refs:block_cb
265 struct flow_block_cb *block_cb; in flow_block_cb_alloc() local
267 block_cb = kzalloc(sizeof(*block_cb), GFP_KERNEL); in flow_block_cb_alloc()
268 if (!block_cb) in flow_block_cb_alloc()
271 block_cb->cb = cb; in flow_block_cb_alloc()
272 block_cb->cb_ident = cb_ident; in flow_block_cb_alloc()
273 block_cb->cb_priv = cb_priv; in flow_block_cb_alloc()
274 block_cb->release = release; in flow_block_cb_alloc()
276 return block_cb; in flow_block_cb_alloc()
280 void flow_block_cb_free(struct flow_block_cb *block_cb) in flow_block_cb_free() argument
282 if (block_cb->release) in flow_block_cb_free()
283 block_cb->release(block_cb->cb_priv); in flow_block_cb_free()
285 kfree(block_cb); in flow_block_cb_free()
292 struct flow_block_cb *block_cb; in flow_block_cb_lookup() local
294 list_for_each_entry(block_cb, &block->cb_list, list) { in flow_block_cb_lookup()
295 if (block_cb->cb == cb && in flow_block_cb_lookup()
296 block_cb->cb_ident == cb_ident) in flow_block_cb_lookup()
297 return block_cb; in flow_block_cb_lookup()
304 void *flow_block_cb_priv(struct flow_block_cb *block_cb) in flow_block_cb_priv() argument
306 return block_cb->cb_priv; in flow_block_cb_priv()
310 void flow_block_cb_incref(struct flow_block_cb *block_cb) in flow_block_cb_incref() argument
312 block_cb->refcnt++; in flow_block_cb_incref()
316 unsigned int flow_block_cb_decref(struct flow_block_cb *block_cb) in flow_block_cb_decref() argument
318 return --block_cb->refcnt; in flow_block_cb_decref()
325 struct flow_block_cb *block_cb; in flow_block_cb_is_busy() local
327 list_for_each_entry(block_cb, driver_block_list, driver_list) { in flow_block_cb_is_busy()
328 if (block_cb->cb == cb && in flow_block_cb_is_busy()
329 block_cb->cb_ident == cb_ident) in flow_block_cb_is_busy()
343 struct flow_block_cb *block_cb; in flow_block_cb_setup_simple() local
356 block_cb = flow_block_cb_alloc(cb, cb_ident, cb_priv, NULL); in flow_block_cb_setup_simple()
357 if (IS_ERR(block_cb)) in flow_block_cb_setup_simple()
358 return PTR_ERR(block_cb); in flow_block_cb_setup_simple()
360 flow_block_cb_add(block_cb, f); in flow_block_cb_setup_simple()
361 list_add_tail(&block_cb->driver_list, driver_block_list); in flow_block_cb_setup_simple()
364 block_cb = flow_block_cb_lookup(f->block, cb, cb_ident); in flow_block_cb_setup_simple()
365 if (!block_cb) in flow_block_cb_setup_simple()
368 flow_block_cb_remove(block_cb, f); in flow_block_cb_setup_simple()
369 list_del(&block_cb->driver_list); in flow_block_cb_setup_simple()
410 void (*cleanup)(struct flow_block_cb *block_cb);
520 void (*cleanup)(struct flow_block_cb *block_cb)) in flow_block_indr_init() argument
537 void (*cleanup)(struct flow_block_cb *block_cb)) in flow_indr_block_cb_alloc() argument
539 struct flow_block_cb *block_cb; in flow_indr_block_cb_alloc() local
541 block_cb = flow_block_cb_alloc(cb, cb_ident, cb_priv, release); in flow_indr_block_cb_alloc()
542 if (IS_ERR(block_cb)) in flow_indr_block_cb_alloc()
545 flow_block_indr_init(block_cb, bo, dev, sch, data, indr_cb_priv, cleanup); in flow_indr_block_cb_alloc()
546 list_add(&block_cb->indr.list, &flow_block_indr_list); in flow_indr_block_cb_alloc()
549 return block_cb; in flow_indr_block_cb_alloc()
565 enum tc_setup_type type, void (*cleanup)(struct flow_block_cb *block_cb), in indir_dev_add() argument
608 void (*cleanup)(struct flow_block_cb *block_cb)) in flow_indr_dev_setup_offload() argument