2004-06-02 15:57:50

by Daniel Drake

[permalink] [raw]
Subject: [PATCH] Use msleep in meye driver

--- linux-dsd/drivers/media/video/meye.c.orig 2004-05-10 03:32:39.000000000 +0100
+++ linux-dsd/drivers/media/video/meye.c 2004-06-02 15:20:24.677887544 +0100
@@ -473,16 +473,6 @@
/* MCHIP low-level functions */
/****************************************************************************/

-/* waits for the specified miliseconds */
-static inline void wait_ms(unsigned int ms) {
- if (!in_interrupt()) {
- set_current_state(TASK_UNINTERRUPTIBLE);
- schedule_timeout(1 + ms * HZ / 1000);
- }
- else
- mdelay(ms);
-}
-
/* returns the horizontal capture size */
static inline int mchip_hsize(void) {
return meye.params.subsample ? 320 : 640;
@@ -640,12 +630,12 @@
for (j = 0; j < 100; ++j) {
if (mchip_delay(MCHIP_HIC_STATUS, MCHIP_HIC_STATUS_IDLE))
return;
- wait_ms(1);
+ msleep(1);
}
printk(KERN_ERR "meye: need to reset HIC!\n");

mchip_set(MCHIP_HIC_CTL, MCHIP_HIC_CTL_SOFT_RESET);
- wait_ms(250);
+ msleep(250);
}
printk(KERN_ERR "meye: resetting HIC hanged!\n");
}
@@ -741,7 +731,7 @@
for (i = 0; i < 100; ++i) {
if (mchip_delay(MCHIP_HIC_STATUS, MCHIP_HIC_STATUS_IDLE))
break;
- wait_ms(1);
+ msleep(1);
}
}

@@ -757,7 +747,7 @@
for (i = 0; i < 100; ++i) {
if (mchip_delay(MCHIP_HIC_STATUS, MCHIP_HIC_STATUS_IDLE))
break;
- wait_ms(1);
+ msleep(1);
}
for (i = 0; i < 4 ; ++i) {
v = mchip_get_frame();
@@ -799,7 +789,7 @@
for (i = 0; i < 100; ++i) {
if (mchip_delay(MCHIP_HIC_STATUS, MCHIP_HIC_STATUS_IDLE))
break;
- wait_ms(1);
+ msleep(1);
}

for (i = 0; i < 4 ; ++i) {
@@ -1260,11 +1250,11 @@

mchip_delay(MCHIP_HIC_CMD, 0);
mchip_delay(MCHIP_HIC_STATUS, MCHIP_HIC_STATUS_IDLE);
- wait_ms(1);
+ msleep(1);
mchip_set(MCHIP_VRJ_SOFT_RESET, 1);
- wait_ms(1);
+ msleep(1);
mchip_set(MCHIP_MM_PCI_MODE, 5);
- wait_ms(1);
+ msleep(1);
mchip_set(MCHIP_MM_INTA, MCHIP_MM_INTA_HIC_1_MASK);

switch (meye.pm_mchip_mode) {
@@ -1349,13 +1339,13 @@
mchip_delay(MCHIP_HIC_CMD, 0);
mchip_delay(MCHIP_HIC_STATUS, MCHIP_HIC_STATUS_IDLE);

- wait_ms(1);
+ msleep(1);
mchip_set(MCHIP_VRJ_SOFT_RESET, 1);

- wait_ms(1);
+ msleep(1);
mchip_set(MCHIP_MM_PCI_MODE, 5);

- wait_ms(1);
+ msleep(1);
mchip_set(MCHIP_MM_INTA, MCHIP_MM_INTA_HIC_1_MASK);

if (video_register_device(meye.video_dev, VFL_TYPE_GRABBER, video_nr) < 0) {


Attachments:
meye-msleep.patch (2.33 kB)

2004-06-03 08:39:25

by Stelian Pop

[permalink] [raw]
Subject: Re: [PATCH] Use msleep in meye driver

On Wed, Jun 02, 2004 at 04:57:26PM +0100, Daniel Drake wrote:

> Remove meye's definition of wait_ms() and switch to using the new global
> msleep() function.
[...]

> -static inline void wait_ms(unsigned int ms) {
> - if (!in_interrupt()) {
> - set_current_state(TASK_UNINTERRUPTIBLE);
> - schedule_timeout(1 + ms * HZ / 1000);
> - }
> - else
> - mdelay(ms);
> -}

>From what I see in kernel/timer.c, msleep() cannot be called in
interrupt context, so the in_interrupt() test must stay.

Stelian.
--
Stelian Pop <[email protected]>

2004-06-03 08:47:26

by Arjan van de Ven

[permalink] [raw]
Subject: Re: [PATCH] Use msleep in meye driver


> >From what I see in kernel/timer.c, msleep() cannot be called in
> interrupt context, so the in_interrupt() test must stay.

mdelay in irq context is *EVIL* though, and will get all the low latency
and audio folks very upset...


Attachments:
signature.asc (189.00 B)
This is a digitally signed message part

2004-06-03 09:01:28

by Stelian Pop

[permalink] [raw]
Subject: Re: [PATCH] Use msleep in meye driver

On Thu, Jun 03, 2004 at 10:47:18AM +0200, Arjan van de Ven wrote:

>
> > >From what I see in kernel/timer.c, msleep() cannot be called in
> > interrupt context, so the in_interrupt() test must stay.
>
> mdelay in irq context is *EVIL* though, and will get all the low latency
> and audio folks very upset...

Indeed :)

In fact, reading the code again shows that wait_ms() is never called
in interrupt context, so the in_interrupt() test was useless.

Daniel's patch is then correct, please apply it.

Or should I add a "Signed-off" line too and resend the patch ?

Stelian.
--
Stelian Pop <[email protected]>