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 8da6738..23717ee 100644 (file)
@@ -35,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);
@@ -74,14 +75,12 @@ struct padata_serial_queue {
  * @swork: work struct for serialization.
  * @work: work struct for parallelization.
  * @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 work_struct    work;
        atomic_t              num_obj;
-       int                   cpu_index;
 };
 
 /**
@@ -105,6 +104,7 @@ 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.
@@ -117,6 +117,7 @@ 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;
@@ -127,7 +128,8 @@ struct parallel_data {
  * 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
@@ -139,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;
@@ -151,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);