All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@domain.hid>
To: Anders Blomdell <anders.blomdell@domain.hid>
Cc: "xenomai@xenomai.org" <xenomai@xenomai.org>
Subject: Re: [Xenomai-core] Potential problem with rt_eepro100
Date: Thu, 04 Nov 2010 10:10:01 +0100	[thread overview]
Message-ID: <4CD27869.1060008@domain.hid> (raw)
In-Reply-To: <4CD272A1.70105@domain.hid>

Am 04.11.2010 09:45, Anders Blomdell wrote:
> Jan Kiszka wrote:
>> Am 04.11.2010 01:13, Gilles Chanteperdrix wrote:
>>> Jan Kiszka wrote:
>>>> Am 04.11.2010 00:56, Gilles Chanteperdrix wrote:
>>>>> Jan Kiszka wrote:
>>>>>> Am 04.11.2010 00:44, Gilles Chanteperdrix wrote:
>>>>>>> Jan Kiszka wrote:
>>>>>>>> Am 04.11.2010 00:18, Gilles Chanteperdrix wrote:
>>>>>>>>> Jan Kiszka wrote:
>>>>>>>>>> Am 04.11.2010 00:11, Gilles Chanteperdrix wrote:
>>>>>>>>>>> Jan Kiszka wrote:
>>>>>>>>>>>> Am 03.11.2010 23:11, Jan Kiszka wrote:
>>>>>>>>>>>>> Am 03.11.2010 23:03, Jan Kiszka wrote:
>>>>>>>>>>>>>> But we not not always use atomic ops for manipulating
>>>>>>>>>>>>>> status bits (but
>>>>>>>>>>>>>> we do in other cases where this is no need - different
>>>>>>>>>>>>>> story). This may
>>>>>>>>>>>>>> fix the race:
>>>>>>>>>>>>> Err, nonsense. As we manipulate xnsched::status also
>>>>>>>>>>>>> outside of nklock
>>>>>>>>>>>>> protection, we must _always_ use atomic ops.
>>>>>>>>>>>>>
>>>>>>>>>>>>> This screams for a cleanup: local-only bits like XNHTICK or
>>>>>>>>>>>>> XNINIRQ
>>>>>>>>>>>>> should be pushed in a separate status word that can then be
>>>>>>>>>>>>> safely
>>>>>>>>>>>>> modified non-atomically.
>>>>>>>>>>>> Second try to fix and clean up the sched status bits.
>>>>>>>>>>>> Anders, please
>>>>>>>>>>>> test.
>>>>>>>>>>>>
>>>>>>>>>>>> Jan
>>>>>>>>>>>>
>>>>>>>>>>>> diff --git a/include/nucleus/pod.h b/include/nucleus/pod.h
>>>>>>>>>>>> index 01ff0a7..5987a1f 100644
>>>>>>>>>>>> --- a/include/nucleus/pod.h
>>>>>>>>>>>> +++ b/include/nucleus/pod.h
>>>>>>>>>>>> @@ -277,12 +277,10 @@ static inline void xnpod_schedule(void)
>>>>>>>>>>>>       * context is active, or if we are caught in the middle
>>>>>>>>>>>> of a
>>>>>>>>>>>>       * unlocked context switch.
>>>>>>>>>>>>       */
>>>>>>>>>>>> -#if XENO_DEBUG(NUCLEUS)
>>>>>>>>>>>>      if (testbits(sched->status, XNKCOUT|XNINIRQ|XNSWLOCK))
>>>>>>>>>>>>          return;
>>>>>>>>>>>> -#else /* !XENO_DEBUG(NUCLEUS) */
>>>>>>>>>>>> -    if (testbits(sched->status,
>>>>>>>>>>>> -             XNKCOUT|XNINIRQ|XNSWLOCK|XNRESCHED) != XNRESCHED)
>>>>>>>>>>>> +#if !XENO_DEBUG(NUCLEUS)
>>>>>>>>>>>> +    if (!sched->resched)
>>>>>>>>>>>>          return;
>>>>>>>>>>>>  #endif /* !XENO_DEBUG(NUCLEUS) */
>>>>>>>>>>> Having only one test was really nice here, maybe we simply
>>>>>>>>>>> read a
>>>>>>>>>>> barrier before reading the status?
>>>>>>>>>>>
>>>>>>>>>> I agree - but the alternative is letting all modifications of
>>>>>>>>>> xnsched::status use atomic bitops (that's required when
>>>>>>>>>> folding all bits
>>>>>>>>>> into a single word). And that should be much more costly,
>>>>>>>>>> specifically
>>>>>>>>>> on SMP.
>>>>>>>>> What about issuing a barrier before testing the status?
>>>>>>>>>
>>>>>>>> The problem is not about reading but writing the status
>>>>>>>> concurrently,
>>>>>>>> thus it's not about the code you see above.
>>>>>>> The bits are modified under nklock, which implies a barrier when
>>>>>>> unlocked. Furthermore, an IPI is guaranteed to be received on the
>>>>>>> remote
>>>>>>> CPU after this barrier, so, a barrier should be enough to see the
>>>>>>> modifications which have been made remotely.
>>>>>> Check nucleus/intr.c for tons of unprotected status modifications.
>>>>> Ok. Then maybe, we should reconsider the original decision to start
>>>>> fiddling with the XNRESCHED bit remotely.
>>>> ...which removed complexity and fixed a race? Let's better review the
>>>> checks done in xnpod_schedule vs. its callers, I bet there is more to
>>>> save (IOW: remove the need to test for sched->resched).
>>> Not that much complexitiy... and the race was a false positive in debug
>>> code, no big deal. At least it worked, and it has done so for a long
>>> time. No atomic needed, no barrier, only one test in xnpod_schedule. And
>>> a nice invariant: sched->status is always accessed on the local cpu.
>>> What else?
>>
>> Take a step back and look at the root cause for this issue again.
>> Unlocked
>>
>>     if need-resched
>>         __xnpod_schedule
>>
>> is inherently racy and will always be (not only for the remote
>> reschedule case BTW). So we either have to accept this and remove the
>> debugging check from the scheduler or push the check back to
>> __xnpod_schedule where it once came from. When this it cleaned up, we
>> can look into the remote resched protocol again.
> Probably being daft here; why not stop fiddling with remote CPU status
> bits and always do a reschedule on IPI irq's?

