mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 1/2] sched/dl: Add necessary dl_{task,prio}
       [not found] <20140604124735.3951.61242.stgit@tkhai>
@ 2014-06-04 12:57 ` Kirill Tkhai
  2014-06-04 12:59 ` [PATCH 2/2] sched/rt: Fix rt_prio() Kirill Tkhai
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 4+ messages in thread
From: Kirill Tkhai @ 2014-06-04 12:57 UTC (permalink / raw)
  To: linux-kernel; +Cc: Peter Zijlstra, Ingo Molnar, tkhai


Add some symmetric to rt checks.

Signed-off-by: Kirill Tkhai <ktkhai@parallels.com>
---
 kernel/locking/mutex.c |    8 +++++---
 kernel/sched/core.c    |    4 ++--
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
index bc73d33..cb9f381 100644
--- a/kernel/locking/mutex.c
+++ b/kernel/locking/mutex.c
@@ -21,6 +21,7 @@
 #include <linux/ww_mutex.h>
 #include <linux/sched.h>
 #include <linux/sched/rt.h>
+#include <linux/sched/deadline.h>
 #include <linux/export.h>
 #include <linux/spinlock.h>
 #include <linux/interrupt.h>
@@ -459,10 +460,11 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
 		/*
 		 * When there's no owner, we might have preempted between the
 		 * owner acquiring the lock and setting the owner field. If
-		 * we're an RT task that will live-lock because we won't let
-		 * the owner complete.
+		 * we're an RT or DL task that will live-lock because we won't
+		 * let the owner complete.
 		 */
-		if (!owner && (need_resched() || rt_task(task)))
+		if (!owner &&
+		    (need_resched() || rt_task(task) || dl_task(task)))
 			break;
 
 		/*
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 240aa83..ba7617a 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -962,11 +962,11 @@ static int effective_prio(struct task_struct *p)
 {
 	p->normal_prio = normal_prio(p);
 	/*
-	 * If we are RT tasks or we were boosted to RT priority,
+	 * If we are RT or DL tasks or we were boosted to RT or DL priority,
 	 * keep the priority unchanged. Otherwise, update priority
 	 * to the normal priority:
 	 */
-	if (!rt_prio(p->prio))
+	if (!rt_prio(p->prio) && !dl_prio(p->prio))
 		return p->normal_prio;
 	return p->prio;
 }




^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 2/2] sched/rt: Fix rt_prio()
       [not found] <20140604124735.3951.61242.stgit@tkhai>
  2014-06-04 12:57 ` [PATCH 1/2] sched/dl: Add necessary dl_{task,prio} Kirill Tkhai
@ 2014-06-04 12:59 ` Kirill Tkhai
  2014-06-04 14:04 ` [PATCH RESEND 1/2] sched/dl: Add necessary dl_{task,prio} Kirill Tkhai
  2014-06-04 14:04 ` [PATCH RESEND 2/2] sched/rt: Fix rt_prio() Kirill Tkhai
  3 siblings, 0 replies; 4+ messages in thread
From: Kirill Tkhai @ 2014-06-04 12:59 UTC (permalink / raw)
  To: linux-kernel; +Cc: Peter Zijlstra, Ingo Molnar, tkhai


The set of rt_prio() contains dl_prio() subset. Fix that.

Signed-off-by: Kirill Tkhai <ktkhai@parallels.com>
---
 include/linux/sched/deadline.h |    8 +-------
 include/linux/sched/prio.h     |    8 +++++---
 include/linux/sched/rt.h       |    2 +-
 3 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/include/linux/sched/deadline.h b/include/linux/sched/deadline.h
index 9d303b8..e529305 100644
--- a/include/linux/sched/deadline.h
+++ b/include/linux/sched/deadline.h
@@ -1,13 +1,7 @@
 #ifndef _SCHED_DEADLINE_H
 #define _SCHED_DEADLINE_H
 
