Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp413411ybi; Fri, 21 Jun 2019 01:44:35 -0700 (PDT) X-Google-Smtp-Source: APXvYqx1Od0WDIJYolG2pgvwiV68yUu2Hj9wmLrzM0kHEkyJwVz1bqhbMD4Kk2umGxXXpiBq1Fuo X-Received: by 2002:a65:62ca:: with SMTP id m10mr17184630pgv.57.1561106675211; Fri, 21 Jun 2019 01:44:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561106675; cv=none; d=google.com; s=arc-20160816; b=xqOZcnYziTLOwmlLkvLcEgn2i4abH02C6QY8UwtVYwcdIdLjdtJ+93ED7JdSoH76gL huZ9j5mTjsBCKtXD0Q8dmwmEWvNvugYy1Qlk9bnZsgOcoF5cag3xWir1XG6gT7gXHprj ftxCJrFPLE47Jr6Chk/WbLzg5rVKg2IflIXFgbZigWQg1H4dJbYI7MOaznTxvQGcAp1Z NP0D6FS9N1T0SRGw86nEh1zI/vGPl+03vdv8PWW2XUD0JOhjdhohhbF8PJzFDCGJNV9H 89C2orDLZxNDIEVJJeAdtPgbFyXUPygIYdj+dkMc2Pjxi4R4xJ7VMwXBEInO+EIYPAfv Csbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=8QE/ilzKnnygS/y1fhIFmMv0tzrEhBSy4MFTXqCW8CM=; b=D7ZBtVwywmyvTeDRVugf0d/9AqdffqKc+2dW/j6f2cjLvTiPmVy4FWqPJ2NwSxoFRe CTHY1V/uwtjaGRpYuTImjsGGYnN5xWf4CZ9u8ghWudKidjh8iz1vZ4a6nuVSwlwG5wUz C+Ut2SwGaZ8T4TNP3p1gr6XGXw5TU6g0AtAEeDXoeWXRlbYspzwz0W8b3MoDv2d0iExF 8aq8/WnayYGjdr7HUkcsjvBxUYW5n6HPFwuIcRJoKqjnZy8D4aSwdfug8/1klHNms0P1 GdR2RcLsa5xDHOwuLDkX5LyOrJMEayFFyp99ihcEH+NWFbmvnT67H9htLvYeuUXhYqCe TIeQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 1si2013255pgl.296.2019.06.21.01.44.19; Fri, 21 Jun 2019 01:44:35 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726596AbfFUImv (ORCPT + 99 others); Fri, 21 Jun 2019 04:42:51 -0400 Received: from foss.arm.com ([217.140.110.172]:50942 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726551AbfFUIms (ORCPT ); Fri, 21 Jun 2019 04:42:48 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D71AC1500; Fri, 21 Jun 2019 01:42:47 -0700 (PDT) Received: from e110439-lin.cambridge.arm.com (e110439-lin.cambridge.arm.com [10.1.194.43]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 843B23F246; Fri, 21 Jun 2019 01:42:45 -0700 (PDT) From: Patrick Bellasi To: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Cc: Ingo Molnar , Peter Zijlstra , Tejun Heo , "Rafael J . Wysocki" , Vincent Guittot , Viresh Kumar , Paul Turner , Quentin Perret , Dietmar Eggemann , Morten Rasmussen , Juri Lelli , Todd Kjos , Joel Fernandes , Steve Muckle , Suren Baghdasaryan , Alessio Balsini Subject: [PATCH v10 05/16] sched/core: Allow sched_setattr() to use the current policy Date: Fri, 21 Jun 2019 09:42:06 +0100 Message-Id: <20190621084217.8167-6-patrick.bellasi@arm.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190621084217.8167-1-patrick.bellasi@arm.com> References: <20190621084217.8167-1-patrick.bellasi@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The sched_setattr() syscall mandates that a policy is always specified. This requires to always know which policy a task will have when attributes are configured and this makes it impossible to add more generic task attributes valid across different scheduling policies. Reading the policy before setting generic tasks attributes is racy since we cannot be sure it is not changed concurrently. Introduce the required support to change generic task attributes without affecting the current task policy. This is done by adding an attribute flag (SCHED_FLAG_KEEP_POLICY) to enforce the usage of the current policy. Add support for the SETPARAM_POLICY policy, which is already used by the sched_setparam() POSIX syscall, to the sched_setattr() non-POSIX syscall. Signed-off-by: Patrick Bellasi Cc: Ingo Molnar Cc: Peter Zijlstra --- include/uapi/linux/sched.h | 4 +++- kernel/sched/core.c | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/sched.h b/include/uapi/linux/sched.h index ed4ee170bee2..58b2368d3634 100644 --- a/include/uapi/linux/sched.h +++ b/include/uapi/linux/sched.h @@ -51,9 +51,11 @@ #define SCHED_FLAG_RESET_ON_FORK 0x01 #define SCHED_FLAG_RECLAIM 0x02 #define SCHED_FLAG_DL_OVERRUN 0x04 +#define SCHED_FLAG_KEEP_POLICY 0x08 #define SCHED_FLAG_ALL (SCHED_FLAG_RESET_ON_FORK | \ SCHED_FLAG_RECLAIM | \ - SCHED_FLAG_DL_OVERRUN) + SCHED_FLAG_DL_OVERRUN | \ + SCHED_FLAG_KEEP_POLICY) #endif /* _UAPI_LINUX_SCHED_H */ diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 4b8bb6678f16..0cf6d9270868 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -4886,6 +4886,8 @@ SYSCALL_DEFINE3(sched_setattr, pid_t, pid, struct sched_attr __user *, uattr, if ((int)attr.sched_policy < 0) return -EINVAL; + if (attr.sched_flags & SCHED_FLAG_KEEP_POLICY) + attr.sched_policy = SETPARAM_POLICY; rcu_read_lock(); retval = -ESRCH; -- 2.21.0