Yes that's what we did before. But the snippet above was and still is
the issue to be resolved first. It motivated the change in the remote
reschedule to avoid one of the possible races around this check.

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux


  reply	other threads:[~2010-11-04  9:10 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <4CC82C8D.3080808@domain.hid>
     [not found] ` <4CC84327.9070202@domain.hid>
2010-10-28  7:34   ` [Xenomai-core] [RTnet-users] Potential problem with rt_eepro100 Anders Blomdell
2010-10-28  7:40     ` Jan Kiszka
2010-10-28  9:34       ` Anders Blomdell
2010-10-28 10:18         ` Jan Kiszka
2010-10-28 13:02           ` [Xenomai-core] " Anders Blomdell
2010-10-28 15:05             ` Anders Blomdell
2010-10-28 15:09               ` Jan Kiszka
2010-10-28 15:18                 ` Anders Blomdell
2010-10-28 15:34                   ` Jan Kiszka
2010-10-29 17:42                     ` Anders Blomdell
2010-10-29 18:06                       ` Jan Kiszka
2010-10-29 19:29                         ` Anders Blomdell
2010-11-01 16:55           ` Anders Blomdell
2010-11-03  8:17             ` Jan Kiszka
2010-11-03 10:33               ` Anders Blomdell
2010-11-03 11:44                 ` Anders Blomdell
2010-11-03 11:50                   ` Jan Kiszka
2010-11-03 11:55                     ` Jan Kiszka
2010-11-03 12:07                       ` Anders Blomdell
2010-11-03 12:17                         ` Jan Kiszka
2010-11-03 13:40                           ` Anders Blomdell
2010-11-03 16:02                             ` Anders Blomdell
2010-11-03 16:46                               ` Anders Blomdell
2010-11-03 16:53                                 ` Jan Kiszka
2010-11-03 19:38                                   ` Anders Blomdell
2010-11-03 20:41                                     ` Philippe Gerum
2010-11-03 22:03                                       ` Jan Kiszka
2010-11-03 22:11                                         ` Jan Kiszka
2010-11-03 22:56                                           ` Jan Kiszka
2010-11-03 23:11                                             ` Gilles Chanteperdrix
2010-11-03 23:15                                               ` Jan Kiszka
2010-11-03 23:18                                                 ` Gilles Chanteperdrix
2010-11-03 23:41                                                   ` Jan Kiszka
2010-11-03 23:44                                                     ` Gilles Chanteperdrix
2010-11-03 23:49                                                       ` Jan Kiszka
2010-11-03 23:56                                                         ` Gilles Chanteperdrix
2010-11-04  0:06                                                           ` Jan Kiszka
2010-11-04  0:13                                                             ` Gilles Chanteperdrix
2010-11-04  7:30                                                               ` Jan Kiszka
2010-11-04  8:45                                                                 ` Anders Blomdell
2010-11-04  9:10                                                                   ` Jan Kiszka [this message]
2010-11-04  9:17                                                                   ` Gilles Chanteperdrix
2010-11-04  9:16                                                                 ` Gilles Chanteperdrix
2010-11-04  9:18                                                                   ` Gilles Chanteperdrix
2010-11-04  9:26                                                                   ` Jan Kiszka
2010-11-04  9:32                                                                     ` Jan Kiszka
2010-11-04 10:42                                                                       ` Anders Blomdell
2010-11-04 12:39                                                                       ` Gilles Chanteperdrix
2010-11-04 13:18                                                                         ` Anders Blomdell
2010-11-04 14:37                                                                           ` Jan Kiszka
2010-11-04 14:53                                                                             ` Anders Blomdell
2010-11-04 15:33                                                                               ` Jan Kiszka
2010-11-04 22:08                                                                                 ` Gilles Chanteperdrix
2010-11-04 23:10                                                                                   ` Jan Kiszka
2010-11-04 23:25                                                                                     ` Gilles Chanteperdrix
2010-11-04 23:32                                                                                       ` Jan Kiszka
2010-11-04 23:46                                                                                         ` Gilles Chanteperdrix
2010-11-05  0:09                                                                                           ` Jan Kiszka
2010-11-05  0:11                                                                                             ` Gilles Chanteperdrix
2010-11-05  1:35                                                                                           ` Gilles Chanteperdrix
2010-11-05  9:59                                                                                             ` Anders Blomdell
2010-11-04 22:06                                                                             ` Gilles Chanteperdrix
2010-11-04 23:17                                                                               ` Jan Kiszka
2010-11-04 23:24                                                                                 ` Gilles Chanteperdrix
2010-11-04 23:35                                                                                   ` Jan Kiszka
2010-11-05  1:28                                                                                     ` Gilles Chanteperdrix
2010-11-05 10:21                                                                                       ` Anders Blomdell
2010-11-06  0:27                                                                                         ` Gilles Chanteperdrix
2010-11-06 20:26                                                                                           ` Anders Blomdell
2010-11-06 20:37                                                                                             ` Gilles Chanteperdrix
2010-11-06 22:49                                                                                               ` Philippe Gerum
2010-11-07  1:00                                                                                                 ` Jan Kiszka
2010-11-07  8:31                                                                                                   ` Gilles Chanteperdrix
2010-11-07  9:46                                                                                                     ` Jan Kiszka
2010-11-07  9:57                                                                                                       ` Gilles Chanteperdrix
2010-11-07 10:00                                                                                                         ` Jan Kiszka
2010-11-07 10:03                                                                                                     ` Philippe Gerum
2010-11-07 10:08                                                                                                       ` Jan Kiszka
2010-11-07 10:12                                                                                                         ` Gilles Chanteperdrix
2010-11-07 10:14                                                                                                           ` Jan Kiszka
2010-11-07 10:49                                                                                                             ` Philippe Gerum
2010-11-07  9:46                                                                                                   ` Philippe Gerum
2010-11-11 15:46                                                                                                   ` Gilles Chanteperdrix
2010-11-12 15:36                                                                                                     ` Jan Kiszka
2010-11-13 18:31                                                                                                       ` Gilles Chanteperdrix

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=4CD27869.1060008@domain.hid \
    --to=jan.kiszka@domain.hid \
    --cc=anders.blomdell@domain.hid \
    --cc=xenomai@xenomai.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.