All of lore.kernel.org
 help / color / mirror / Atom feed
From: Darren Hart <dvhart@linux.intel.com>
To: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@elte.hu>,
	richard.purdie@linuxfoundation.org, dvhart@linux.intel.com
Subject: [PATCH 2/2] sched: allow users with rtprio rlimit to change from SCHED_IDLE policy
Date: Tue, 22 Feb 2011 13:04:34 -0800	[thread overview]
Message-ID: <1298408674-3130-3-git-send-email-dvhart@linux.intel.com> (raw)
In-Reply-To: <1298408674-3130-1-git-send-email-dvhart@linux.intel.com>

As it stands, users with rtprio rlimit permissions can change their policy from
SCHED_OTHER to SCHED_FIFO and back. They can change to SCHED_IDLE, but not back
to SCHED_FIFO. If they have the rtprio permission, they should be able to. Once
in SCHED_FIFO, they could go back to SCHED_OTHER. This patch allows users with
rtprio permission to change out of SCHED_IDLE.

This patch allows the following test-case to pass for users with rtprio
permissions with or without the ifdef block:

int main()
{
	int ret;
	struct sched_param sp;

	/* switch to SCHED_FIFO */
	sp.sched_priority = 1;
	ret = sched_setscheduler(0, SCHED_FIFO, &sp);
	printf("setscheduler FIFO: %d\n", ret);
	if (ret) return ret;

	/* switch to SCHED_IDLE */
	sp.sched_priority = 0;
	ret = sched_setscheduler(0, SCHED_IDLE, &sp);
	printf("setscheduler IDLE: %d\n", ret);
	if (ret) return ret;

	/* switch to SCHED_FIFO */
	sp.sched_priority = 1;
	ret = sched_setscheduler(0, SCHED_FIFO, &sp);
	printf("setscheduler FIFO: %d\n", ret);
	if (ret) return ret;
	/* switch back to SCHED_OTHER */
	sp.sched_priority = 0;
	ret = sched_setscheduler(0, SCHED_OTHER, &sp);
	printf("setscheduler OTHER: %d\n", ret);

	return ret;
}

Signed-off-by: Darren Hart <dvhart@linux.intel.com>
CC: Peter Zijlstra <peterz@infradead.org>
CC: Ingo Molnar <mingo@elte.hu>
CC: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 kernel/sched.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/kernel/sched.c b/kernel/sched.c
index 18d38e4..ec6943e 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -4822,12 +4822,16 @@ recheck:
 			    param->sched_priority > rlim_rtprio)
 				return -EPERM;
 		}
+
 		/*
-		 * Like positive nice levels, dont allow tasks to
-		 * move out of SCHED_IDLE either:
+		 * Like positive nice levels, don't allow tasks to move out of
+		 * SCHED_IDLE either. Make an exception if the user can set rt
+		 * policy normally.
 		 */
-		if (p->policy == SCHED_IDLE && policy != SCHED_IDLE)
-			return -EPERM;
+		if (p->policy == SCHED_IDLE && policy != SCHED_IDLE) {
+			if (!task_rlimit(p, RLIMIT_RTPRIO))
+				return -EPERM;
+		}
 
 		/* can't change other user's priorities */
 		if (!check_same_owner(p))
-- 
1.7.1


  parent reply	other threads:[~2011-02-22 21:05 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-22 21:04 [PATCH 0/2] sched: SCHED_BATCH fixes Darren Hart
2011-02-22 21:04 ` [PATCH 1/2] sched: allow SCHED_BATCH to preempt SCHED_IDLE tasks Darren Hart
2011-02-23  4:20   ` Mike Galbraith
2011-02-23  5:31     ` Mike Galbraith
2011-02-23  5:33     ` Darren Hart
2011-03-04 11:49   ` [tip:sched/core] sched: Allow " tip-bot for Darren Hart
2011-02-22 21:04 ` Darren Hart [this message]
2011-02-23 11:03   ` [PATCH 2/2] sched: allow users with rtprio rlimit to change from SCHED_IDLE policy Peter Zijlstra
2011-02-23 11:13     ` Ingo Molnar
2011-02-23 11:17       ` Peter Zijlstra
2011-02-23 11:35         ` Ingo Molnar
2011-02-23 15:52         ` Darren Hart
2011-02-23 16:00           ` Peter Zijlstra
2011-02-23 16:07             ` Darren Hart
2011-02-23 21:28             ` Darren Hart
2011-02-24 11:49               ` Peter Zijlstra
2011-03-04 11:49               ` [tip:sched/core] sched: Allow users with sufficient RLIMIT_NICE " tip-bot for Darren Hart

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1298408674-3130-3-git-send-email-dvhart@linux.intel.com \
    --to=dvhart@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    --cc=richard.purdie@linuxfoundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.