2015-06-12 16:58:32

by Nicholas Mc Guire

[permalink] [raw]
Subject: [BUG ?] delay always evaluates to 0

Hi !

commit 2c86c275015c ("Add ipw2100 wireless driver.") introduced

drivers/net/wireless/ipw2100.c - line-numbers are from next-20150511
1410 static int ipw2100_hw_phy_off(struct ipw2100_priv *priv)
1411 {
1412
1413 #define HW_PHY_OFF_LOOP_DELAY (HZ / 5000)
1414
...
1437
1438 schedule_timeout_uninterruptible(HW_PHY_OFF_LOOP_DELAY);
1439 }

but (HZ / 5000) will evaluate to 0 for all configurable HZ values - typo ?
and this schedule_timeout_uninterruptible() is probably not doing what
is intended.

thx!
hofrat


2015-06-15 17:38:28

by Nicholas Mc Guire

[permalink] [raw]
Subject: Re: [BUG ?] delay always evaluates to 0

On Mon, 15 Jun 2015, Stanislav Yakovlev wrote:

> Hi Nicholas,
>
> On 12 June 2015 at 20:58, Nicholas Mc Guire <[email protected]> wrote:
> > Hi !
> >
> > commit 2c86c275015c ("Add ipw2100 wireless driver.") introduced
> >
> > drivers/net/wireless/ipw2100.c - line-numbers are from next-20150511
> > 1410 static int ipw2100_hw_phy_off(struct ipw2100_priv *priv)
> > 1411 {
> > 1412
> > 1413 #define HW_PHY_OFF_LOOP_DELAY (HZ / 5000)
> > 1414
> > ...
> > 1437
> > 1438 schedule_timeout_uninterruptible(HW_PHY_OFF_LOOP_DELAY);
> > 1439 }
> >
> > but (HZ / 5000) will evaluate to 0 for all configurable HZ values - typo ?
> > and this schedule_timeout_uninterruptible() is probably not doing what
> > is intended.
>
> Yes, you are right. This is a bug. I think it should be:
>
> -#define HW_PHY_OFF_LOOP_DELAY (HZ / 5000)
> +#define HW_PHY_OFF_LOOP_DELAY (msecs_to_jiffies(50))
>
> Will you send us a patch?
>
just sent it out - thanks!

hofrat

2015-06-15 12:38:44

by Stanislav Yakovlev

[permalink] [raw]
Subject: Re: [BUG ?] delay always evaluates to 0

Hi Nicholas,

On 12 June 2015 at 20:58, Nicholas Mc Guire <[email protected]> wrote:
> Hi !
>
> commit 2c86c275015c ("Add ipw2100 wireless driver.") introduced
>
> drivers/net/wireless/ipw2100.c - line-numbers are from next-20150511
> 1410 static int ipw2100_hw_phy_off(struct ipw2100_priv *priv)
> 1411 {
> 1412
> 1413 #define HW_PHY_OFF_LOOP_DELAY (HZ / 5000)
> 1414
> ...
> 1437
> 1438 schedule_timeout_uninterruptible(HW_PHY_OFF_LOOP_DELAY);
> 1439 }
>
> but (HZ / 5000) will evaluate to 0 for all configurable HZ values - typo ?
> and this schedule_timeout_uninterruptible() is probably not doing what
> is intended.

Yes, you are right. This is a bug. I think it should be:

-#define HW_PHY_OFF_LOOP_DELAY (HZ / 5000)
+#define HW_PHY_OFF_LOOP_DELAY (msecs_to_jiffies(50))

Will you send us a patch?

Stanislav.


>
> thx!
> hofrat