All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-help] RTDM and udelay
@ 2006-01-25 17:52 Rodrigo Rosenfeld Rosas
  2006-01-25 19:56 ` [Xenomai-help] " Jan Kiszka
  0 siblings, 1 reply; 7+ messages in thread
From: Rodrigo Rosenfeld Rosas @ 2006-01-25 17:52 UTC (permalink / raw)
  To: xenomai; +Cc: Jan Kiszka

Is there any alternative to udelay on RTDM?

Or should I do something like:

void rt_udelay(unsigned int usec) {
  uint64_t timeout = rtdm_clock_read () + usec;
  while (rtdm_clock_read () < timeout);
}

Or maybe my design is wrong.

I have a function, say WriteI2C(...). Should I create it as a task and call 
rtdm_task_sleep?

Thanks,

Rodrigo.

	

	
		
_______________________________________________________ 
Yahoo! doce lar. Faça do Yahoo! sua homepage. 
http://br.yahoo.com/homepageset.html 




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

* [Xenomai-help] Re: RTDM and udelay
  2006-01-25 17:52 [Xenomai-help] RTDM and udelay Rodrigo Rosenfeld Rosas
@ 2006-01-25 19:56 ` Jan Kiszka
  2006-01-26  0:42   ` Rodrigo Rosenfeld Rosas
  0 siblings, 1 reply; 7+ messages in thread
From: Jan Kiszka @ 2006-01-25 19:56 UTC (permalink / raw)
  To: Rodrigo Rosenfeld Rosas; +Cc: xenomai

[-- Attachment #1: Type: text/plain, Size: 769 bytes --]

Rodrigo Rosenfeld Rosas wrote:
> Is there any alternative to udelay on RTDM?
> 
> Or should I do something like:
> 
> void rt_udelay(unsigned int usec) {
>   uint64_t timeout = rtdm_clock_read () + usec;
>   while (rtdm_clock_read () < timeout);
> }

You mean something like this: =:)

http://www.rts.uni-hannover.de/xenomai/lxr/source/ksrc/skins/rtdm/drvlib.c?v=SVN-trunk#L366

> 
> Or maybe my design is wrong.
> 
> I have a function, say WriteI2C(...). Should I create it as a task and call 
> rtdm_task_sleep?

Depending on how long you would like to sleep and if you are not inside
an IRQ handler, a re-scheduling call like rtdm_task_sleep() can be
better. If it's just about a few microseconds, busy sleeping should be
preferred.

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 252 bytes --]

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

* [Xenomai-help] Re: RTDM and udelay
  2006-01-25 19:56 ` [Xenomai-help] " Jan Kiszka
@ 2006-01-26  0:42   ` Rodrigo Rosenfeld Rosas
  2006-01-26  8:32     ` Jan Kiszka
  0 siblings, 1 reply; 7+ messages in thread
From: Rodrigo Rosenfeld Rosas @ 2006-01-26  0:42 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: xenomai

Rodrigo Rosenfeld Rosas wrote:

>>Is there any alternative to udelay on RTDM?
>>
>>Or should I do something like:
>>
>>void rt_udelay(unsigned int usec) {
>>  uint64_t timeout = rtdm_clock_read () + usec;
>>  while (rtdm_clock_read () < timeout);
>>}
>>    
>>
>
>You mean something like this: =:)
>
>http://www.rts.uni-hannover.de/xenomai/lxr/source/ksrc/skins/rtdm/drvlib.c?v=SVN-trunk#L366
>  
>
Yes, but it seemed too complex for me, since it disables IRQ and I do 
not need this feature. It will no problem if, instead of waiting 2us, I 
have to wait 100us because some interrupt has occurred. After I write to 
the board i2c registers, I need to wait *at least*, say, 2us before 
writing another i2c cycle.

