* [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