Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756077AbbLALaO (ORCPT ); Tue, 1 Dec 2015 06:30:14 -0500 Received: from foss.arm.com ([217.140.101.70]:34732 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756016AbbLALaL (ORCPT ); Tue, 1 Dec 2015 06:30:11 -0500 Date: Tue, 1 Dec 2015 11:30:36 +0000 From: Juri Lelli To: Wanpeng Li Cc: Luca Abeni , Wanpeng li , Ingo Molnar , Peter Zijlstra , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v3] sched/deadline: fix earliest_dl.next logic Message-ID: <20151201113036.GW20439@e106622-lin> References: <20151127112647.GR20439@e106622-lin> <56584916.3080606@unitn.it> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2190 Lines: 56 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, - Juri -- 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/