[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <20100824.014842.193701591.davem@davemloft.net>
Date: Tue, 24 Aug 2010 01:48:42 -0700 (PDT)
From: David Miller <davem@...emloft.net>
To: nhorman@...driver.com
Cc: eric.dumazet@...il.com, netdev@...r.kernel.org
Subject: Re: [PATCH] Fix deadlock between boomerang_interrupt and
boomerang_start_tx in 3c59x
From: Neil Horman <nhorman@...driver.com>
Date: Mon, 23 Aug 2010 19:41:44 -0400
> Ah, I see what your saying. Since bitfield access is not a single instruction
> you get races when multiple accesses take place at once, since the assignment is
> non-atomic, nor is the read.
>
> In this case, thats ok. I say that because in the only time we really care what
> the value of this bitfield is, is when we've recursed from the interrupt handler
> to the netconsole module, back into the transmit path on the same cpu. In that
> case the read is guaranteed to be ordered after the write, since its a linear
> code path. In the case where cpu 0 is in the interrupt handler and cpu1 is
> going into the transmit method for this driver, we don't really care what the
> value of the bitfield is, its a don't care. If we read it as a zero, thats ok,
> we have the driver-internal sempahore still protecting us (the one that
> deadlocks if you recurse via netconsole on the same cpu). And if we read it as
> a 1, thats ok too, because we simply cause the network scheduler to queue the
> frame and send it again as soon as we're out of the interrupt handler.
Right this should be OK.
The only write to the bit happens with the lock held.
The other bits are never modified while the device is active
and interrupts can run.
I've applied Neil's patch, thanks Neil.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists