Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 626ab0e6 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Linus Torvalds
Browse files

[PATCH] list: use list_replace_init() instead of list_splice_init()



list_splice_init(list, head) does unneeded job if it is known that
list_empty(head) == 1.  We can use list_replace_init() instead.

Signed-off-by: default avatarOleg Nesterov <oleg@tv-sign.ru>
Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 54e73770
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -210,13 +210,13 @@ int change_page_attr(struct page *page, int numpages, pgprot_t prot)

void global_flush_tlb(void)
{
	LIST_HEAD(l);
	struct list_head l;
	struct page *pg, *next;

	BUG_ON(irqs_disabled());

	spin_lock_irq(&cpa_lock);
	list_splice_init(&df_list, &l);
	list_replace_init(&df_list, &l);
	spin_unlock_irq(&cpa_lock);
	flush_map();
	list_for_each_entry_safe(pg, next, &l, lru)
+2 −3
Original line number Diff line number Diff line
@@ -3359,12 +3359,11 @@ EXPORT_SYMBOL(end_that_request_chunk);
 */
static void blk_done_softirq(struct softirq_action *h)
{
	struct list_head *cpu_list;
	LIST_HEAD(local_list);
	struct list_head *cpu_list, local_list;

	local_irq_disable();
	cpu_list = &__get_cpu_var(blk_cpu_done);
	list_splice_init(cpu_list, &local_list);
	list_replace_init(cpu_list, &local_list);
	local_irq_enable();

	while (!list_empty(&local_list)) {
+2 −2
Original line number Diff line number Diff line
@@ -777,11 +777,11 @@ out:
static int __aio_run_iocbs(struct kioctx *ctx)
{
	struct kiocb *iocb;
	LIST_HEAD(run_list);
	struct list_head run_list;

	assert_spin_locked(&ctx->ctx_lock);

	list_splice_init(&ctx->run_list, &run_list);
	list_replace_init(&ctx->run_list, &run_list);
	while (!list_empty(&run_list)) {
		iocb = list_entry(run_list.next, struct kiocb,
			ki_run_list);
+4 −4
Original line number Diff line number Diff line
@@ -419,7 +419,7 @@ static inline void __run_timers(tvec_base_t *base)

	spin_lock_irq(&base->lock);
	while (time_after_eq(jiffies, base->timer_jiffies)) {
		struct list_head work_list = LIST_HEAD_INIT(work_list);
		struct list_head work_list;
		struct list_head *head = &work_list;
 		int index = base->timer_jiffies & TVR_MASK;

@@ -432,7 +432,7 @@ static inline void __run_timers(tvec_base_t *base)
					!cascade(base, &base->tv4, INDEX(2)))
			cascade(base, &base->tv5, INDEX(3));
		++base->timer_jiffies;
		list_splice_init(base->tv1.vec + index, &work_list);
		list_replace_init(base->tv1.vec + index, &work_list);
		while (!list_empty(head)) {
			void (*fn)(unsigned long);
			unsigned long data;
+2 −2
Original line number Diff line number Diff line
@@ -531,11 +531,11 @@ int current_is_keventd(void)
static void take_over_work(struct workqueue_struct *wq, unsigned int cpu)
{
	struct cpu_workqueue_struct *cwq = per_cpu_ptr(wq->cpu_wq, cpu);
	LIST_HEAD(list);
	struct list_head list;
	struct work_struct *work;

	spin_lock_irq(&cwq->lock);
	list_splice_init(&cwq->worklist, &list);
	list_replace_init(&cwq->worklist, &list);

	while (!list_empty(&list)) {
		printk("Taking work for %s\n", wq->name);
Loading