linux/drivers/infiniband/sw/rxe/rxe_task.h
<<
>>
Prefs
   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 */
  70