All of lore.kernel.org
 help / color / mirror / Atom feed
* [Adeos-main] task_hijacked, prepare_arch_switch and irq disabling
@ 2009-11-09 13:00 Jan Kiszka
  2009-11-09 13:37 ` Philippe Gerum
  0 siblings, 1 reply; 7+ messages in thread
From: Jan Kiszka @ 2009-11-09 13:00 UTC (permalink / raw)
  To: Philippe Gerum; +Cc: adeos-main

Hi Philippe,

a customer just stumbled over some unclear spots in current I-pipe patches:

Why is there local_irq_enable_hw in task_hijacked? Looks like it was
once paired with prepare_arch_switch, but that call is now only used by
legacy 2.4 PPC. Can we safely drop it from all other patches (it's in
the context switch fast-path...)? Moreover, I bet the
ENABLE_INTERRUPTS_HW_COND in entry_32.S' ret_from_fork is related to
this as well, right?

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux


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

* Re: [Adeos-main] task_hijacked, prepare_arch_switch and irq disabling
  2009-11-09 13:00 [Adeos-main] task_hijacked, prepare_arch_switch and irq disabling Jan Kiszka
@ 2009-11-09 13:37 ` Philippe Gerum
  2009-11-09 13:48   ` Philippe Gerum
  0 siblings, 1 reply; 7+ messages in thread
From: Philippe Gerum @ 2009-11-09 13:37 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: adeos-main

On Mon, 2009-11-09 at 14:00 +0100, Jan Kiszka wrote:
> Hi Philippe,
> 
> a customer just stumbled over some unclear spots in current I-pipe patches:
> 
> Why is there local_irq_enable_hw in task_hijacked? Looks like it was
> once paired with prepare_arch_switch, but that call is now only used by
> legacy 2.4 PPC.

It is still used in all trees, since we define it in asm/ipipe.h. We
could not context switch properly on the linux side with hw interrupts
on anyway, due to the conflicts that would raise with Xenomai's tasking
code.

>  Can we safely drop it from all other patches (it's in
> the context switch fast-path...)?

No, since prepare_arch_switch() is still applicable.

>  Moreover, I bet the
> ENABLE_INTERRUPTS_HW_COND in entry_32.S' ret_from_fork is related to
> this as well, right?

No, it's there to prevent the scheduling tail from running hw IRQs off,
given that copy_thread() may set a copy for eflags which prevents
preemption.

> 
> Jan
> 


-- 
Philippe.




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

* Re: [Adeos-main] task_hijacked, prepare_arch_switch and irq disabling
  2009-11-09 13:37 ` Philippe Gerum
@ 2009-11-09 13:48   ` Philippe Gerum
  2009-11-09 13:51     ` Jan Kiszka
  0 siblings, 1 reply; 7+ messages in thread
From: Philippe Gerum @ 2009-11-09 13:48 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: adeos-main

On Mon, 2009-11-09 at 14:37 +0100, Philippe Gerum wrote:
> On Mon, 2009-11-09 at 14:00 +0100, Jan Kiszka wrote:
> > Hi Philippe,
> > 
> > a customer just stumbled over some unclear spots in current I-pipe patches:
> > 
> > Why is there local_irq_enable_hw in task_hijacked? Looks like it was
> > once paired with prepare_arch_switch, but that call is now only used by
> > legacy 2.4 PPC.
> 
> It is still used in all trees, since we define it in asm/ipipe.h. We
> could not context switch properly on the linux side with hw interrupts
> on anyway, due to the conflicts that would raise with Xenomai's tasking
> code.
> 
> >  Can we safely drop it from all other patches (it's in
> > the context switch fast-path...)?
> 
> No, since prepare_arch_switch() is still applicable.
> 
> >  Moreover, I bet the
> > ENABLE_INTERRUPTS_HW_COND in entry_32.S' ret_from_fork is related to
> > this as well, right?
> 
> No, it's there to prevent the scheduling tail from running hw IRQs off,
> given that copy_thread() may set a copy for eflags which prevents
> preemption.

Forget about this one, this does not apply to x86 anymore. So the answer
to this question is rather: that used to be required on x86 a long time
ago due to the implementation of the task switching code in system.h
(2.4 era IIRC); but in any case, yes, this is still required for the
reasons explained above, since we must run the switch code with hw IRQs
off.  

> 
> > 
> > Jan
> > 
> 
> 


-- 
Philippe.




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

