Subject: Re: [PATCH 2/5] skge: irq lock race

From: Jeff Garzik <[email-masked]>
Date: Wed, 06 Sep 2006 11:19:13 -0400

Stephen Hemminger wrote:
> The driver needs to access the IRQ status inside of lock to avoid
> races with other places changing IRQ mask etc. This may be related
> to some of the SMP bugs reported against skge in kernel bugzilla.
> 
> Signed-off-by: Stephen Hemminger <[email-masked]>
> 
> --- netdev-2.6.orig/drivers/net/skge.c
> +++ netdev-2.6/drivers/net/skge.c
> @@ -2891,13 +2891,15 @@ static irqreturn_t skge_intr(int irq, vo
>  {
>  	struct skge_hw *hw = dev_id;
>  	u32 status;
> +	int handled = 0;
>  
> +	spin_lock(&hw->hw_lock);
>  	/* Reading this register masks IRQ */
>  	status = skge_read32(hw, B0_SP_ISRC);
>  	if (status == 0)
> -		return IRQ_NONE;
> +		goto out;

You also need to check for device/hardware fault here (status==0xffffffff).

	Jeff