-/*
- * SCHED_DEADLINE tasks has negative priorities, reflecting
- * the fact that any of them has higher prio than RT and
- * NORMAL/BATCH tasks.
- */
-
-#define MAX_DL_PRIO		0
+#include <linux/sched/prio.h>
 
 static inline int dl_prio(int prio)
 {
diff --git a/include/linux/sched/prio.h b/include/linux/sched/prio.h
index d9cf5a5..0d6c552 100644
--- a/include/linux/sched/prio.h
+++ b/include/linux/sched/prio.h
@@ -6,18 +6,20 @@
 #define NICE_WIDTH	(MAX_NICE - MIN_NICE + 1)
 
 /*
- * Priority of a process goes from 0..MAX_PRIO-1, valid RT
- * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH
+ * Priority of a process goes from MAX_DL_PRIO-1..MAX_PRIO-1,
+ * SCHED_DEADLINE tasks have negative priorities, valid RT
+ * value is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH
  * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority
  * values are inverted: lower p->prio value means higher priority.
  *
  * The MAX_USER_RT_PRIO value allows the actual maximum
  * RT priority to be separate from the value exported to
  * user-space.  This allows kernel threads to set their
- * priority to a value higher than any user task. Note:
+ * priority to a value higher than any user RT task. Note:
  * MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO.
  */
 
+#define MAX_DL_PRIO		0
 #define MAX_USER_RT_PRIO	100
 #define MAX_RT_PRIO		MAX_USER_RT_PRIO
 
diff --git a/include/linux/sched/rt.h b/include/linux/sched/rt.h
index 6341f5b..dca43ed 100644
--- a/include/linux/sched/rt.h
+++ b/include/linux/sched/rt.h
@@ -5,7 +5,7 @@
 
 static inline int rt_prio(int prio)
 {
-	if (unlikely(prio < MAX_RT_PRIO))
+	if (unlikely(prio < MAX_RT_PRIO && prio >= MAX_DL_PRIO))
 		return 1;
 	return 0;
 }





^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH RESEND 1/2] sched/dl: Add necessary dl_{task,prio}
       [not found] <20140604124735.3951.61242.stgit@tkhai>
  2014-06-04 12:57 ` [PATCH 1/2] sched/dl: Add necessary dl_{task,prio} Kirill Tkhai
  2014-06-04 12:59 ` [PATCH 2/2] sched/rt: Fix rt_prio() Kirill Tkhai
@ 2014-06-04 14:04 ` Kirill Tkhai
  2014-06-04 14:04 ` [PATCH RESEND 2/2] sched/rt: Fix rt_prio() Kirill Tkhai
  3 siblings, 0 replies; 4+ messages in thread
From: Kirill Tkhai @ 2014-06-04 14:04 UTC (permalink / raw)
  To: linux-kernel; +Cc: Peter Zijlstra, Ingo Molnar, Juri Lelli, tkhai


Add some symmetric to rt checks.

Signed-off-by: Kirill Tkhai <ktkhai@parallels.com>
CC: Juri Lelli <juri.lelli@gmail.com>
CC: Peter Zijlstra <peterz@infradead.org>
CC: Ingo Molnar <mingo@kernel.org>
---
 kernel/locking/mutex.c |    8 +++++---
 kernel/sched/core.c    |    4 ++--
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
index bc73d33..cb9f381 100644
--- a/kernel/locking/mutex.c
+++ b/kernel/locking/mutex.c
@@ -21,6 +21,7 @@
 #include <linux/ww_mutex.h>
 #include <linux/sched.h>
 #include <linux/sched/rt.h>
+#include <linux/sched/deadline.h>
 #include <linux/export.h>
 #include <linux/spinlock.h>
 #include <linux/interrupt.h>
@@ -459,10 +460,11 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
 		/*
 		 * When there's no owner, we might have preempted between the
 		 * owner acquiring the lock and setting the owner field. If
-		 * we're an RT task that will live-lock because we won't let
-		 * the owner complete.
+		 * we're an RT or DL task that will live-lock because we won't
+		 * let the owner complete.
 		 */
-		if (!owner && (need_resched() || rt_task(task)))
+		if (!owner &&
+		    (need_resched() || rt_task(task) || dl_task(task)))
 			break;
 
 		/*
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 240aa83..ba7617a 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -962,11 +962,11 @@ static int effective_prio(struct task_struct *p)
 {
 	p->normal_prio = normal_prio(p);
 	/*
-	 * If we are RT tasks or we were boosted to RT priority,
+	 * If we are RT or DL tasks or we were boosted to RT or DL priority,
 	 * keep the priority unchanged. Otherwise, update priority
 	 * to the normal priority:
 	 */
