misc: mic: Fix crash when MIC reset is invoked in RESET_FAILED state
authorAshutosh Dixit <ashutosh.dixit@intel.com>
Tue, 17 Nov 2015 23:55:37 +0000 (15:55 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 8 Feb 2016 06:53:40 +0000 (22:53 -0800)
commitf38e87e8c8d326ec6cddfc3f286b605d996a52a3
tree53e4b89cefab1d0183f7f380668d8e6862426cd9
parent3f040887a8be0c28a099a9106bc29443d4f79a7e
misc: mic: Fix crash when MIC reset is invoked in RESET_FAILED state

This patch fixes the following crash seen when MIC reset is invoked in
RESET_FAILED state due to device_del being called a second time on an
already deleted device:

[<ffffffff813b2295>] device_del+0x45/0x1d0
[<ffffffff813b243e>] device_unregister+0x1e/0x60
[<ffffffffa040f1c2>] scif_unregister_device+0x12/0x20 [scif_bus]
[<ffffffffa042f75a>] cosm_stop+0xaa/0xe0 [mic_cosm]
[<ffffffffa042f844>] cosm_reset_trigger_work+0x14/0x20 [mic_cosm]

The fix consists in realizing that because cosm_reset changes the
state to MIC_RESETTING, cosm_stop needs the previous state, before it
changed to MIC_RESETTING, to decide whether a hw_ops->stop had
previously been issued. This is now provided in a new cosm_device
member cdev->prev_state.

Reviewed-by: Sudeep Dutt <sudeep.dutt@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/mic/bus/cosm_bus.h
drivers/misc/mic/cosm/cosm_main.c