All of lore.kernel.org
 help / color / mirror / Atom feed
* [Kernel-janitors] Re: [PATCH] video/bttv-driver: replace
@ 2004-07-27  6:26 Gerd Knorr
  2004-07-27  6:59 ` Gerd Knorr
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Gerd Knorr @ 2004-07-27  6:26 UTC (permalink / raw)
  To: kernel-janitors

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

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?

  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: 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

end of thread, other threads:[~2004-07-27 15:53 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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

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.