On Tuesday 27 June 2006 21:33, John W. Linville wrote: > On Tue, Jun 27, 2006 at 06:31:01PM +0200, Michael Buesch wrote: > > On Tuesday 27 June 2006 18:12, Jeff Garzik wrote: > > > Michael Buesch wrote: > > > > So, I will submit a patch to lower the udelay(10) to udelay(1) > > > > and we can close the discussion? ;) > > > > > > No, that totally avoids my point. Your "otherwise idle machine" test is > > > probably nowhere near worst case in the field, for loops that can > > > potentially lock the CPU for a long time upon hardware fault. And then > > > there are the huge delays in specific functions that I pointed out... > > > > wtf are you requesting from me? > > 1) I proved you that the loop does only spin _once_ or even _less_. > > 2) If the hardware is faulty, the user must replace it. > > Because, if the hardware is faulty, it can crash the whole > > machine anyway, obviously. > > > > 3) There is no "huge delay". I proved it with my logs. > > -> No CPU hog => Nothing to fix. > > Michael, > > I think Jeff's concern is that by using udelay you are busy-waiting. > And, the for loop limit of 100000 means you could freeze the kernel > for up to a whole second. Granted that this won't happen very often
s/very often/ever/ It won't happen, as long as the driver is not buggy, or the device is hardware broken. So, if it happens, something has to be fixed. In fact, it did happen _never_ for me. If it triggers, the device does not work _at all_ anyway. > and in the grand scheme of things a second isn't all _that_ long, > but still it would be better to avoid a delay like that -- a second > could be the time it takes to avoid a meltdown at the nuclear power > plant. :-) > > Could you not use msleep instead of udelay (and scale the for loop > appropriately)? What would be the problem with that? It would get > rid of the busy waiting. Becauses it horribly _increases_ the delay. We "spin" for _at most_ 10 usecs here. Please always remember that. We are talking about a 10 usec delay here. And I already sent a patch to even reduce this to under 10 usec. > To be fair, this code was already in the driver and was only being > moved by this patch. Still, what better time to fix it than now? :-) If it ain't broken, don't fix it. > I'll go ahead and reshuffle wireless-2.6 to drop this patch. A new > patch that passes muster w/ Jeff will be most welcome! :-) A new patch won't appear, as there is no problem with this delay. Please don't drop anything and apply the following patch on top of it: -- Microoptimization: This reduces the udelay in bcm43xx_mac_suspend. Signed-off-by: Michael Buesch <[EMAIL PROTECTED]> Index: wireless-2.6/drivers/net/wireless/bcm43xx/bcm43xx_main.c =================================================================== --- wireless-2.6.orig/drivers/net/wireless/bcm43xx/bcm43xx_main.c 2006-06-27 17:47:24.000000000 +0200 +++ wireless-2.6/drivers/net/wireless/bcm43xx/bcm43xx_main.c 2006-06-27 17:53:29.000000000 +0200 @@ -2328,7 +2328,7 @@ tmp = bcm43xx_read32(bcm, BCM43xx_MMIO_GEN_IRQ_REASON); if (tmp & BCM43xx_IRQ_READY) goto out; - udelay(10); + udelay(1); } printkl(KERN_ERR PFX "MAC suspend failed\n"); } -- Greetings Michael. - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html