smp: Cleanup smp_call_function*()
Get rid of the __call_single_node union and cleanup the API a little to avoid external code relying on the structure layout as much. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
This commit is contained in:
parent
7a9f50a058
commit
545b8c8df4
13 changed files with 61 additions and 95 deletions
|
|
@ -21,24 +21,23 @@ typedef bool (*smp_cond_func_t)(int cpu, void *info);
|
|||
* structure shares (partial) layout with struct irq_work
|
||||
*/
|
||||
struct __call_single_data {
|
||||
union {
|
||||
struct __call_single_node node;
|
||||
struct {
|
||||
struct llist_node llist;
|
||||
unsigned int flags;
|
||||
#ifdef CONFIG_64BIT
|
||||
u16 src, dst;
|
||||
#endif
|
||||
};
|
||||
};
|
||||
struct __call_single_node node;
|
||||
smp_call_func_t func;
|
||||
void *info;
|
||||
};
|
||||
|
||||
#define CSD_INIT(_func, _info) \
|
||||
(struct __call_single_data){ .func = (_func), .info = (_info), }
|
||||
|
||||
/* Use __aligned() to avoid to use 2 cache lines for 1 csd */
|
||||
typedef struct __call_single_data call_single_data_t
|
||||
__aligned(sizeof(struct __call_single_data));
|
||||
|
||||
#define INIT_CSD(_csd, _func, _info) \
|
||||
do { \
|
||||
*(_csd) = CSD_INIT((_func), (_info)); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Enqueue a llist_node on the call_single_queue; be very careful, read
|
||||
* flush_smp_call_function_queue() in detail.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue