mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Esben Nielsen <nielsen.esben@googlemail.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Esben Nielsen <nielsen.esben@googlemail.com>,
	Esben Nielsen <nielsen.esben@gogglemail.com>,
	Steven Rostedt <rostedt@goodmis.org>, Ingo Molnar <mingo@elte.hu>,
	linux-kernel@vger.kernel.org
Subject: Re: Why can't I set the priority of softirq-hrt? (Re: 2.6.17-rt1)
Date: Wed, 21 Jun 2006 22:29:05 +0100 (BST)	[thread overview]
Message-ID: <Pine.LNX.4.64.0606212226291.7939@localhost.localdomain> (raw)
In-Reply-To: <1150907165.25491.4.camel@localhost.localdomain>



On Wed, 21 Jun 2006, Thomas Gleixner wrote:

> On Wed, 2006-06-21 at 16:43 +0100, Esben Nielsen wrote:
>> What about the patch below. It compiles and my UP labtop runs fine, but I
>> haven't otherwise tested it.  My labtop runs RTExec without hichups
>> until now.
>
> NAK, it puts the burden into the lock path and
What burden? An extra if (waiter.task) is the only thing!

> also does a remove / add
> which results in walking the chain twice.

The twice running through can be fixed.

>
> Find an version against the code in -mm below. Not too much tested yet.
>

What if setscheduler is called from interrup context as in the hrt timers?

Esben

