2012-06-08 13:37:54

by Hillf Danton

[permalink] [raw]
Subject: [patch] BFS 421: remove global runqueue lock in running tick

We simply deschedule current, with no bother grabbing global lock, since IPI,
if triggered by preempt, could not change our result, like no schedule when
preempt enabled.

preempt_enable_no_resched();
if (unlikely(need_resched()))
goto need_resched;


--- a/kernel/sched/bfs.c Wed Jun 6 21:02:50 2012
+++ b/kernel/sched/bfs.c Fri Jun 8 21:17:24 2012
@@ -2784,11 +2784,13 @@ static void task_running_tick(struct rq
} else if (rq->rq_time_slice >= RESCHED_US)
return;

- /* p->time_slice < RESCHED_US. We only modify task_struct under grq lock */
+ /*
+ * With irq disabled, current is descheduled without global lock
+ * held and IPI cared.
+ */
p = rq->curr;
- grq_lock();
- set_tsk_need_resched(p);
- grq_unlock();
+ if (!test_tsk_need_resched(p))
+ set_tsk_need_resched(p);
}


--


2012-06-08 13:45:45

by Chen

[permalink] [raw]
Subject: Re: [patch] BFS 421: remove global runqueue lock in running tick

Still, you haven't produced any usable patch. LOL

On Fri, Jun 8, 2012 at 9:37 PM, Hillf Danton <[email protected]> wrote:
> We simply deschedule current, with no bother grabbing global lock, since IPI,
> if triggered by preempt, could not change our result, like no schedule when
> preempt enabled.
>
> ? ? ? ?preempt_enable_no_resched();
> ? ? ? ?if (unlikely(need_resched()))
> ? ? ? ? ? ? ? ?goto need_resched;
>
>
> --- a/kernel/sched/bfs.c ? ? ? ?Wed Jun ?6 21:02:50 2012
> +++ b/kernel/sched/bfs.c ? ? ? ?Fri Jun ?8 21:17:24 2012
> @@ -2784,11 +2784,13 @@ static void task_running_tick(struct rq
> ? ? ? ?} else if (rq->rq_time_slice >= RESCHED_US)
> ? ? ? ? ? ? ? ? ? ? ? ?return;
>
> - ? ? ? /* p->time_slice < RESCHED_US. We only modify task_struct under grq lock */
> + ? ? ? /*
> + ? ? ? ?* With irq disabled, current is descheduled without global lock
> + ? ? ? ?* held and IPI cared.
> + ? ? ? ?*/
> ? ? ? ?p = rq->curr;
> - ? ? ? grq_lock();
> - ? ? ? set_tsk_need_resched(p);
> - ? ? ? grq_unlock();
> + ? ? ? if (!test_tsk_need_resched(p))
> + ? ? ? ? ? ? ? set_tsk_need_resched(p);
> ?}
>
>
> --
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at ?http://www.tux.org/lkml/

2012-06-08 16:47:59

by Heinz Diehl

[permalink] [raw]
Subject: Re: [patch] BFS 421: remove global runqueue lock in running tick

On 08.06.2012, Chen wrote:

> Still, you haven't produced any usable patch. LOL

...and Con Kolivas released BFS 4.22 some days ago..