Merge tag 'ovl-fixes-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs
[linux-2.6-microblaze.git] / include / linux / padata.h
index 56f09e3..23717ee 100644 (file)
@@ -12,7 +12,6 @@
 #include <linux/workqueue.h>
 #include <linux/spinlock.h>
 #include <linux/list.h>
-#include <linux/timer.h>
 #include <linux/notifier.h>
 #include <linux/kobject.h>
 
@@ -36,6 +35,7 @@ struct padata_priv {
        struct parallel_data    *pd;
        int                     cb_cpu;
        int                     cpu;
+       unsigned int            seq_nr;
        int                     info;
        void                    (*parallel)(struct padata_priv *padata);
        void                    (*serial)(struct padata_priv *padata);
@@ -73,20 +73,14 @@ struct padata_serial_queue {
  * @serial: List to wait for serialization after reordering.
  * @pwork: work struct for parallelization.
  * @swork: work struct for serialization.
- * @pd: Backpointer to the internal control structure.
  * @work: work struct for parallelization.
- * @reorder_work: work struct for reordering.
  * @num_obj: Number of objects that are processed by this cpu.
- * @cpu_index: Index of the cpu.
  */
 struct padata_parallel_queue {
        struct padata_list    parallel;
        struct padata_list    reorder;
-       struct parallel_data *pd;
        struct work_struct    work;
-       struct work_struct    reorder_work;
        atomic_t              num_obj;
-       int                   cpu_index;
 };
 
 /**
@@ -110,10 +104,11 @@ struct padata_cpumask {
  * @reorder_objects: Number of objects waiting in the reorder queues.
  * @refcnt: Number of objects holding a reference on this parallel_data.
  * @max_seq_nr:  Maximal used sequence number.
+ * @processed: Number of already processed objects.
+ * @cpu: Next CPU to be processed.
  * @cpumask: The cpumasks in use for parallel and serial workers.
+ * @reorder_work: work struct for reordering.
  * @lock: Reorder lock.
- * @processed: Number of already processed objects.
- * @timer: Reorder timer.
  */
 struct parallel_data {
        struct padata_instance          *pinst;
@@ -122,17 +117,19 @@ struct parallel_data {
        atomic_t                        reorder_objects;
        atomic_t                        refcnt;
        atomic_t                        seq_nr;
+       unsigned int                    processed;
+       int                             cpu;
        struct padata_cpumask           cpumask;
+       struct work_struct              reorder_work;
        spinlock_t                      lock ____cacheline_aligned;
-       unsigned int                    processed;
-       struct timer_list               timer;
 };
 
 /**
  * struct padata_instance - The overall control structure.
  *
  * @cpu_notifier: cpu hotplug notifier.
- * @wq: The workqueue in use.
+ * @parallel_wq: The workqueue used for parallel work.
+ * @serial_wq: The workqueue used for serial work.
  * @pd: The internal control structure.
  * @cpumask: User supplied cpumasks for parallel and serial works.
  * @cpumask_change_notifier: Notifiers chain for user-defined notify
@@ -144,7 +141,8 @@ struct parallel_data {
  */
 struct padata_instance {
        struct hlist_node                node;
-       struct workqueue_struct         *wq;
+       struct workqueue_struct         *parallel_wq;
+       struct workqueue_struct         *serial_wq;
        struct parallel_data            *pd;
        struct padata_cpumask           cpumask;
        struct blocking_notifier_head    cpumask_change_notifier;
@@ -156,11 +154,10 @@ struct padata_instance {
 #define        PADATA_INVALID  4
 };
 
-extern struct padata_instance *padata_alloc_possible(
-                                       struct workqueue_struct *wq);
+extern struct padata_instance *padata_alloc_possible(const char *name);
 extern void padata_free(struct padata_instance *pinst);
 extern int padata_do_parallel(struct padata_instance *pinst,
-                             struct padata_priv *padata, int cb_cpu);
+                             struct padata_priv *padata, int *cb_cpu);
 extern void padata_do_serial(struct padata_priv *padata);
 extern int padata_set_cpumask(struct padata_instance *pinst, int cpumask_type,
                              cpumask_var_t cpumask);