2013-05-22 19:49:20

by Marc Dietrich

[permalink] [raw]
Subject: [PATCH 0/2] replace large udelay by mdelay

bad_udelay is generated on distro kernels which often enable all kinds
of drivers. ARM has a max udelay of 2000, so this patchset converts large
udelays to mdelays. This may also be observed using all_modconfig.

Marc Dietrich (2):
SCSI: nsp32: replace large udelay by mdelay
nouveau: replace large udelay by mdelay

drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c | 3 ++-
drivers/scsi/nsp32.c | 2 +-
drivers/scsi/nsp32.h | 2 +-
3 files changed, 4 insertions(+), 3 deletions(-)

--
1.7.9.5


2013-05-22 19:49:27

by Marc Dietrich

[permalink] [raw]
Subject: [PATCH 1/2] SCSI: nsp32: replace large udelay by mdelay

ARM has a maximum of 2000 usec delay. Use mdelay for larger delays.
This affects distro kernels mostly.

Cc: GOTO Masanori <[email protected]>
Cc: YOKOTA Hiroshi <[email protected]>
Cc: "James E.J. Bottomley" <[email protected]>
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Marc Dietrich <[email protected]>
---
drivers/scsi/nsp32.c | 2 +-
drivers/scsi/nsp32.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c
index 1e3879d..e2f796f 100644
--- a/drivers/scsi/nsp32.c
+++ b/drivers/scsi/nsp32.c
@@ -2899,7 +2899,7 @@ static void nsp32_do_bus_reset(nsp32_hw_data *data)
* reset SCSI bus
*/
nsp32_write1(base, SCSI_BUS_CONTROL, BUSCTL_RST);
- udelay(RESET_HOLD_TIME);
+ mdelay(RESET_HOLD_TIME);
nsp32_write1(base, SCSI_BUS_CONTROL, 0);
for(i = 0; i < 5; i++) {
intrdat = nsp32_read2(base, IRQ_STATUS); /* dummy read */
diff --git a/drivers/scsi/nsp32.h b/drivers/scsi/nsp32.h
index c022182..b2b3dc6 100644
--- a/drivers/scsi/nsp32.h
+++ b/drivers/scsi/nsp32.h
@@ -605,7 +605,7 @@ typedef struct _nsp32_hw_data {
/*
* TIME definition
*/
-#define RESET_HOLD_TIME 10000 /* reset time in us (SCSI-2 says the
+#define RESET_HOLD_TIME 10 /* reset time in ms (SCSI-2 says the
minimum is 25us) */
#define SEL_TIMEOUT_TIME 10000 /* 250ms defined in SCSI specification
(25.6us/1unit) */
--
1.7.9.5

2013-05-22 19:49:41

by Marc Dietrich

[permalink] [raw]
Subject: [PATCH 2/2] nouveau: replace large udelay by mdelay

ARM has a maximum of 2000 usec delay. Use mdelay for larger delays.
This affects distro kernels mostly.

Cc: David Airlie <[email protected]>
Cc: Ben Skeggs <[email protected]>
Signed-off-by: Marc Dietrich <[email protected]>
---
drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c b/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c
index d0817d9..ed7415e 100644
--- a/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c
+++ b/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c
@@ -51,7 +51,8 @@ nv50_dac_sense(struct nv50_disp_priv *priv, int or, u32 loadval)
const u32 doff = (or * 0x800);
int load = -EINVAL;
nv_wr32(priv, 0x61a00c + doff, 0x00100000 | loadval);
- udelay(9500);
+ mdelay(9);
+ udelay(500);
nv_wr32(priv, 0x61a00c + doff, 0x80000000);
load = (nv_rd32(priv, 0x61a00c + doff) & 0x38000000) >> 27;
nv_wr32(priv, 0x61a00c + doff, 0x00000000);
--
1.7.9.5

2013-05-22 20:08:16

by David Daney

[permalink] [raw]
Subject: Re: [PATCH 2/2] nouveau: replace large udelay by mdelay

On 05/22/2013 12:48 PM, Marc Dietrich wrote:
> ARM has a maximum of 2000 usec delay. Use mdelay for larger delays.
> This affects distro kernels mostly.
>
> Cc: David Airlie <[email protected]>
> Cc: Ben Skeggs <[email protected]>
> Signed-off-by: Marc Dietrich <[email protected]>
> ---
> drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c b/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c
> index d0817d9..ed7415e 100644
> --- a/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c
> +++ b/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c
> @@ -51,7 +51,8 @@ nv50_dac_sense(struct nv50_disp_priv *priv, int or, u32 loadval)
> const u32 doff = (or * 0x800);
> int load = -EINVAL;
> nv_wr32(priv, 0x61a00c + doff, 0x00100000 | loadval);
> - udelay(9500);
> + mdelay(9);
> + udelay(500);

That looks very ugly. Can you just use 9 or 10 instead of adding on the
extra 500uS?

David Daney

2013-05-22 20:33:28

by Marc Dietrich

[permalink] [raw]
Subject: Re: [PATCH 1/2] SCSI: nsp32: replace large udelay by mdelay

Looks like Arndt already send a fix for this. Sorry for the noise.

Am Mittwoch, 22. Mai 2013, 21:48:41 schrieb Marc Dietrich:
> ARM has a maximum of 2000 usec delay. Use mdelay for larger delays.
> This affects distro kernels mostly.
>
> Cc: GOTO Masanori <[email protected]>
> Cc: YOKOTA Hiroshi <[email protected]>
> Cc: "James E.J. Bottomley" <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> Signed-off-by: Marc Dietrich <[email protected]>
> ---
> drivers/scsi/nsp32.c | 2 +-
> drivers/scsi/nsp32.h | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c
> index 1e3879d..e2f796f 100644
> --- a/drivers/scsi/nsp32.c
> +++ b/drivers/scsi/nsp32.c
> @@ -2899,7 +2899,7 @@ static void nsp32_do_bus_reset(nsp32_hw_data *data)
> * reset SCSI bus
> */
> nsp32_write1(base, SCSI_BUS_CONTROL, BUSCTL_RST);
> - udelay(RESET_HOLD_TIME);
> + mdelay(RESET_HOLD_TIME);
> nsp32_write1(base, SCSI_BUS_CONTROL, 0);
> for(i = 0; i < 5; i++) {
> intrdat = nsp32_read2(base, IRQ_STATUS); /* dummy read */
> diff --git a/drivers/scsi/nsp32.h b/drivers/scsi/nsp32.h
> index c022182..b2b3dc6 100644
> --- a/drivers/scsi/nsp32.h
> +++ b/drivers/scsi/nsp32.h
> @@ -605,7 +605,7 @@ typedef struct _nsp32_hw_data {
> /*
> * TIME definition
> */
> -#define RESET_HOLD_TIME 10000 /* reset time in us (SCSI-2 says the
> +#define RESET_HOLD_TIME 10 /* reset time in ms (SCSI-2 says the
> minimum is 25us) */
> #define SEL_TIMEOUT_TIME 10000 /* 250ms defined in SCSI specification
> (25.6us/1unit) */

2013-05-22 20:33:55

by Marc Dietrich

[permalink] [raw]
Subject: Re: [PATCH 2/2] nouveau: replace large udelay by mdelay

Looks like Arndt already send a fix for this. Sorry for the noise.

Am Mittwoch, 22. Mai 2013, 21:48:42 schrieb Marc Dietrich:
> ARM has a maximum of 2000 usec delay. Use mdelay for larger delays.
> This affects distro kernels mostly.
>
> Cc: David Airlie <[email protected]>
> Cc: Ben Skeggs <[email protected]>
> Signed-off-by: Marc Dietrich <[email protected]>
> ---
> drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c
> b/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c index d0817d9..ed7415e
> 100644
> --- a/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c
> +++ b/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c
> @@ -51,7 +51,8 @@ nv50_dac_sense(struct nv50_disp_priv *priv, int or, u32
> loadval) const u32 doff = (or * 0x800);
> int load = -EINVAL;
> nv_wr32(priv, 0x61a00c + doff, 0x00100000 | loadval);
> - udelay(9500);
> + mdelay(9);
> + udelay(500);
> nv_wr32(priv, 0x61a00c + doff, 0x80000000);
> load = (nv_rd32(priv, 0x61a00c + doff) & 0x38000000) >> 27;
> nv_wr32(priv, 0x61a00c + doff, 0x00000000);

2013-05-27 09:04:57

by Marc Dietrich

[permalink] [raw]
Subject: Re: [PATCH 1/2] SCSI: nsp32: replace large udelay by mdelay

James,

Am Mittwoch, 22. Mai 2013, 22:33:18 schrieb Marc Dietrich:
> Looks like Arnd already send a fix for this. Sorry for the noise.

are you going to pick up Arnd's patch [1] for scsi-stable (3.10) branch?

Marc

[1] https://patchwork.kernel.org/patch/2489251/

> Am Mittwoch, 22. Mai 2013, 21:48:41 schrieb Marc Dietrich:
> > ARM has a maximum of 2000 usec delay. Use mdelay for larger delays.
> > This affects distro kernels mostly.
> >
> > Cc: GOTO Masanori <[email protected]>
> > Cc: YOKOTA Hiroshi <[email protected]>
> > Cc: "James E.J. Bottomley" <[email protected]>
> > Cc: [email protected]
> > Cc: [email protected]
> > Signed-off-by: Marc Dietrich <[email protected]>
> > ---
> >
> > drivers/scsi/nsp32.c | 2 +-
> > drivers/scsi/nsp32.h | 2 +-
> > 2 files changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c
> > index 1e3879d..e2f796f 100644
> > --- a/drivers/scsi/nsp32.c
> > +++ b/drivers/scsi/nsp32.c
> > @@ -2899,7 +2899,7 @@ static void nsp32_do_bus_reset(nsp32_hw_data *data)
> >
> > * reset SCSI bus
> > */
> >
> > nsp32_write1(base, SCSI_BUS_CONTROL, BUSCTL_RST);
> >
> > - udelay(RESET_HOLD_TIME);
> > + mdelay(RESET_HOLD_TIME);
> >
> > nsp32_write1(base, SCSI_BUS_CONTROL, 0);
> > for(i = 0; i < 5; i++) {
> >
> > intrdat = nsp32_read2(base, IRQ_STATUS); /* dummy read */
> >
> > diff --git a/drivers/scsi/nsp32.h b/drivers/scsi/nsp32.h
> > index c022182..b2b3dc6 100644
> > --- a/drivers/scsi/nsp32.h
> > +++ b/drivers/scsi/nsp32.h
> > @@ -605,7 +605,7 @@ typedef struct _nsp32_hw_data {
> >
> > /*
> >
> > * TIME definition
> > */
> >
> > -#define RESET_HOLD_TIME 10000 /* reset time in us (SCSI-2 says the
> > +#define RESET_HOLD_TIME 10 /* reset time in ms (SCSI-2 says the
> >
> > minimum is 25us) */
> >
> > #define SEL_TIMEOUT_TIME 10000 /* 250ms defined in SCSI specification
> >
> > (25.6us/1unit) */

2013-05-27 09:10:19

by Marc Dietrich

[permalink] [raw]
Subject: Re: [PATCH 2/2] nouveau: replace large udelay by mdelay

Hi Ben,

can you pick up Arnd's fix from

https://patchwork.kernel.org/patch/2489141/

for your stable (3.10) branch?

Marc

Am Mittwoch, 22. Mai 2013, 21:48:42 schrieb Marc Dietrich:
> ARM has a maximum of 2000 usec delay. Use mdelay for larger delays.
> This affects distro kernels mostly.
>
> Cc: David Airlie <[email protected]>
> Cc: Ben Skeggs <[email protected]>
> Signed-off-by: Marc Dietrich <[email protected]>
> ---
> drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c
> b/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c index d0817d9..ed7415e
> 100644
> --- a/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c
> +++ b/drivers/gpu/drm/nouveau/core/engine/disp/dacnv50.c
> @@ -51,7 +51,8 @@ nv50_dac_sense(struct nv50_disp_priv *priv, int or, u32
> loadval) const u32 doff = (or * 0x800);
> int load = -EINVAL;
> nv_wr32(priv, 0x61a00c + doff, 0x00100000 | loadval);
> - udelay(9500);
> + mdelay(9);
> + udelay(500);
> nv_wr32(priv, 0x61a00c + doff, 0x80000000);
> load = (nv_rd32(priv, 0x61a00c + doff) & 0x38000000) >> 27;
> nv_wr32(priv, 0x61a00c + doff, 0x00000000);