* [Kernel-janitors] Re: [PATCH] video/bttv-driver: replace
2004-07-27 6:26 [Kernel-janitors] Re: [PATCH] video/bttv-driver: replace Gerd Knorr
@ 2004-07-27 6:59 ` Gerd Knorr
2004-07-27 15:43 ` Nishanth Aravamudan
2004-07-27 15:53 ` Nishanth Aravamudan
2 siblings, 0 replies; 4+ messages in thread
From: Gerd Knorr @ 2004-07-27 6:59 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 607 bytes --]
On Tue, Jul 27, 2004 at 08:26:50AM +0200, Gerd Knorr wrote:
> On Mon, Jul 26, 2004 at 03:47:30PM -0700, Nishanth Aravamudan wrote:
> > set_current_state(TASK_INTERRUPTIBLE);
> > schedule_timeout(some_time);
> > msleep(jiffies_to_msecs(some_time));
> >
> > msleep() is not exactly the same as the previous code,
>
> How does it differ? And what exactly is the point in replacing it?
Especially as msleep() does busy waits (unless I've missed something)
whereas schedule_timeout() doesn't? I'd like to veto this one, and
the other ones touching video4linux drivers as well.
Gerd
--
return -ENOSIG;
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Kernel-janitors] Re: [PATCH] video/bttv-driver: replace
2004-07-27 6:26 [Kernel-janitors] Re: [PATCH] video/bttv-driver: replace Gerd Knorr
2004-07-27 6:59 ` Gerd Knorr
@ 2004-07-27 15:43 ` Nishanth Aravamudan
2004-07-27 15:53 ` Nishanth Aravamudan
2 siblings, 0 replies; 4+ messages in thread
From: Nishanth Aravamudan @ 2004-07-27 15:43 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 2020 bytes --]
On Tue, Jul 27, 2004 at 08:26:50AM +0200, Gerd Knorr wrote:
> On Mon, Jul 26, 2004 at 03:47:30PM -0700, Nishanth Aravamudan wrote:
> > I would appreciate any comments from the janitors list. This is one (of
> > many) cases where I made a decision about replacing
> >
> > set_current_state(TASK_INTERRUPTIBLE);
> > schedule_timeout(some_time);
> >
> > with
> >
> > msleep(jiffies_to_msecs(some_time));
> >
> > msleep() is not exactly the same as the previous code,
>
> How does it differ? And what exactly is the point in replacing it?
From a previous post to kernel-janitors:
Well, there are two things to consider here:
As a reference, the way the code was written before:
- set_current_state(TASK_INTERRUPTIBLE);
- schedule_timeout(HZ / 10); /* wait 100ms */
1) Since the state is set to TASK_INTERRUPTIBLE, although a 100ms
delay is requested, if a signal is received, then the delay ends
prematurely and the task will resume after the schedule_timeout()
call. Now, if this was the desired effect, then the the patch should
not be applied.
2) However, if a true delay was desired, then TASK_INTERRUPTIBLE
should not have been the set state, but TASK_UNINTERRUPTIBLE should
have been. This would have made the code:
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(HZ / 10);
msleep() achieves this exact purpose, but also:
a) allows the parameter time to be in msecs, which is far
clearer IMO; and
b) guarantees that the task will not continue execution
until after the timeout has expired.
Confusingly (at least to me), there are certain conditions -- the details
of which I will have to defer to Greg Kroah-Hartman -- in which
TASK_UNINTERRUPTIBLE'd schedule_timeout()s may still return before the
timeout. The desired delay is achieved by wrapping the
schedule_timeout(timeout) with a while(timeout) loop. Thus, as long as
timeout is non-zero, the task is deferred. (see msleep() definition for
more details).
Hope that clears up the differences.
-Nish
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Kernel-janitors] Re: [PATCH] video/bttv-driver: replace
2004-07-27 6:26 [Kernel-janitors] Re: [PATCH] video/bttv-driver: replace Gerd Knorr
2004-07-27 6:59 ` Gerd Knorr
2004-07-27 15:43 ` Nishanth Aravamudan
@ 2004-07-27 15:53 ` Nishanth Aravamudan
2 siblings, 0 replies; 4+ messages in thread
From: Nishanth Aravamudan @ 2004-07-27 15:53 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 1250 bytes --]
On Tue, Jul 27, 2004 at 08:59:59AM +0200, Gerd Knorr wrote:
> On Tue, Jul 27, 2004 at 08:26:50AM +0200, Gerd Knorr wrote:
> return -ENOSIG;
> > On Mon, Jul 26, 2004 at 03:47:30PM -0700, Nishanth Aravamudan wrote:
> > > set_current_state(TASK_INTERRUPTIBLE);
> > > schedule_timeout(some_time);
>
> > > msleep(jiffies_to_msecs(some_time));
> > >
> > > msleep() is not exactly the same as the previous code,
> >
> > How does it differ? And what exactly is the point in replacing it?
>
> Especially as msleep() does busy waits (unless I've missed something)
> whereas schedule_timeout() doesn't? I'd like to veto this one, and
> the other ones touching video4linux drivers as well.
msleep() does not busy wait. It in fact uses schedule_timeout() but in a
more reliable way than most code. Also, it allows the drivers to
consider their longer delays in terms of msecs instead of some sort of
conversion on HZ.
kernel/timer.c::msleep():
/**
* msleep - sleep safely even with waitqueue interruptions
* @msecs: Time in milliseconds to sleep for
*/
void msleep(unsigned int msecs)
{
unsigned long timeout = msecs_to_jiffies(msecs);
while (timeout) {
set_current_state(TASK_UNINTERRUPTIBLE);
timeout = schedule_timeout(timeout);
}
}
-Nish
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 4+ messages in thread