cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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 */