All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>
To: Sven-Thorsten Dietrich
	<sven-IsH+rWyeNGyzjR9+/8zPv5owlv4uC7bZ@public.gmane.org>
Cc: Leon Woestenberg
	<leon.woestenberg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	rt-users <linux-rt-users-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	"Ben Dooks (embedded platforms)"
	<ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>
Subject: Re: yield() in i2c non-happy paths hits BUG under -rt patch
Date: Thu, 12 Nov 2009 21:12:55 +0100	[thread overview]
Message-ID: <20091112211255.09cd884a@hyperion.delvare> (raw)
In-Reply-To: <4AF7148C.9090706-IsH+rWyeNGyzjR9+/8zPv5owlv4uC7bZ@public.gmane.org>

Hello Sven,

On Sun, 08 Nov 2009 10:57:16 -0800, Sven-Thorsten Dietrich wrote:
> On 11/07/2009 12:01 PM, Jean Delvare wrote:
> >
> > One thing I do not understand: if yield() is a bug to RT kernels, then
> > we would have to remove them all? But so far, yield() still exists in
> > the kernel tree, and it serves a purpose. Are you going to ask all
> > developers to remove all occurrences of yield() in their code? Doesn't
> > sound terribly realistic.
> 
> The flaw in using yield() with RT priorities, is that it doesn't do what 
> you expect.

You know, I did not really expect anything in the first place, given
how little I know about RT ;)

> The scheduler will run, and pick the highest-priority thread, which is 
> the one yield()-ing.

Unless there are several real-time threads running, I presume?

> So the risk is, that whatever the yield() intended to do, it won't do, 
> and worse, that you will end up endlessly yielding to yourself, locking 
> the machine.
> 
> So the call is for something more explicit of an implementation.

This seem to imply an affirmative answer to my initial question: your
plan is to get rid of the ~500 occurrences of yield() throughout the
kernel tree?

As far as I can see, yield() doesn't have clear semantics attached.
It's more of a utility function everyone could use as they see fit. In
that respect, I understand your concerns about the coders' expectations
and how they could be dismissed by RT. OTOH, I don't think that asking
all developers to get rid of yield() because it _may not be_
RT-compliant will lead you anywhere.

In the 3 occurrences I've looked at, yield() is used as a way to
busy-wait in a multitask-friendly way. What other use cases do you
expect? I've never seen yield() used as a way to avoid deadlocks, which
seems to be what you fear. I guess it could statistically be used that
way, but obviously I wouldn't recommend it. Anything else?

I would recommend that you audit the various use cases of yield(), and
then offer replacements for the cases which are RT-unfriendly, leaving
the rest alone and possibly clarifying the intended use of yield() to
avoid future problems.

In the i2c-algo-bit case, which started this thread, I can't really see
what "something more explicit of an implementation" would be. yield()
is as optimum as you can get, only delaying the processing if other
tasks want to run. A sleep or a delay would delay the processing
unconditionally, for an arbitrary amount of time, with no good reason.
Removing yield() would increase the latency. This particular feature of
i2c-algo-bit isn't necessarily terribly useful, but the code does the
right thing, regardless of RT, so I just can't see any reason to change
it.

-- 
Jean Delvare

  parent reply	other threads:[~2009-11-12 20:12 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-07 19:01 yield() in i2c non-happy paths hits BUG under -rt patch Leon Woestenberg
     [not found] ` <c384c5ea0911071101u7415d37o2611c542e5fae309-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-11-07 20:01   ` Jean Delvare
     [not found]     ` <20091107210147.3e754278-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-11-08 18:57       ` Sven-Thorsten Dietrich
     [not found]         ` <4AF7148C.9090706-IsH+rWyeNGyzjR9+/8zPv5owlv4uC7bZ@public.gmane.org>
2009-11-12 20:12           ` Jean Delvare [this message]
2009-11-13 22:03             ` Thomas Gleixner
2009-11-14 18:02               ` Jean Delvare
     [not found]               ` <alpine.LFD.2.00.0911132139560.24119-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2009-11-16 15:56                 ` Mark Brown
2009-11-16 15:56                   ` Mark Brown
     [not found]                   ` <20091116155606.GC29479-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2009-11-18  0:50                     ` Leon Woestenberg
2009-11-18  0:50                       ` Leon Woestenberg
2009-11-18  1:05                       ` Alan Cox
     [not found]                         ` <20091118010520.4cd397d4-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org>
2009-11-18 16:28                           ` Leon Woestenberg
2009-11-18 16:28                             ` Leon Woestenberg
2009-11-18 16:52                             ` Jean Delvare
     [not found]                               ` <20091118175202.490989d8-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-11-18 20:36                                 ` Thomas Gleixner
2009-11-18 20:36                                   ` Thomas Gleixner
2009-11-19 12:05                                   ` Jean Delvare
     [not found]                                     ` <20091119130526.23a69b85-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-11-19 12:59                                       ` Alan Cox
2009-11-19 12:59                                         ` Alan Cox
     [not found]                                         ` <20091119125906.6ad00edd-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org>
2009-11-19 13:06                                           ` Peter Zijlstra
2009-11-19 13:06                                             ` Peter Zijlstra
2009-11-19 14:00                                             ` Jean Delvare
2009-11-19 14:15                                               ` Peter Zijlstra
2009-11-19 13:11                                       ` Thomas Gleixner
2009-11-19 13:11                                         ` Thomas Gleixner
2009-11-19 13:21                                         ` Peter Zijlstra
2009-11-19 13:22                                           ` Thomas Gleixner
2009-11-19 13:18                                     ` Peter Zijlstra
2009-11-18 20:46                               ` [PATCH] cleanup sched_yield (sys)call nesting Sven-Thorsten Dietrich
     [not found]                                 ` <1258577194.12429.86.camel-ZUMNgey8dAdBci4yedNfAfz91O0DMRRp0E9HWUfgJXw@public.gmane.org>
2009-11-18 20:56                                   ` Thomas Gleixner
2009-11-18 20:56                                     ` Thomas Gleixner
     [not found]                                     ` <alpine.LFD.2.00.0911182153010.24119-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2009-11-18 21:04                                       ` Sven-Thorsten Dietrich
2009-11-18 21:04                                         ` Sven-Thorsten Dietrich
2009-11-18 21:34                                         ` Thomas Gleixner
     [not found]                                           ` <alpine.LFD.2.00.0911182233510.24119-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2009-11-19  4:48                                             ` Sven-Thorsten Dietrich
2009-11-19  4:48                                               ` Sven-Thorsten Dietrich
     [not found]                                               ` <1258606116.25022.57.camel-ZUMNgey8dAdBci4yedNfAfz91O0DMRRp0E9HWUfgJXw@public.gmane.org>
2009-11-19 10:36                                                 ` Thomas Gleixner
2009-11-19 10:36                                                   ` Thomas Gleixner
2009-11-19  3:20                                   ` Ingo Molnar
2009-11-19  3:20                                     ` Ingo Molnar

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=20091112211255.09cd884a@hyperion.delvare \
    --to=khali-puyad+kwke1g9huczpvpmw@public.gmane.org \
    --cc=ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org \
    --cc=leon.woestenberg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-rt-users-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=sven-IsH+rWyeNGyzjR9+/8zPv5owlv4uC7bZ@public.gmane.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.