> 	tglx
>
> Index: linux-2.6.17-rc6-mm/kernel/rtmutex.c
> ===================================================================
> --- linux-2.6.17-rc6-mm.orig/kernel/rtmutex.c	2006-06-21 13:34:34.000000000 +0200
> +++ linux-2.6.17-rc6-mm/kernel/rtmutex.c	2006-06-21 15:45:21.000000000 +0200
> @@ -160,7 +160,8 @@
> static int rt_mutex_adjust_prio_chain(task_t *task,
> 				      int deadlock_detect,
> 				      struct rt_mutex *orig_lock,
> -				      struct rt_mutex_waiter *orig_waiter)
> +				      struct rt_mutex_waiter *orig_waiter,
> +				      struct task_struct *top_task)
> {
> 	struct rt_mutex *lock;
> 	struct rt_mutex_waiter *waiter, *top_waiter = orig_waiter;
> @@ -188,7 +189,7 @@
> 			prev_max = max_lock_depth;
> 			printk(KERN_WARNING "Maximum lock depth %d reached "
> 			       "task: %s (%d)\n", max_lock_depth,
> -			       current->comm, current->pid);
> +			       top_task->comm, top_task->pid);
> 		}
> 		put_task_struct(task);
>
> @@ -228,7 +229,7 @@
> 	}
>
> 	/* Deadlock detection */
> -	if (lock == orig_lock || rt_mutex_owner(lock) == current) {
> +	if (lock == orig_lock || rt_mutex_owner(lock) == top_task) {
> 		debug_rt_mutex_deadlock(deadlock_detect, orig_waiter, lock);
> 		spin_unlock(&lock->wait_lock);
> 		ret = deadlock_detect ? -EDEADLK : 0;
> @@ -448,7 +449,8 @@
>
> 	spin_unlock(&lock->wait_lock);
>
> -	res = rt_mutex_adjust_prio_chain(owner, detect_deadlock, lock, waiter);
> +	res = rt_mutex_adjust_prio_chain(owner, detect_deadlock, lock, waiter,
> +					 current);
>
> 	spin_lock(&lock->wait_lock);
>
> @@ -561,12 +563,35 @@
>
> 	spin_unlock(&lock->wait_lock);
>
> -	rt_mutex_adjust_prio_chain(owner, 0, lock, NULL);
> +	rt_mutex_adjust_prio_chain(owner, 0, lock, NULL, current);
>
> 	spin_lock(&lock->wait_lock);
> }
>
> /*
> + * Recheck the pi chain, in case we got a priority setting
> + *
> + * Called from sched_setscheduler
> + */
> +void rt_mutex_adjust_pi(struct task_struct *task)
> +{
> +	struct rt_mutex_waiter *waiter = task->pi_blocked_on;
> +	unsigned long flags;
> +
> +	spin_lock_irqsave(&task->pi_lock, flags);
> +
> +	if (!waiter || waiter->list_entry.prio == task->prio) {
> +		spin_unlock_irqrestore(&task->pi_lock, flags);
> +		return;
> +	}
> +
> +	get_task_struct(task);
> +	spin_unlock_irqrestore(&task->pi_lock, flags);
> +
> +	rt_mutex_adjust_prio_chain(task, 0, NULL, NULL, task);
> +}
> +
> +/*
>  * Slow path lock function:
>  */
> static int __sched
> @@ -633,6 +658,7 @@
> 			if (unlikely(ret))
> 				break;
> 		}
> +
> 		spin_unlock(&lock->wait_lock);
>
> 		debug_rt_mutex_print_deadlock(&waiter);
> Index: linux-2.6.17-rc6-mm/kernel/sched.c
> ===================================================================
> --- linux-2.6.17-rc6-mm.orig/kernel/sched.c	2006-06-21 13:34:34.000000000 +0200
> +++ linux-2.6.17-rc6-mm/kernel/sched.c	2006-06-21 18:21:16.000000000 +0200
> @@ -4028,8 +4028,7 @@
> int sched_setscheduler(struct task_struct *p, int policy,
> 		       struct sched_param *param)
> {
> -	int retval;
> -	int oldprio, oldpolicy = -1;
> +	int retval, oldprio, oldpolicy = -1;
> 	prio_array_t *array;
> 	unsigned long flags;
> 	runqueue_t *rq;
> @@ -4119,6 +4118,8 @@
> 	__task_rq_unlock(rq);
> 	spin_unlock_irqrestore(&p->pi_lock, flags);
>
> +	rt_mutex_adjust_pi(p);
> +
> 	return 0;
> }
> EXPORT_SYMBOL_GPL(sched_setscheduler);
> Index: linux-2.6.17-rc6-mm/include/linux/sched.h
> ===================================================================
> --- linux-2.6.17-rc6-mm.orig/include/linux/sched.h	2006-06-21 13:37:21.000000000 +0200
> +++ linux-2.6.17-rc6-mm/include/linux/sched.h	2006-06-21 15:43:23.000000000 +0200
> @@ -1123,11 +1123,13 @@
> #ifdef CONFIG_RT_MUTEXES
> extern int rt_mutex_getprio(task_t *p);
> extern void rt_mutex_setprio(task_t *p, int prio);
> +extern void rt_mutex_adjust_pi(task_t *p);
> #else
> static inline int rt_mutex_getprio(task_t *p)
> {
> 	return p->normal_prio;
> }
> +# define rt_mutex_adjust_pi(p)		do { } while (0)
> #endif
>
> extern void set_user_nice(task_t *p, long nice);
>
>

  parent reply	other threads:[~2006-06-21 20:29 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-18  7:06 2.6.17-rt1 Ingo Molnar
2006-06-18 16:13 ` 2.6.17-rt1 Michal Piotrowski
     [not found] ` <Pine.LNX.4.64.0606201656230.11643@localhost.localdomain>
2006-06-20 15:13   ` Why can't I set the priority of softirq-hrt? (Re: 2.6.17-rt1) Thomas Gleixner
2006-06-20 17:09     ` Esben Nielsen
2006-06-20 16:35       ` Thomas Gleixner
2006-06-20 21:16         ` Esben Nielsen
2006-06-20 20:35           ` Thomas Gleixner
2006-06-20 23:19             ` Esben Nielsen
2006-06-20 16:39       ` Steven Rostedt
2006-06-20 18:12         ` Esben Nielsen
2006-06-20 17:21           ` Thomas Gleixner
2006-06-20 21:26             ` Esben Nielsen
2006-06-20 20:51               ` Thomas Gleixner
2006-06-21  8:20               ` Steven Rostedt
2006-06-21 11:05                 ` Esben Nielsen
2006-06-21 15:43                   ` Esben Nielsen
2006-06-21 15:21                     ` Steven Rostedt
2006-06-21 16:37                       ` Esben Nielsen
2006-06-21 15:51                         ` Steven Rostedt
2006-06-21 17:14                           ` Esben Nielsen
2006-06-21 16:26                     ` Thomas Gleixner
2006-06-21 18:30                       ` Ingo Molnar
2006-06-22 10:28                         ` Esben Nielsen
2006-06-21 21:29                       ` Esben Nielsen [this message]
2006-06-21 20:33                         ` Thomas Gleixner
2006-06-21 23:35                           ` Esben Nielsen
2006-06-22  7:06                             ` Thomas Gleixner
2006-06-22 10:32                               ` Esben Nielsen
2006-06-22 13:33                               ` Steven Rostedt
2006-06-22 13:45                       ` Steven Rostedt
2006-06-22 14:20                         ` Thomas Gleixner
2006-06-22 14:23                           ` Steven Rostedt
2006-06-22 14:26                             ` Thomas Gleixner
2006-06-22 18:06                               ` Esben Nielsen
2006-06-22 18:05                                 ` Thomas Gleixner
2006-06-23 11:23                                   ` Esben Nielsen
2006-06-23 11:06                                     ` Steven Rostedt
2006-07-03 11:48                                     ` Esben Nielsen
2006-06-21  8:13           ` Steven Rostedt
2006-06-21 11:03             ` Esben Nielsen
2006-06-22  0:57 ` 2.6.17-rt1 Lee Revell
2006-06-22  2:51   ` More weird latency trace output (was Re: 2.6.17-rt1) Lee Revell
2006-06-23  1:24     ` Lee Revell
2006-06-24 22:15       ` Lee Revell
2006-06-24 22:12         ` Ingo Molnar
2006-06-24 22:31           ` Lee Revell
2006-06-24 23:49           ` Lee Revell
2006-06-23 20:56 ` 2.6.17-rt1 - mm_struct leak Vernon Mauery
2006-06-24  9:24   ` Mark Hounschell
2006-06-24  9:32     ` Mark Hounschell
2006-06-30 16:02   ` [PATCH -RT]Re: " Vernon Mauery

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=Pine.LNX.4.64.0606212226291.7939@localhost.localdomain \
    --to=nielsen.esben@googlemail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=nielsen.esben@gogglemail.com \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /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 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®