Messages in this thread | | | Date | Thu, 11 Dec 2008 21:24:43 -0800 | From | "Jeff Kirsher" <> | Subject | Re: [PATCH] e1000e: fix double release of mutex |
| |
On Thu, Dec 11, 2008 at 9:20 PM, Jeff Kirsher <jeffrey.t.kirsher@intel.com> wrote: > During a reset, releasing the swflag after it failed to be acquired would > cause a double unlock of the mutex. Instead, test whether acquisition of > the swflag was successful and if not, do not release the swflag. The reset > must still be done to bring the device to a quiescent state. > > This resolves [BUG 12200] BUG: bad unlock balance detected! e1000e > http://bugzilla.kernel.org/show_bug.cgi?id=12200 > > Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> > --- > > drivers/net/e1000e/ich8lan.c | 9 +++++++-- > 1 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c > index 523b971..d115a6d 100644 > --- a/drivers/net/e1000e/ich8lan.c > +++ b/drivers/net/e1000e/ich8lan.c > @@ -1893,12 +1893,17 @@ static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw) > ctrl |= E1000_CTRL_PHY_RST; > } > ret_val = e1000_acquire_swflag_ich8lan(hw); > + /* Whether or not the swflag was acquired, we need to reset the part */ > hw_dbg(hw, "Issuing a global reset to ich8lan"); > ew32(CTRL, (ctrl | E1000_CTRL_RST)); > msleep(20); > > - /* release the swflag because it is not reset by hardware reset */ > - e1000_release_swflag_ich8lan(hw); > + if (!ret_val) { > + /* release the swflag because it is not reset by > + * hardware reset > + */ > + e1000_release_swflag_ich8lan(hw); > + } > > ret_val = e1000e_get_auto_rd_done(hw); > if (ret_val) { > > -- >
I meant to put [RESPIN] in the title, but I did not. So here is the respin.
-- Cheers, Jeff
| |