* Re: [Adeos-main] task_hijacked, prepare_arch_switch and irq disabling
  2009-11-09 13:48   ` Philippe Gerum
@ 2009-11-09 13:51     ` Jan Kiszka
  2009-11-09 13:52       ` Philippe Gerum
  0 siblings, 1 reply; 7+ messages in thread
From: Jan Kiszka @ 2009-11-09 13:51 UTC (permalink / raw)
  To: Philippe Gerum; +Cc: adeos-main

Philippe Gerum wrote:
> On Mon, 2009-11-09 at 14:37 +0100, Philippe Gerum wrote:
>> On Mon, 2009-11-09 at 14:00 +0100, Jan Kiszka wrote:
>>> Hi Philippe,
>>>
>>> a customer just stumbled over some unclear spots in current I-pipe patches:
>>>
>>> Why is there local_irq_enable_hw in task_hijacked? Looks like it was
>>> once paired with prepare_arch_switch, but that call is now only used by
>>> legacy 2.4 PPC.
>> It is still used in all trees, since we define it in asm/ipipe.h. We
>> could not context switch properly on the linux side with hw interrupts
>> on anyway, due to the conflicts that would raise with Xenomai's tasking
>> code.
>>
>>>  Can we safely drop it from all other patches (it's in
>>> the context switch fast-path...)?
>> No, since prepare_arch_switch() is still applicable.
>>
>>>  Moreover, I bet the
>>> ENABLE_INTERRUPTS_HW_COND in entry_32.S' ret_from_fork is related to
>>> this as well, right?
>> No, it's there to prevent the scheduling tail from running hw IRQs off,
>> given that copy_thread() may set a copy for eflags which prevents
>> preemption.
> 
> Forget about this one, this does not apply to x86 anymore. So the answer
> to this question is rather: that used to be required on x86 a long time
> ago due to the implementation of the task switching code in system.h
> (2.4 era IIRC); but in any case, yes, this is still required for the
> reasons explained above, since we must run the switch code with hw IRQs
> off.  

Still can't follow: Where is prepare_arch_switch referenced? My dumb
approach to do a text search over the ipipe patch and Xenomai failed to
find that spot. And then the question: How is disabling the IRQs that
task_hijacked reenables?

Thanks,
Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux


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

* Re: [Adeos-main] task_hijacked, prepare_arch_switch and irq disabling
  2009-11-09 13:51     ` Jan Kiszka
@ 2009-11-09 13:52       ` Philippe Gerum
  2009-11-09 13:58         ` Jan Kiszka
  0 siblings, 1 reply; 7+ messages in thread
From: Philippe Gerum @ 2009-11-09 13:52 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: adeos-main

On Mon, 2009-11-09 at 14:51 +0100, Jan Kiszka wrote:
> Philippe Gerum wrote:
> > On Mon, 2009-11-09 at 14:37 +0100, Philippe Gerum wrote:
> >> On Mon, 2009-11-09 at 14:00 +0100, Jan Kiszka wrote:
> >>> Hi Philippe,
> >>>
> >>> a customer just stumbled over some unclear spots in current I-pipe patches:
> >>>
> >>> Why is there local_irq_enable_hw in task_hijacked? Looks like it was
> >>> once paired with prepare_arch_switch, but that call is now only used by
> >>> legacy 2.4 PPC.
> >> It is still used in all trees, since we define it in asm/ipipe.h. We
> >> could not context switch properly on the linux side with hw interrupts
> >> on anyway, due to the conflicts that would raise with Xenomai's tasking
> >> code.
> >>
> >>>  Can we safely drop it from all other patches (it's in
> >>> the context switch fast-path...)?
> >> No, since prepare_arch_switch() is still applicable.
> >>
> >>>  Moreover, I bet the
> >>> ENABLE_INTERRUPTS_HW_COND in entry_32.S' ret_from_fork is related to
> >>> this as well, right?
> >> No, it's there to prevent the scheduling tail from running hw IRQs off,
> >> given that copy_thread() may set a copy for eflags which prevents
> >> preemption.
> > 
> > Forget about this one, this does not apply to x86 anymore. So the answer
> > to this question is rather: that used to be required on x86 a long time
> > ago due to the implementation of the task switching code in system.h
> > (2.4 era IIRC); but in any case, yes, this is still required for the
> > reasons explained above, since we must run the switch code with hw IRQs
> > off.  
> 
> Still can't follow: Where is prepare_arch_switch referenced? 

prepare_task_switch(), kernel/sched.c

> My dumb
> approach to do a text search over the ipipe patch and Xenomai failed to
> find that spot. And then the question: How is disabling the IRQs that
> task_hijacked reenables?
> 
> Thanks,
> Jan
> 


-- 
Philippe.




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

