be2net: fix a possible events_get() race on BE2
authorSathya Perla <sathya.perla@emulex.com>
Fri, 23 Nov 2012 00:27:18 +0000 (00:27 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 23 Nov 2012 19:26:08 +0000 (14:26 -0500)
commit0b545a62915aa635a5d41f64cbf3b7650c132a8d
tree77a24000819fa306dc448419642dbd52eda0301a
parent9ce99cf6dc011a98ef8d64638d4353501de6f6c9
be2net: fix a possible events_get() race on BE2

On BE2 chip, an interrupt being raised even when EQ is in un-armed state has
been observed a few times.  This is not expected and has never been
observed on BE3/Lancer chips.

As a consequence, be_msix()::events_get() and be_poll()::events_get()
can race and notify an EQ wrongly causing a CEV UE. The other possible
side-effect would be traffic stalling because after notifying EQ,
napi_schedule() is ignored as NAPI is already running.

This patch fixes this issue by counting events only in be_poll().

Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/emulex/benet/be_main.c