Implement current_work() function in the LinuxKPI.
Tested by: Johannes Lundberg <johalun0@gmail.com> MFC after: 1 week Sponsored by: Mellanox Technologies
This commit is contained in:
parent
936b2b64ae
commit
549dcdb34e
@ -60,6 +60,7 @@
|
||||
|
||||
#define TASK_COMM_LEN (MAXCOMLEN + 1)
|
||||
|
||||
struct work_struct;
|
||||
struct task_struct {
|
||||
struct thread *task_thread;
|
||||
struct mm_struct *mm;
|
||||
@ -78,6 +79,7 @@ struct task_struct {
|
||||
TAILQ_ENTRY(task_struct) rcu_entry;
|
||||
int rcu_recurse;
|
||||
int bsd_interrupt_value;
|
||||
struct work_struct *work; /* current work struct, if set */
|
||||
};
|
||||
|
||||
#define current ({ \
|
||||
|
@ -209,6 +209,9 @@ do { \
|
||||
#define destroy_workqueue(wq) \
|
||||
linux_destroy_workqueue(wq)
|
||||
|
||||
#define current_work() \
|
||||
linux_current_work()
|
||||
|
||||
/* prototypes */
|
||||
|
||||
extern struct workqueue_struct *system_wq;
|
||||
@ -232,5 +235,6 @@ extern bool linux_flush_work(struct work_struct *);
|
||||
extern bool linux_flush_delayed_work(struct delayed_work *);
|
||||
extern bool linux_work_pending(struct work_struct *);
|
||||
extern bool linux_work_busy(struct work_struct *);
|
||||
extern struct work_struct *linux_current_work(void);
|
||||
|
||||
#endif /* _LINUX_WORKQUEUE_H_ */
|
||||
|
@ -220,8 +220,9 @@ linux_work_fn(void *context, int pending)
|
||||
struct work_struct *work;
|
||||
struct workqueue_struct *wq;
|
||||
struct work_exec exec;
|
||||
struct task_struct *task;
|
||||
|
||||
linux_set_current(curthread);
|
||||
task = current;
|
||||
|
||||
/* setup local variables */
|
||||
work = context;
|
||||
@ -240,9 +241,15 @@ linux_work_fn(void *context, int pending)
|
||||
case WORK_ST_CANCEL:
|
||||
WQ_EXEC_UNLOCK(wq);
|
||||
|
||||
/* set current work structure */
|
||||
task->work = work;
|
||||
|
||||
/* call work function */
|
||||
work->func(work);
|
||||
|
||||
/* set current work structure */
|
||||
task->work = NULL;
|
||||
|
||||
WQ_EXEC_LOCK(wq);
|
||||
/* check if unblocked */
|
||||
if (exec.target != work) {
|
||||
@ -579,6 +586,12 @@ linux_init_delayed_work(struct delayed_work *dwork, work_func_t func)
|
||||
callout_init_mtx(&dwork->timer.callout, &dwork->timer.mtx, 0);
|
||||
}
|
||||
|
||||
struct work_struct *
|
||||
linux_current_work(void)
|
||||
{
|
||||
return (current->work);
|
||||
}
|
||||
|
||||
static void
|
||||
linux_work_init(void *arg)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user