msm: mhi_dev: Avoiding freeing of ereq memory in reset

With the commit <1528bbe6b5> ("msm: mhi_dev: Keeping event req
memory without clearing in close channel"), we are avoiding freeing
of ereq memory in close channel API. New memory is not created again
as part of start/open channel since it is not released while closing
the channel. Idea is to hold the allocated memory and avoid
reallocating every time.

But during the reset command we are freeing some of the ereqs which we
need to hold without releasing.

This change avoids freeing of ereq memory as part of reset channel
command and adds the ereqs to the event_req_buffers list. This ensures
that the lists, event_req_buffers and flush_event_req_buffers are
updated with valid ereqs.

Change-Id: Ie29962f2bc8ef5a0c193d13a13118ae9b6044c0b
Signed-off-by: Sai Chaitanya Kaveti <quic_skaveti@quicinc.com>
This commit is contained in:
Sai Chaitanya Kaveti 2022-02-21 14:32:50 +05:30 • committed by Gerrit - the friendly Code Review server
commit 77221bae90

View file

@ -1868,15 +1868,15 @@ static void mhi_dev_process_reset_cmd(struct mhi_dev *mhi, int ch_id)
mhi_log(MHI_MSG_VERBOSE, "Processing reset cmd for ch%d\n", ch_id);
/*
* Ensure that the completions that are present in the flush list are
* removed from the list and discarded before stopping the channel.
* Otherwise, those stale events may get flushed along with a valid
* event in the next flush operation.
* removed from the list and added to event req list before channel
* reset. Otherwise, those stale events may get flushed along with a
* valid event in the next flush operation.
*/
spin_lock_irqsave(&mhi_ctx->lock, flags);
if (!list_empty(&ch->flush_event_req_buffers)) {
list_for_each_entry_safe(itr, tmp, &ch->flush_event_req_buffers, list) {
list_del(&itr->list);
kfree(itr);
list_add_tail(&itr->list, &ch->event_req_buffers);
}
}
spin_unlock_irqrestore(&mhi_ctx->lock, flags);