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

Commit d331d43d authored by Johannes Weiner's avatar Johannes Weiner Committed by Patrick Daly
Browse files

sched: introduce this_rq_lock_irq()

do_sched_yield() disables IRQs, looks up this_rq() and locks it.  The next
patch is adding another site with the same pattern, so provide a
convenience function for it.

Link: http://lkml.kernel.org/r/20180828172258.3185-8-hannes@cmpxchg.org


Signed-off-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Tested-by: default avatarSuren Baghdasaryan <surenb@google.com>
Tested-by: default avatarDaniel Drake <drake@endlessm.com>
Cc: Christopher Lameter <cl@linux.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Johannes Weiner <jweiner@fb.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Enderborg <peter.enderborg@sony.com>
Cc: Randy Dunlap <rdunlap@infradead.org>
Cc: Shakeel Butt <shakeelb@google.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Vinayak Menon <vinmenon@codeaurora.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Change-Id: I06a20fdb7386c7837f3c1c593f7ad6fc70022c4b
Git-commit: 246b3b3342c9b0a2e24cda2178be87bc36e1c874
Git-repo: https://source.codeaurora.org/quic/la/kernel/msm-4.19


Signed-off-by: default avatarPatrick Daly <pdaly@codeaurora.org>
parent 86c2a1d9
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -5195,9 +5195,7 @@ static void do_sched_yield(void)
	struct rq_flags rf;
	struct rq *rq;

	local_irq_disable();
	rq = this_rq();
	rq_lock(rq, &rf);
	rq = this_rq_lock_irq(&rf);

	schedstat_inc(rq->yld_count);
	current->sched_class->yield_task(rq);
+12 −0
Original line number Diff line number Diff line
@@ -1302,6 +1302,18 @@ rq_unlock(struct rq *rq, struct rq_flags *rf)
	raw_spin_unlock(&rq->lock);
}

static inline struct rq *
this_rq_lock_irq(struct rq_flags *rf)
	__acquires(rq->lock)
{
	struct rq *rq;

	local_irq_disable();
	rq = this_rq();
	rq_lock(rq, rf);
	return rq;
}

#ifdef CONFIG_NUMA
enum numa_topology_type {
	NUMA_DIRECT,