* Re: [Adeos-main] task_hijacked, prepare_arch_switch and irq disabling
  2009-11-09 13:52       ` Philippe Gerum
@ 2009-11-09 13:58         ` Jan Kiszka
  2009-11-09 14:02           ` Philippe Gerum
  0 siblings, 1 reply; 7+ messages in thread
From: Jan Kiszka @ 2009-11-09 13:58 UTC (permalink / raw)
  To: Philippe Gerum; +Cc: adeos-main

Philippe Gerum wrote:
> On Mon, 2009-11-09 at 14:51 +0100, Jan Kiszka wrote:
>> Philippe Gerum wrote:
>>> On Mon, 2009-11-09 at 14:37 +0100, Philippe Gerum wrote:
>>>> On Mon, 2009-11-09 at 14:00 +0100, Jan Kiszka wrote:
>>>>> Hi Philippe,
>>>>>
>>>>> a customer just stumbled over some unclear spots in current I-pipe patches:
>>>>>
>>>>> Why is there local_irq_enable_hw in task_hijacked? Looks like it was
>>>>> once paired with prepare_arch_switch, but that call is now only used by
>>>>> legacy 2.4 PPC.
>>>> It is still used in all trees, since we define it in asm/ipipe.h. We
>>>> could not context switch properly on the linux side with hw interrupts
>>>> on anyway, due to the conflicts that would raise with Xenomai's tasking
>>>> code.
>>>>
>>>>>  Can we safely drop it from all other patches (it's in
>>>>> the context switch fast-path...)?
>>>> No, since prepare_arch_switch() is still applicable.
>>>>
>>>>>  Moreover, I bet the
>>>>> ENABLE_INTERRUPTS_HW_COND in entry_32.S' ret_from_fork is related to
>>>>> this as well, right?
>>>> No, it's there to prevent the scheduling tail from running hw IRQs off,
>>>> given that copy_thread() may set a copy for eflags which prevents
>>>> preemption.
>>> Forget about this one, this does not apply to x86 anymore. So the answer
>>> to this question is rather: that used to be required on x86 a long time
>>> ago due to the implementation of the task switching code in system.h
>>> (2.4 era IIRC); but in any case, yes, this is still required for the
>>> reasons explained above, since we must run the switch code with hw IRQs
>>> off.  
>> Still can't follow: Where is prepare_arch_switch referenced? 
> 
> prepare_task_switch(), kernel/sched.c

Ah, this is mainline! Thought is was an ipipe extension.

OK, thanks, clear now: prepare_task_switch pairs with enabling in
task_hijacked & ret_from_fork.

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux


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

* Re: [Adeos-main] task_hijacked, prepare_arch_switch and irq disabling
  2009-11-09 13:58         ` Jan Kiszka
@ 2009-11-09 14:02           ` Philippe Gerum
  0 siblings, 0 replies; 7+ messages in thread
From: Philippe Gerum @ 2009-11-09 14:02 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: adeos-main

On Mon, 2009-11-09 at 14:58 +0100, Jan Kiszka wrote:
> Philippe Gerum wrote:
> > On Mon, 2009-11-09 at 14:51 +0100, Jan Kiszka wrote:
> >> Philippe Gerum wrote:
> >>> On Mon, 2009-11-09 at 14:37 +0100, Philippe Gerum wrote:
> >>>> On Mon, 2009-11-09 at 14:00 +0100, Jan Kiszka wrote:
> >>>>> Hi Philippe,
> >>>>>
> >>>>> a customer just stumbled over some unclear spots in current I-pipe patches:
> >>>>>
> >>>>> Why is there local_irq_enable_hw in task_hijacked? Looks like it was
> >>>>> once paired with prepare_arch_switch, but that call is now only used by
> >>>>> legacy 2.4 PPC.
> >>>> It is still used in all trees, since we define it in asm/ipipe.h. We
> >>>> could not context switch properly on the linux side with hw interrupts
> >>>> on anyway, due to the conflicts that would raise with Xenomai's tasking
> >>>> code.
> >>>>
> >>>>>  Can we safely drop it from all other patches (it's in
> >>>>> the context switch fast-path...)?
> >>>> No, since prepare_arch_switch() is still applicable.
> >>>>
> >>>>>  Moreover, I bet the
> >>>>> ENABLE_INTERRUPTS_HW_COND in entry_32.S' ret_from_fork is related to
> >>>>> this as well, right?
> >>>> No, it's there to prevent the scheduling tail from running hw IRQs off,
> >>>> given that copy_thread() may set a copy for eflags which prevents
> >>>> preemption.
> >>> Forget about this one, this does not apply to x86 anymore. So the answer
> >>> to this question is rather: that used to be required on x86 a long time
> >>> ago due to the implementation of the task switching code in system.h
> >>> (2.4 era IIRC); but in any case, yes, this is still required for the
> >>> reasons explained above, since we must run the switch code with hw IRQs
> >>> off.  
> >> Still can't follow: Where is prepare_arch_switch referenced? 
> > 
> > prepare_task_switch(), kernel/sched.c
> 
> Ah, this is mainline!

Yep.

>  Thought is was an ipipe extension.
> 
> OK, thanks, clear now: prepare_task_switch pairs with enabling in
> task_hijacked & ret_from_fork.
> 
> Jan
> 


-- 
Philippe.




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

end of thread, other threads:[~2009-11-09 14:02 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-09 13:00 [Adeos-main] task_hijacked, prepare_arch_switch and irq disabling Jan Kiszka
2009-11-09 13:37 ` Philippe Gerum
2009-11-09 13:48   ` Philippe Gerum
2009-11-09 13:51     ` Jan Kiszka
2009-11-09 13:52       ` Philippe Gerum
2009-11-09 13:58         ` Jan Kiszka
2009-11-09 14:02           ` Philippe Gerum

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.