One more thing: although the name of the function has the word "task", I 
think it is not task specific. Documentation even says it can be called 
from initialization/cleanup code. But it doesn't say if it can be called 
from an ioctl handler or any other context, although I see no problem 
when reviewing the code. Thus, I think a better name would be something 
like rtdm_busy_sleep() or rtdm_ns_delay(). Just a suggestion.

>>Or maybe my design is wrong.
>>
>>I have a function, say WriteI2C(...). Should I create it as a task and call 
>>rtdm_task_sleep?
>>    
>>
>
>Depending on how long you would like to sleep and if you are not inside
>an IRQ handler, a re-scheduling call like rtdm_task_sleep() can be
>better. If it's just about a few microseconds, busy sleeping should be
>preferred.
>  
>
Exactly what I had in mind, thanks.

Best regards,

Rodrigo.


	

	
		
_______________________________________________________ 
Yahoo! doce lar. Faça do Yahoo! sua homepage. 
http://br.yahoo.com/homepageset.html 




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

* [Xenomai-help] Re: RTDM and udelay
  2006-01-26  0:42   ` Rodrigo Rosenfeld Rosas
@ 2006-01-26  8:32     ` Jan Kiszka
  2006-01-26 10:49       ` Rodrigo Rosenfeld Rosas
  0 siblings, 1 reply; 7+ messages in thread
From: Jan Kiszka @ 2006-01-26  8:32 UTC (permalink / raw)
  To: Rodrigo Rosenfeld Rosas; +Cc: xenomai

[-- Attachment #1: Type: text/plain, Size: 2404 bytes --]

Rodrigo Rosenfeld Rosas wrote:
> Rodrigo Rosenfeld Rosas wrote:
> 
>>> Is there any alternative to udelay on RTDM?
>>>
>>> Or should I do something like:
>>>
>>> void rt_udelay(unsigned int usec) {
>>>  uint64_t timeout = rtdm_clock_read () + usec;
>>>  while (rtdm_clock_read () < timeout);
>>> }
>>>   
>>
>> You mean something like this: =:)
>>
>> http://www.rts.uni-hannover.de/xenomai/lxr/source/ksrc/skins/rtdm/drvlib.c?v=SVN-trunk#L366
>>
>>  
>>
> Yes, but it seemed too complex for me, since it disables IRQ and I do
> not need this feature. It will no problem if, instead of waiting 2us, I

Are we talking about the same function??? Don't think so.

> have to wait 100us because some interrupt has occurred. After I write to
> the board i2c registers, I need to wait *at least*, say, 2us before
> writing another i2c cycle.

Then this is the perfect choice for you.

> 
> One more thing: although the name of the function has the word "task", I
> think it is not task specific. Documentation even says it can be called
> from initialization/cleanup code. But it doesn't say if it can be called
> from an ioctl handler or any other context, although I see no problem
> when reviewing the code. Thus, I think a better name would be something
> like rtdm_busy_sleep() or rtdm_ns_delay(). Just a suggestion.

The idea is to put most functions into some related group. As
rtdm_task_busy_sleep() is an alternative to rtdm_task_sleep(), I placed
them close to each other in the doc, i.e. in the same group (rtdm_task_xxx).

Note that an ioctl handler (just like any device operation handler) has
no separate context. Depending on if we are talking about the _rt or the
_nrt handler, it either executes in a RT task or in non-RT context,
invoked by a user space or kernel space caller. All this is covered by
the environments listed for rtdm_task_busy_sleep.

> 
>>> Or maybe my design is wrong.
>>>
>>> I have a function, say WriteI2C(...). Should I create it as a task
>>> and call rtdm_task_sleep?
>>>   
>>
>> Depending on how long you would like to sleep and if you are not inside
>> an IRQ handler, a re-scheduling call like rtdm_task_sleep() can be
>> better. If it's just about a few microseconds, busy sleeping should be
>> preferred.
>>  
>>
> Exactly what I had in mind, thanks.
> 
> Best regards,
> 
> Rodrigo.
> 

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 250 bytes --]

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

* [Xenomai-help] Re: RTDM and udelay
  2006-01-26  8:32     ` Jan Kiszka
