Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (39 commits) random: Reorder struct entropy_store to remove padding on 64bits padata: update API documentation padata: Remove padata_get_cpumask crypto: pcrypt - Update pcrypt cpumask according to the padata cpumask notifier crypto: pcrypt - Rename pcrypt_instance padata: Pass the padata cpumasks to the cpumask_change_notifier chain padata: Rearrange set_cpumask functions padata: Rename padata_alloc functions crypto: pcrypt - Dont calulate a callback cpu on empty callback cpumask padata: Check for valid cpumasks padata: Allocate cpumask dependend recources in any case padata: Fix cpu index counting crypto: geode_aes - Convert pci_table entries to PCI_VDEVICE (if PCI_ANY_ID is used) pcrypt: Added sysfs interface to pcrypt padata: Added sysfs primitives to padata subsystem padata: Make two separate cpumasks padata: update documentation padata: simplify serialization mechanism padata: make padata_do_parallel to return zero on success padata: Handle empty padata cpumasks ...
This commit is contained in:
@@ -25,6 +25,11 @@
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/kobject.h>
|
||||
|
||||
#define PADATA_CPU_SERIAL 0x01
|
||||
#define PADATA_CPU_PARALLEL 0x02
|
||||
|
||||
/**
|
||||
* struct padata_priv - Embedded to the users data structure.
|
||||
@@ -59,7 +64,20 @@ struct padata_list {
|
||||
};
|
||||
|
||||
/**
|
||||
* struct padata_queue - The percpu padata queues.
|
||||
* struct padata_serial_queue - The percpu padata serial queue
|
||||
*
|
||||
* @serial: List to wait for serialization after reordering.
|
||||
* @work: work struct for serialization.
|
||||
* @pd: Backpointer to the internal control structure.
|
||||
*/
|
||||
struct padata_serial_queue {
|
||||
struct padata_list serial;
|
||||
struct work_struct work;
|
||||
struct parallel_data *pd;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct padata_parallel_queue - The percpu padata parallel queue
|
||||
*
|
||||
* @parallel: List to wait for parallelization.
|
||||
* @reorder: List to wait for reordering after parallel processing.
|
||||
@@ -67,18 +85,28 @@ struct padata_list {
|
||||
* @pwork: work struct for parallelization.
|
||||
* @swork: work struct for serialization.
|
||||
* @pd: Backpointer to the internal control structure.
|
||||
* @work: work struct for parallelization.
|
||||
* @num_obj: Number of objects that are processed by this cpu.
|
||||
* @cpu_index: Index of the cpu.
|
||||
*/
|
||||
struct padata_queue {
|
||||
struct padata_list parallel;
|
||||
struct padata_list reorder;
|
||||
struct padata_list serial;
|
||||
struct work_struct pwork;
|
||||
struct work_struct swork;
|
||||
struct parallel_data *pd;
|
||||
atomic_t num_obj;
|
||||
int cpu_index;
|
||||
struct padata_parallel_queue {
|
||||
struct padata_list parallel;
|
||||
struct padata_list reorder;
|
||||
struct parallel_data *pd;
|
||||
struct work_struct work;
|
||||
atomic_t num_obj;
|
||||
int cpu_index;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct padata_cpumask - The cpumasks for the parallel/serial workers
|
||||
*
|
||||
* @pcpu: cpumask for the parallel workers.
|
||||
* @cbcpu: cpumask for the serial (callback) workers.
|
||||
*/
|
||||
struct padata_cpumask {
|
||||
cpumask_var_t pcpu;
|
||||
cpumask_var_t cbcpu;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -86,25 +114,29 @@ struct padata_queue {
|
||||
* that depends on the cpumask in use.
|
||||
*
|
||||
* @pinst: padata instance.
|
||||
* @queue: percpu padata queues.
|
||||
* @pqueue: percpu padata queues used for parallelization.
|
||||
* @squeue: percpu padata queues used for serialuzation.
|
||||
* @seq_nr: The sequence number that will be attached to the next object.
|
||||
* @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.
|
||||
* @cpumask: cpumask in use.
|
||||
* @cpumask: The cpumasks in use for parallel and serial workers.
|
||||
* @lock: Reorder lock.
|
||||
* @processed: Number of already processed objects.
|
||||
* @timer: Reorder timer.
|
||||
*/
|
||||
struct parallel_data {
|
||||
struct padata_instance *pinst;
|
||||
struct padata_queue *queue;
|
||||
atomic_t seq_nr;
|
||||
atomic_t reorder_objects;
|
||||
atomic_t refcnt;
|
||||
unsigned int max_seq_nr;
|
||||
cpumask_var_t cpumask;
|
||||
spinlock_t lock;
|
||||
struct timer_list timer;
|
||||
struct padata_instance *pinst;
|
||||
struct padata_parallel_queue *pqueue;
|
||||
struct padata_serial_queue *squeue;
|
||||
atomic_t seq_nr;
|
||||
atomic_t reorder_objects;
|
||||
atomic_t refcnt;
|
||||
unsigned int max_seq_nr;
|
||||
struct padata_cpumask cpumask;
|
||||
spinlock_t lock ____cacheline_aligned;
|
||||
unsigned int processed;
|
||||
struct timer_list timer;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -113,31 +145,48 @@ struct parallel_data {
|
||||
* @cpu_notifier: cpu hotplug notifier.
|
||||
* @wq: The workqueue in use.
|
||||
* @pd: The internal control structure.
|
||||
* @cpumask: User supplied cpumask.
|
||||
* @cpumask: User supplied cpumasks for parallel and serial works.
|
||||
* @cpumask_change_notifier: Notifiers chain for user-defined notify
|
||||
* callbacks that will be called when either @pcpu or @cbcpu
|
||||
* or both cpumasks change.
|
||||
* @kobj: padata instance kernel object.
|
||||
* @lock: padata instance lock.
|
||||
* @flags: padata flags.
|
||||
*/
|
||||
struct padata_instance {
|
||||
struct notifier_block cpu_notifier;
|
||||
struct workqueue_struct *wq;
|
||||
struct parallel_data *pd;
|
||||
cpumask_var_t cpumask;
|
||||
struct mutex lock;
|
||||
u8 flags;
|
||||
#define PADATA_INIT 1
|
||||
#define PADATA_RESET 2
|
||||
struct notifier_block cpu_notifier;
|
||||
struct workqueue_struct *wq;
|
||||
struct parallel_data *pd;
|
||||
struct padata_cpumask cpumask;
|
||||
struct blocking_notifier_head cpumask_change_notifier;
|
||||
struct kobject kobj;
|
||||
struct mutex lock;
|
||||
u8 flags;
|
||||
#define PADATA_INIT 1
|
||||
#define PADATA_RESET 2
|
||||
#define PADATA_INVALID 4
|
||||
};
|
||||
|
||||
extern struct padata_instance *padata_alloc(const struct cpumask *cpumask,
|
||||
struct workqueue_struct *wq);
|
||||
extern struct padata_instance *padata_alloc_possible(
|
||||
struct workqueue_struct *wq);
|
||||
extern struct padata_instance *padata_alloc(struct workqueue_struct *wq,
|
||||
const struct cpumask *pcpumask,
|
||||
const struct cpumask *cbcpumask);
|
||||
extern void padata_free(struct padata_instance *pinst);
|
||||
extern int padata_do_parallel(struct padata_instance *pinst,
|
||||
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,
|
||||
extern int padata_set_cpumask(struct padata_instance *pinst, int cpumask_type,
|
||||
cpumask_var_t cpumask);
|
||||
extern int padata_add_cpu(struct padata_instance *pinst, int cpu);
|
||||
extern int padata_remove_cpu(struct padata_instance *pinst, int cpu);
|
||||
extern void padata_start(struct padata_instance *pinst);
|
||||
extern int padata_set_cpumasks(struct padata_instance *pinst,
|
||||
cpumask_var_t pcpumask,
|
||||
cpumask_var_t cbcpumask);
|
||||
extern int padata_add_cpu(struct padata_instance *pinst, int cpu, int mask);
|
||||
extern int padata_remove_cpu(struct padata_instance *pinst, int cpu, int mask);
|
||||
extern int padata_start(struct padata_instance *pinst);
|
||||
extern void padata_stop(struct padata_instance *pinst);
|
||||
extern int padata_register_cpumask_notifier(struct padata_instance *pinst,
|
||||
struct notifier_block *nblock);
|
||||
extern int padata_unregister_cpumask_notifier(struct padata_instance *pinst,
|
||||
struct notifier_block *nblock);
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user