rxe_task.h (1691B)
1/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 2/* 3 * Copyright (c) 2016 Mellanox Technologies Ltd. All rights reserved. 4 * Copyright (c) 2015 System Fabric Works, Inc. All rights reserved. 5 */ 6 7#ifndef RXE_TASK_H 8#define RXE_TASK_H 9 10enum { 11 TASK_STATE_START = 0, 12 TASK_STATE_BUSY = 1, 13 TASK_STATE_ARMED = 2, 14}; 15 16/* 17 * data structure to describe a 'task' which is a short 18 * function that returns 0 as long as it needs to be 19 * called again. 20 */ 21struct rxe_task { 22 void *obj; 23 struct tasklet_struct tasklet; 24 int state; 25 spinlock_t state_lock; /* spinlock for task state */ 26 void *arg; 27 int (*func)(void *arg); 28 int ret; 29 char name[16]; 30 bool destroyed; 31}; 32 33/* 34 * init rxe_task structure 35 * arg => parameter to pass to fcn 36 * func => function to call until it returns != 0 37 */ 38int rxe_init_task(void *obj, struct rxe_task *task, 39 void *arg, int (*func)(void *), char *name); 40 41/* cleanup task */ 42void rxe_cleanup_task(struct rxe_task *task); 43 44/* 45 * raw call to func in loop without any checking 46 * can call when tasklets are disabled 47 */ 48int __rxe_do_task(struct rxe_task *task); 49 50/* 51 * common function called by any of the main tasklets 52 * If there is any chance that there is additional 53 * work to do someone must reschedule the task before 54 * leaving 55 */ 56void rxe_do_task(struct tasklet_struct *t); 57 58/* run a task, else schedule it to run as a tasklet, The decision 59 * to run or schedule tasklet is based on the parameter sched. 60 */ 61void rxe_run_task(struct rxe_task *task, int sched); 62 63/* keep a task from scheduling */ 64void rxe_disable_task(struct rxe_task *task); 65 66/* allow task to run */ 67void rxe_enable_task(struct rxe_task *task); 68 69#endif /* RXE_TASK_H */