Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756130AbbLAMOa (ORCPT ); Tue, 1 Dec 2015 07:14:30 -0500 Received: from mail-lf0-f47.google.com ([209.85.215.47]:34631 "EHLO mail-lf0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754335AbbLAMO2 (ORCPT ); Tue, 1 Dec 2015 07:14:28 -0500 MIME-Version: 1.0 In-Reply-To: <20151201113036.GW20439@e106622-lin> References: <20151127112647.GR20439@e106622-lin> <56584916.3080606@unitn.it> <20151201113036.GW20439@e106622-lin> Date: Tue, 1 Dec 2015 20:14:27 +0800 Message-ID: Subject: Re: [PATCH v3] sched/deadline: fix earliest_dl.next logic From: Wanpeng Li To: Juri Lelli Cc: Luca Abeni , Wanpeng li , Ingo Molnar , Peter Zijlstra , "linux-kernel@vger.kernel.org" Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2350 Lines: 58 2015-12-01 19:30 GMT+08:00 Juri Lelli : > On 30/11/15 10:20, Wanpeng Li wrote: >> 2015-11-27 20:14 GMT+08:00 Luca Abeni : >> > Hi all, >> > >> > I ran some quick tests on this patch (because I was working on something >> > related), and it seems to me that it triggers a bug. Here are some >> > information: > > [snip] > >> > >> > Here is my understanding of the crash: >> > - schedule() invokes pick_next_task_dl() which wants to do a context switch >> > (by selecting >> > for execution a new task "p" which is different from "prev") >> > - pick_next_task_dl() invokes put_prev, which puts the "prev" task in the >> > pushable tasks >> > queue (WARNING! "prev" is still the "current" task in this rq, because the >> > scheduler is >> > still running... I think this is the source of the issue) >> > - then, pick_next_task_dl() invokes dequeue_pushable_dl_task() on p, to >> > remove the selected >> > task from the pushable tasks queue... >> > - ...But after your patch dequeue_pushable_dl_task() invokes >> > pick_next_pushable_dl_task(). >> > Which sees that the next pushable task is the "current" task (see above). >> > This happens >> > becuase "prev" has already been inserted in the pushable tasks queue, and >> > can be the >> > next pushable task... But "current" has not been updated yet. >> > - The BUG_ON() at line 1443 of deadline.c is just "BUG_ON(task_current(rq, >> > p))" >> >> Thanks for your report and great analyse, Luca, you are right. >> >> > >> > Summing up, I think pick_next_pushable_dl_task() cannot be called from >> > dequeue_pushable_dl_task() (at least, not without removing or modifying that >> > BUG_ON()). >> >> Juri, how about remove this BUG_ON() just like rt class? >> > > It seems that we actually check the very same conditions for RT, as we > do for DL. The difference is that RT doesn't call pick_next_pushable > _task(). I think we can do the same, just checking and eventually using > the updated leftmost in dequeue_pushable_dl_task(). Thanks for your suggestion, just send out v4. Regards, Wanpeng Li -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/