1 #ifndef __LIBCFS_PTASK_H__
2 #define __LIBCFS_PTASK_H__
4 #include <linux/types.h>
5 #include <linux/bitops.h>
6 #include <linux/kernel.h>
7 #include <linux/cpumask.h>
8 #include <linux/uaccess.h>
9 #include <linux/notifier.h>
10 #include <linux/workqueue.h>
11 #include <linux/completion.h>
13 #include <linux/padata.h>
15 struct padata_priv {};
16 struct padata_instance {};
19 #define PTF_COMPLETE BIT(0)
20 #define PTF_AUTOFREE BIT(1)
21 #define PTF_ORDERED BIT(2)
22 #define PTF_USER_MM BIT(3)
23 #define PTF_ATOMIC BIT(4)
24 #define PTF_RETRY BIT(5)
26 struct cfs_ptask_engine {
27 struct padata_instance *pte_pinst;
28 struct workqueue_struct *pte_wq;
29 struct notifier_block pte_notifier;
34 typedef int (*cfs_ptask_cb_t)(struct cfs_ptask *);
37 struct padata_priv pt_padata;
38 struct completion pt_completion;
40 struct mm_struct *pt_mm;
41 unsigned int pt_flags;
43 cfs_ptask_cb_t pt_cbfunc;
49 struct padata_priv *cfs_ptask2padata(struct cfs_ptask *ptask)
51 return &ptask->pt_padata;
55 struct cfs_ptask *cfs_padata2ptask(struct padata_priv *padata)
57 return container_of(padata, struct cfs_ptask, pt_padata);
61 bool cfs_ptask_need_complete(struct cfs_ptask *ptask)
63 return ptask->pt_flags & PTF_COMPLETE;
67 bool cfs_ptask_is_autofree(struct cfs_ptask *ptask)
69 return ptask->pt_flags & PTF_AUTOFREE;
73 bool cfs_ptask_is_ordered(struct cfs_ptask *ptask)
75 return ptask->pt_flags & PTF_ORDERED;
79 bool cfs_ptask_use_user_mm(struct cfs_ptask *ptask)
81 return ptask->pt_flags & PTF_USER_MM;
85 bool cfs_ptask_is_atomic(struct cfs_ptask *ptask)
87 return ptask->pt_flags & PTF_ATOMIC;
91 bool cfs_ptask_is_retry(struct cfs_ptask *ptask)
93 return ptask->pt_flags & PTF_RETRY;
97 int cfs_ptask_result(struct cfs_ptask *ptask)
99 return ptask->pt_result;
102 struct cfs_ptask_engine *cfs_ptengine_init(const char *, const struct cpumask *);
103 void cfs_ptengine_fini(struct cfs_ptask_engine *);
104 int cfs_ptengine_set_cpumask(struct cfs_ptask_engine *, const struct cpumask *);
105 int cfs_ptengine_weight(struct cfs_ptask_engine *);
107 int cfs_ptask_submit(struct cfs_ptask *, struct cfs_ptask_engine *);
108 int cfs_ptask_wait_for(struct cfs_ptask *);
109 int cfs_ptask_init(struct cfs_ptask *, cfs_ptask_cb_t, void *,
112 #endif /* __LIBCFS_PTASK_H__ */