On Thu, Oct 29, 2020 at 09:10:50PM -0700, Bhaumik Bhatt wrote: > If an mhi_power_down() is initiated after the device has entered > RDDM and a status callback was provided for it, it is possible > that another BHI interrupt fires while waiting for the MHI > RESET to be cleared. If that happens, MHI host would have moved > a "disabled" execution environment and the check to allow sending > an RDDM status callback will pass when it is should not. Add a > check to see if MHI is in an active state before proceeding. > > Signed-off-by: Bhaumik Bhatt <bbhatt@xxxxxxxxxxxxxx> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx> Thanks, Mani > --- > drivers/bus/mhi/core/main.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c > index 1f32d67..172b48b 100644 > --- a/drivers/bus/mhi/core/main.c > +++ b/drivers/bus/mhi/core/main.c > @@ -399,6 +399,10 @@ irqreturn_t mhi_intvec_threaded_handler(int irq_number, void *priv) > > /* If device supports RDDM don't bother processing SYS error */ > if (mhi_cntrl->rddm_image) { > + /* host may be performing a device power down already */ > + if (!mhi_is_active(mhi_cntrl)) > + goto exit_intvec; > + > if (mhi_cntrl->ee == MHI_EE_RDDM && mhi_cntrl->ee != ee) { > mhi_cntrl->status_cb(mhi_cntrl, MHI_CB_EE_RDDM); > wake_up_all(&mhi_cntrl->state_event); > -- > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, > a Linux Foundation Collaborative Project >