Re: [PATCH v6 8/8] bus: mhi: core: Do not clear channel context more than once
On 2021-02-24 02:10 AM, Manivannan Sadhasivam wrote: On Thu, Feb 04, 2021 at 12:28:06PM -0800, Bhaumik Bhatt wrote: Clearing a channel context can happen twice if the client driver unprepares and reset the channels from the remove() callback from a controller requested MHI power down sequence. If there are multiple attempts at calling the mhi_free_coherent() API, we see kernel warnings such as "trying to free invalid coherent area". Example for one such client is the QRTR MHI driver. Avoid these warnings by skipping mhi_deinit_chan_ctxt() API call and prevent extra work from MHI as the channels are already disabled. Signed-off-by: Bhaumik Bhatt Is this patch still valid? We merged a similar fix from Loic for v5.11. Yes, both the patches work to solve the same problem. This one just does it sooner and relies on internal state variable rather than context being NULL. Thanks, Mani --- drivers/bus/mhi/core/init.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/bus/mhi/core/init.c b/drivers/bus/mhi/core/init.c index 30eef19..272f350 100644 --- a/drivers/bus/mhi/core/init.c +++ b/drivers/bus/mhi/core/init.c @@ -1314,6 +1314,7 @@ static int mhi_driver_remove(struct device *dev) if ((ch_state[dir] == MHI_CH_STATE_ENABLED || ch_state[dir] == MHI_CH_STATE_STOP) && + mhi_chan->ch_state != MHI_CH_STATE_DISABLED && !mhi_chan->offload_ch) mhi_deinit_chan_ctxt(mhi_cntrl, mhi_chan); -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project Thanks, Bhaumik --- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Re: [PATCH v6 8/8] bus: mhi: core: Do not clear channel context more than once
On Thu, Feb 04, 2021 at 12:28:06PM -0800, Bhaumik Bhatt wrote: > Clearing a channel context can happen twice if the client driver > unprepares and reset the channels from the remove() callback from > a controller requested MHI power down sequence. If there are > multiple attempts at calling the mhi_free_coherent() API, we see > kernel warnings such as "trying to free invalid coherent area". > Example for one such client is the QRTR MHI driver. Avoid these > warnings by skipping mhi_deinit_chan_ctxt() API call and prevent > extra work from MHI as the channels are already disabled. > > Signed-off-by: Bhaumik Bhatt Is this patch still valid? We merged a similar fix from Loic for v5.11. Thanks, Mani > --- > drivers/bus/mhi/core/init.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/bus/mhi/core/init.c b/drivers/bus/mhi/core/init.c > index 30eef19..272f350 100644 > --- a/drivers/bus/mhi/core/init.c > +++ b/drivers/bus/mhi/core/init.c > @@ -1314,6 +1314,7 @@ static int mhi_driver_remove(struct device *dev) > > if ((ch_state[dir] == MHI_CH_STATE_ENABLED || >ch_state[dir] == MHI_CH_STATE_STOP) && > + mhi_chan->ch_state != MHI_CH_STATE_DISABLED && > !mhi_chan->offload_ch) > mhi_deinit_chan_ctxt(mhi_cntrl, mhi_chan); > > -- > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, > a Linux Foundation Collaborative Project >
Re: [PATCH v6 8/8] bus: mhi: core: Do not clear channel context more than once
On 2/4/21 12:28 PM, Bhaumik Bhatt wrote: Clearing a channel context can happen twice if the client driver unprepares and reset the channels from the remove() callback from a controller requested MHI power down sequence. If there are multiple attempts at calling the mhi_free_coherent() API, we see kernel warnings such as "trying to free invalid coherent area". Example for one such client is the QRTR MHI driver. Avoid these warnings by skipping mhi_deinit_chan_ctxt() API call and prevent extra work from MHI as the channels are already disabled. Signed-off-by: Bhaumik Bhatt Reviewed-by: Hemant Kumar -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
[PATCH v6 8/8] bus: mhi: core: Do not clear channel context more than once
Clearing a channel context can happen twice if the client driver unprepares and reset the channels from the remove() callback from a controller requested MHI power down sequence. If there are multiple attempts at calling the mhi_free_coherent() API, we see kernel warnings such as "trying to free invalid coherent area". Example for one such client is the QRTR MHI driver. Avoid these warnings by skipping mhi_deinit_chan_ctxt() API call and prevent extra work from MHI as the channels are already disabled. Signed-off-by: Bhaumik Bhatt --- drivers/bus/mhi/core/init.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/bus/mhi/core/init.c b/drivers/bus/mhi/core/init.c index 30eef19..272f350 100644 --- a/drivers/bus/mhi/core/init.c +++ b/drivers/bus/mhi/core/init.c @@ -1314,6 +1314,7 @@ static int mhi_driver_remove(struct device *dev) if ((ch_state[dir] == MHI_CH_STATE_ENABLED || ch_state[dir] == MHI_CH_STATE_STOP) && + mhi_chan->ch_state != MHI_CH_STATE_DISABLED && !mhi_chan->offload_ch) mhi_deinit_chan_ctxt(mhi_cntrl, mhi_chan); -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project