From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751742AbaHQP20 (ORCPT ); Sun, 17 Aug 2014 11:28:26 -0400 Received: from mx1.redhat.com ([209.132.183.28]:20939 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751392AbaHQP2Z (ORCPT ); Sun, 17 Aug 2014 11:28:25 -0400 Date: Sun, 17 Aug 2014 17:25:49 +0200 From: Oleg Nesterov To: Peter Zijlstra Cc: Rik van Riel , Mike Galbraith , Hidetoshi Seto , Frank Mayhar , Frederic Weisbecker , Andrew Morton , Sanjay Rao , Larry Woodman , linux-kernel@vger.kernel.org, Kirill Tkhai Subject: [PATCH 0/2] sched: tasklist_lock cleanups (Was: don't use while_each_thread()) Message-ID: <20140817152549.GA17984@redhat.com> References: <20140813191938.GA19301@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20140813191938.GA19301@redhat.com> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08/13, Oleg Nesterov wrote: > > Peter, could you take these simple patches ? > > Better later than never... per-file, but please feel free to join > them in a single patch. > > read_lock_irq*(tasklist_lock) in kernel/sched/ files looks strange. > Why? I'll recheck, but this looks unneeded. Yes, please consider these minor cleanups on top of for_each_thread conversions. read_lock_irq(tasklist) in normalize_rt_tasks() doesn't really hurt, but it looks confusing. If we really have a reason to disable irqs this (subtle) reason should be documented. And I can't understand tg_has_rt_tasks(). Don't we need something like the patch below? If not, please do not ask me why I think so, I don't understand this black magic ;) But the usage of the global "runqueues" array looks suspicious. Oleg. --- x/kernel/sched/core.c +++ x/kernel/sched/core.c @@ -7354,7 +7354,7 @@ static inline int tg_has_rt_tasks(struct struct task_struct *g, *p; for_each_process_thread(g, p) { - if (rt_task(p) && task_rq(p)->rt.tg == tg) + if (rt_task(p) && task_group(p) == tg) return 1; }