On Wednesday 01 November 2006 21:30, Larry Finger wrote:
> Michael,
> 
> The "badness" variable and the concept of BADNESS_LIMIT were useful during 
> the debugging of the
> preemptible periodic work routines, but now that those problems seem to be 
> fixed, I propose
> simplifying that section of the code according to the patch below. I believe 
> the functionality to be
> identical to what was there before the patch. I expected the size of bcm43xx 
> to be smaller, but on
> i386, at least, the reduction does not cross a page boundary. It does, 
> however, give us a little
> more headroom before we cross that next boundary.

I don't care. You're the maintainer.

> Larry
> 
> 
> Index: wireless-2.6/drivers/net/wireless/bcm43xx/bcm43xx_main.c
> ===================================================================
> --- wireless-2.6.orig/drivers/net/wireless/bcm43xx/bcm43xx_main.c
> +++ wireless-2.6/drivers/net/wireless/bcm43xx/bcm43xx_main.c
> @@ -3192,55 +3192,27 @@ static void bcm43xx_periodic_every15sec(
> 
>   static void do_periodic_work(struct bcm43xx_private *bcm)
>   {
> -     unsigned int state;
> -
> -     state = bcm->periodic_state;
> -     if (state % 8 == 0)
> +     if (bcm->periodic_state % 8 == 0)
>               bcm43xx_periodic_every120sec(bcm);
> -     if (state % 4 == 0)
> +     if (bcm->periodic_state % 4 == 0)
>               bcm43xx_periodic_every60sec(bcm);
> -     if (state % 2 == 0)
> +     if (bcm->periodic_state % 2 == 0)
>               bcm43xx_periodic_every30sec(bcm);
> -     if (state % 1 == 0)
> -             bcm43xx_periodic_every15sec(bcm);
> -     bcm->periodic_state = state + 1;
> +     bcm43xx_periodic_every15sec(bcm);
> 
>       schedule_delayed_work(&bcm->periodic_work, HZ * 15);
>   }
> 
> -/* Estimate a "Badness" value based on the periodic work
> - * state-machine state. "Badness" is worse (bigger), if the
> - * periodic work will take longer.
> - */
> -static int estimate_periodic_work_badness(unsigned int state)
> -{
> -     int badness = 0;
> -
> -     if (state % 8 == 0) /* every 120 sec */
> -             badness += 10;
> -     if (state % 4 == 0) /* every 60 sec */
> -             badness += 5;
> -     if (state % 2 == 0) /* every 30 sec */
> -             badness += 1;
> -     if (state % 1 == 0) /* every 15 sec */
> -             badness += 1;
> -
> -#define BADNESS_LIMIT        4
> -     return badness;
> -}
> -
>   static void bcm43xx_periodic_work_handler(void *d)
>   {
>       struct bcm43xx_private *bcm = d;
>       struct net_device *net_dev = bcm->net_dev;
>       unsigned long flags;
>       u32 savedirqs = 0;
> -     int badness;
>       unsigned long orig_trans_start = 0;
> 
>       mutex_lock(&bcm->mutex);
> -     badness = estimate_periodic_work_badness(bcm->periodic_state);
> -     if (badness > BADNESS_LIMIT) {
> +     if (unlikely(bcm->periodic_state % 4 == 0)) {
>               /* Periodic work will take a long time, so we want it to
>                * be preemtible.
>                */
> @@ -3272,7 +3244,7 @@ static void bcm43xx_periodic_work_handle
> 
>       do_periodic_work(bcm);
> 
> -     if (badness > BADNESS_LIMIT) {
> +     if (unlikely(bcm->periodic_state % 4 == 0)) {
>               spin_lock_irqsave(&bcm->irq_lock, flags);
>               tasklet_enable(&bcm->isr_tasklet);
>               bcm43xx_interrupt_enable(bcm, savedirqs);
> @@ -3283,6 +3255,7 @@ static void bcm43xx_periodic_work_handle
>               net_dev->trans_start = orig_trans_start;
>       }
>       mmiowb();
> +     bcm->periodic_state++;
>       spin_unlock_irqrestore(&bcm->irq_lock, flags);
>       mutex_unlock(&bcm->mutex);
>   }
> 
> 
> ---
> 

-- 
Greetings Michael.
_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev

Reply via email to