-	if (!rt_prio(p->prio))
+	if (!rt_prio(p->prio) && !dl_prio(p->prio))
 		return p->normal_prio;
 	return p->prio;
 }





^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH RESEND 2/2] sched/rt: Fix rt_prio()
       [not found] <20140604124735.3951.61242.stgit@tkhai>
                   ` (2 preceding siblings ...)
  2014-06-04 14:04 ` [PATCH RESEND 1/2] sched/dl: Add necessary dl_{task,prio} Kirill Tkhai
@ 2014-06-04 14:04 ` Kirill Tkhai
  3 siblings, 0 replies; 4+ messages in thread
From: Kirill Tkhai @ 2014-06-04 14:04 UTC (permalink / raw)
  To: linux-kernel; +Cc: Peter Zijlstra, Ingo Molnar, Juri Lelli, tkhai


The set of rt_prio() contains dl_prio() subset. Fix that.

Signed-off-by: Kirill Tkhai <ktkhai@parallels.com>
CC: Juri Lelli <juri.lelli@gmail.com>
CC: Peter Zijlstra <peterz@infradead.org>
CC: Ingo Molnar <mingo@kernel.org>
---
 include/linux/sched/deadline.h |    8 +-------
 include/linux/sched/prio.h     |    8 +++++---
 include/linux/sched/rt.h       |    2 +-
 3 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/include/linux/sched/deadline.h b/include/linux/sched/deadline.h
index 9d303b8..e529305 100644
--- a/include/linux/sched/deadline.h
+++ b/include/linux/sched/deadline.h
@@ -1,13 +1,7 @@
 #ifndef _SCHED_DEADLINE_H
 #define _SCHED_DEADLINE_H
 
-/*
- * SCHED_DEADLINE tasks has negative priorities, reflecting
- * the fact that any of them has higher prio than RT and
- * NORMAL/BATCH tasks.
- */
-
-#define MAX_DL_PRIO		0
+#include <linux/sched/prio.h>
 
 static inline int dl_prio(int prio)
 {
diff --git a/include/linux/sched/prio.h b/include/linux/sched/prio.h
index d9cf5a5..0d6c552 100644
--- a/include/linux/sched/prio.h
+++ b/include/linux/sched/prio.h
@@ -6,18 +6,20 @@
 #define NICE_WIDTH	(MAX_NICE - MIN_NICE + 1)
 
 /*
- * Priority of a process goes from 0..MAX_PRIO-1, valid RT
- * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH
+ * Priority of a process goes from MAX_DL_PRIO-1..MAX_PRIO-1,
+ * SCHED_DEADLINE tasks have negative priorities, valid RT
+ * value is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH
  * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority
  * values are inverted: lower p->prio value means higher priority.
  *
  * The MAX_USER_RT_PRIO value allows the actual maximum
  * RT priority to be separate from the value exported to
  * user-space.  This allows kernel threads to set their
- * priority to a value higher than any user task. Note:
+ * priority to a value higher than any user RT task. Note:
  * MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO.
  */
 
+#define MAX_DL_PRIO		0
 #define MAX_USER_RT_PRIO	100
 #define MAX_RT_PRIO		MAX_USER_RT_PRIO
 
diff --git a/include/linux/sched/rt.h b/include/linux/sched/rt.h
index 6341f5b..dca43ed 100644
--- a/include/linux/sched/rt.h
+++ b/include/linux/sched/rt.h
@@ -5,7 +5,7 @@
 
 static inline int rt_prio(int prio)
 {
-	if (unlikely(prio < MAX_RT_PRIO))
+	if (unlikely(prio < MAX_RT_PRIO && prio >= MAX_DL_PRIO))
 		return 1;
 	return 0;
 }






^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-06-04 14:04 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20140604124735.3951.61242.stgit@tkhai>
2014-06-04 12:57 ` [PATCH 1/2] sched/dl: Add necessary dl_{task,prio} Kirill Tkhai
2014-06-04 12:59 ` [PATCH 2/2] sched/rt: Fix rt_prio() Kirill Tkhai
2014-06-04 14:04 ` [PATCH RESEND 1/2] sched/dl: Add necessary dl_{task,prio} Kirill Tkhai
2014-06-04 14:04 ` [PATCH RESEND 2/2] sched/rt: Fix rt_prio() Kirill Tkhai

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®