lkml.org 
[lkml]   [2023]   [Nov]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v3 3/4] bus: mhi: host: Avoid processing buffer and event of a disable channel
    From

    On 11/10/2023 11:38 AM, Qiang Yu wrote:
    >
    > On 11/10/2023 12:32 AM, Manivannan Sadhasivam wrote:
    >> On Tue, Nov 07, 2023 at 03:16:04PM +0800, Qiang Yu wrote:
    >>> Ckeck mhi channel state after getting chan->lock to ensure that we only
    >>> queue buffer to an enabled channel and process event of an enabled
    >>> channel.
    >>>
    >> This commit message doesn't give proper explanation on how the
    >> channel can go to
    >> disabled state in between parse_xfer_event() and mhi_gen_tre().
    >>
    >> - Mani
    >
    > Hi Mani. How about following commit message
    >
    > MHI channel state is protected by mhi_chan->lock. Hence, after core drops
    > mhi_chan->lock during processing xfer event, it can not prevent channel
    > state being changed if client closes channel or driver is removed at this
    > time. So let's check mhi channel state after getting chan->lock again
    > to avoid
    > queuing buffer to a disabled channel in xfer callback and stop processing
    > event of the disabled channel.
    Hi Mani, Have updated this commit message in V4 patch, hope get your
    comments.
    >
    >>> Signed-off-by: Qiang Yu <quic_qianyu@quicinc.com>
    >>> ---
    >>>   drivers/bus/mhi/host/main.c | 4 ++++
    >>>   1 file changed, 4 insertions(+)
    >>>
    >>> diff --git a/drivers/bus/mhi/host/main.c b/drivers/bus/mhi/host/main.c
    >>> index a236dc2..b137d54 100644
    >>> --- a/drivers/bus/mhi/host/main.c
    >>> +++ b/drivers/bus/mhi/host/main.c
    >>> @@ -672,6 +672,8 @@ static int parse_xfer_event(struct
    >>> mhi_controller *mhi_cntrl,
    >>>               }
    >>>                 read_lock_bh(&mhi_chan->lock);
    >>> +            if (mhi_chan->ch_state != MHI_CH_STATE_ENABLED)
    >>> +                goto end_process_tx_event;
    >>>           }
    >>>           break;
    >>>       } /* CC_EOT */
    >>> @@ -1211,6 +1213,8 @@ int mhi_gen_tre(struct mhi_controller
    >>> *mhi_cntrl, struct mhi_chan *mhi_chan,
    >>>         /* Protect accesses for reading and incrementing WP */
    >>>       write_lock_bh(&mhi_chan->lock);
    >>> +    if (mhi_chan->ch_state != MHI_CH_STATE_ENABLED)
    >>> +        return -EINVAL;
    >>>         buf_ring = &mhi_chan->buf_ring;
    >>>       tre_ring = &mhi_chan->tre_ring;
    >>> --
    >>> 2.7.4
    >>>
    >>>
    >

    \
     
     \ /
      Last update: 2023-11-20 13:58    [W:4.700 / U:0.732 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site