mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 15:03:53 +02:00
llist: make llist_add_batch() a static inline
The function is small enough that it should be, and it's a (very) hot path
for io_uring. Doing this actually reduces my vmlinux text size for my
standard build/test box.
Before:
axboe@r7625 ~/g/linux (test)> size vmlinux
text data bss dec hex filename
19892174 5938310 2470432
28300916 1afd674 vmlinux
After:
axboe@r7625 ~/g/linux (test)> size vmlinux
text data bss dec hex filename
19891878 5938310 2470436 28300624 1afd550 vmlinux
Link: https://lkml.kernel.org/r/f1d104c6-7ac8-457a-a53d-6bb741421b2f@kernel.dk
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
5ef2dccfcc
commit
375700bab5
|
@ -223,9 +223,26 @@ static inline struct llist_node *llist_next(struct llist_node *node)
|
|||
return node->next;
|
||||
}
|
||||
|
||||
extern bool llist_add_batch(struct llist_node *new_first,
|
||||
struct llist_node *new_last,
|
||||
struct llist_head *head);
|
||||
/**
|
||||
* llist_add_batch - add several linked entries in batch
|
||||
* @new_first: first entry in batch to be added
|
||||
* @new_last: last entry in batch to be added
|
||||
* @head: the head for your lock-less list
|
||||
*
|
||||
* Return whether list is empty before adding.
|
||||
*/
|
||||
static inline bool llist_add_batch(struct llist_node *new_first,
|
||||
struct llist_node *new_last,
|
||||
struct llist_head *head)
|
||||
{
|
||||
struct llist_node *first = READ_ONCE(head->first);
|
||||
|
||||
do {
|
||||
new_last->next = first;
|
||||
} while (!try_cmpxchg(&head->first, &first, new_first));
|
||||
|
||||
return !first;
|
||||
}
|
||||
|
||||
static inline bool __llist_add_batch(struct llist_node *new_first,
|
||||
struct llist_node *new_last,
|
||||
|
|
22
lib/llist.c
22
lib/llist.c
|
@ -14,28 +14,6 @@
|
|||
#include <linux/export.h>
|
||||
#include <linux/llist.h>
|
||||
|
||||
|
||||
/**
|
||||
* llist_add_batch - add several linked entries in batch
|
||||
* @new_first: first entry in batch to be added
|
||||
* @new_last: last entry in batch to be added
|
||||
* @head: the head for your lock-less list
|
||||
*
|
||||
* Return whether list is empty before adding.
|
||||
*/
|
||||
bool llist_add_batch(struct llist_node *new_first, struct llist_node *new_last,
|
||||
struct llist_head *head)
|
||||
{
|
||||
struct llist_node *first = READ_ONCE(head->first);
|
||||
|
||||
do {
|
||||
new_last->next = first;
|
||||
} while (!try_cmpxchg(&head->first, &first, new_first));
|
||||
|
||||
return !first;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(llist_add_batch);
|
||||
|
||||
/**
|
||||
* llist_del_first - delete the first entry of lock-less list
|
||||
* @head: the head for your lock-less list
|
||||
|
|
Loading…
Reference in New Issue
Block a user