@ 2006-01-26 10:49       ` Rodrigo Rosenfeld Rosas
  2006-01-26 15:17         ` Jan Kiszka
  0 siblings, 1 reply; 7+ messages in thread
From: Rodrigo Rosenfeld Rosas @ 2006-01-26 10:49 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: xenomai


>>>>Is there any alternative to udelay on RTDM?
>>>>
>>>>Or should I do something like:
>>>>
>>>>void rt_udelay(unsigned int usec) {
>>>> uint64_t timeout = rtdm_clock_read () + usec;
>>>> while (rtdm_clock_read () < timeout);
>>>>}
>>>>  
>>>>        
>>>>
>>>You mean something like this: =:)
>>>
>>>http://www.rts.uni-hannover.de/xenomai/lxr/source/ksrc/skins/rtdm/drvlib.c?v=SVN-trunk#L366
>>>      
>>>
>>Yes, but it seemed too complex for me, since it disables IRQ and I do
>>not need this feature. It will no problem if, instead of waiting 2us, I
>>    
>>
>Are we talking about the same function??? Don't think so.
>  
>
Is there any related function that do not disable IRQ? I know it is not 
a big deal and I'll use the suggested function if there is no 
alternative, but I would prefer using some delay function that will not 
disable interrupts when delaying.

>>have to wait 100us because some interrupt has occurred. After I write to
>>the board i2c registers, I need to wait *at least*, say, 2us before
>>writing another i2c cycle.
>>    
>>
>
>Then this is the perfect choice for you.
>
>  
>
>>One more thing: although the name of the function has the word "task", I
>>think it is not task specific. Documentation even says it can be called
>>from initialization/cleanup code. But it doesn't say if it can be called
>>from an ioctl handler or any other context, although I see no problem
>>when reviewing the code. Thus, I think a better name would be something
>>like rtdm_busy_sleep() or rtdm_ns_delay(). Just a suggestion.
>>    
>>
>
>The idea is to put most functions into some related group. As
>rtdm_task_busy_sleep() is an alternative to rtdm_task_sleep(), I placed
>them close to each other in the doc, i.e. in the same group (rtdm_task_xxx).
>
>Note that an ioctl handler (just like any device operation handler) has
>no separate context. Depending on if we are talking about the _rt or the
>_nrt handler, it either executes in a RT task or in non-RT context,
>invoked by a user space or kernel space caller. All this is covered by
>the environments listed for rtdm_task_busy_sleep.
>  
>
Thanks for clarifying. One more doubt. Suppose my driver has only the 
non-RT close handler. If the user close the file descriptor from a 
RT-context, it will call the non-RT close handler? If yes, will that 
handler be called in a RT-context? If not, could I use the same handler 
(function) for both RT and non-RT handlers?

Thank you again,

Rodrigo.


	

	
		
_______________________________________________________ 
Yahoo! doce lar. Faça do Yahoo! sua homepage. 
http://br.yahoo.com/homepageset.html 




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

* Re: [Xenomai-help] Re: RTDM and udelay
  2006-01-26 10:49       ` Rodrigo Rosenfeld Rosas
@ 2006-01-26 15:17         ` Jan Kiszka
  2006-01-27  9:41           ` Rodrigo Rosenfeld Rosas
  0 siblings, 1 reply; 7+ messages in thread
From: Jan Kiszka @ 2006-01-26 15:17 UTC (permalink / raw)
  To: Rodrigo Rosenfeld Rosas; +Cc: xenomai

[-- Attachment #1: Type: text/plain, Size: 3162 bytes --]

Rodrigo Rosenfeld Rosas wrote:
> 
>>>>> Is there any alternative to udelay on RTDM?
>>>>>
>>>>> Or should I do something like:
>>>>>
>>>>> void rt_udelay(unsigned int usec) {
>>>>> uint64_t timeout = rtdm_clock_read () + usec;
>>>>> while (rtdm_clock_read () < timeout);
>>>>> }
>>>>>  
>>>>>       
>>>> You mean something like this: =:)
>>>>
>>>> http://www.rts.uni-hannover.de/xenomai/lxr/source/ksrc/skins/rtdm/drvlib.c?v=SVN-trunk#L366
>>>>
>>>>     
>>> Yes, but it seemed too complex for me, since it disables IRQ and I do
>>> not need this feature. It will no problem if, instead of waiting 2us, I
>>>   
>> Are we talking about the same function??? Don't think so.
>>  
>>
> Is there any related function that do not disable IRQ? I know it is not

rtdm_task_busy_sleep() as it is now *does not* touch the IRQ flag,
please have a look at the provided link. But this reminds me of a
potential issue when using it on SMP: a task being migrated while
running rtdm_task_busy_sleep may suffer from inconsistent TSCs on old
and new CPU. We have to address this somehow...

> a big deal and I'll use the suggested function if there is no
> alternative, but I would prefer using some delay function that will not
> disable interrupts when delaying.
> 
>>> have to wait 100us because some interrupt has occurred. After I write to
>>> the board i2c registers, I need to wait *at least*, say, 2us before
>>> writing another i2c cycle.
>>>   
>>
>> Then this is the perfect choice for you.
>>
>>  
>>
>>> One more thing: although the name of the function has the word "task", I
>>> think it is not task specific. Documentation even says it can be called
>>> from initialization/cleanup code. But it doesn't say if it can be called
>>> from an ioctl handler or any other context, although I see no problem
>>> when reviewing the code. Thus, I think a better name would be something
>>> like rtdm_busy_sleep() or rtdm_ns_delay(). Just a suggestion.
>>>   
>>
>> The idea is to put most functions into some related group. As
>> rtdm_task_busy_sleep() is an alternative to rtdm_task_sleep(), I placed
>> them close to each other in the doc, i.e. in the same group
>> (rtdm_task_xxx).
>>
>> Note that an ioctl handler (just like any device operation handler) has
>> no separate context. Depending on if we are talking about the _rt or the
>> _nrt handler, it either executes in a RT task or in non-RT context,
>> invoked by a user space or kernel space caller. All this is covered by
>> the environments listed for rtdm_task_busy_sleep.
>>  
>>
> Thanks for clarifying. One more doubt. Suppose my driver has only the
> non-RT close handler. If the user close the file descriptor from a
> RT-context, it will call the non-RT close handler? If yes, will that
> handler be called in a RT-context? If not, could I use the same handler
> (function) for both RT and non-RT handlers?

If a RT handler is missing, the caller is migrated to secondary mode
before the non-RT handler is invoked. And yes, if your close handler is
both RT and non-RT safe, you can registered it for both entry points.

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 250 bytes --]

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

* Re: [Xenomai-help] Re: RTDM and udelay
  2006-01-26 15:17         ` Jan Kiszka
@ 2006-01-27  9:41           ` Rodrigo Rosenfeld Rosas
  0 siblings, 0 replies; 7+ messages in thread
From: Rodrigo Rosenfeld Rosas @ 2006-01-27  9:41 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: xenomai

Thank you Jan! No more questions for now. ;)

Rodrigo.


	

	
		
_______________________________________________________ 
Yahoo! doce lar. Faça do Yahoo! sua homepage. 
http://br.yahoo.com/homepageset.html 




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

end of thread, other threads:[~2006-01-27  9:41 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-01-25 17:52 [Xenomai-help] RTDM and udelay Rodrigo Rosenfeld Rosas
2006-01-25 19:56 ` [Xenomai-help] " Jan Kiszka
2006-01-26  0:42   ` Rodrigo Rosenfeld Rosas
2006-01-26  8:32     ` Jan Kiszka
2006-01-26 10:49       ` Rodrigo Rosenfeld Rosas
2006-01-26 15:17         ` Jan Kiszka
2006-01-27  9:41           ` Rodrigo Rosenfeld Rosas

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.