Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 56aa07bd authored by Siva Kumar Akkireddi's avatar Siva Kumar Akkireddi Committed by Siddartha Mohanadoss
Browse files

msm: mhi_dev: Do not free channel memory in mhi_deinit



The channel memory may still be referenced when a client calls
mhi_dev_close_channel as part of clean-up when a channel
disconnect notification is sent.

Change-Id: I2dd73efce5186667cf76cf0da3e4f746b0cc8bba
Signed-off-by: default avatarSiva Kumar Akkireddi <sivaa@codeaurora.org>
parent d8283ab4
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -2292,6 +2292,8 @@ int mhi_dev_channel_isempty(struct mhi_dev_client *handle)
	int rc;

	ch = handle->channel;
	if (!ch)
		return -EINVAL;

	rc = ch->ring->rd_offset == ch->ring->wr_offset;

@@ -3060,11 +3062,7 @@ static int mhi_deinit(struct mhi_dev *mhi)
			ring->ring_cache_dma_handle);
	}

	for (i = 0; i < mhi->cfg.channels; i++)
		mutex_destroy(&mhi->ch[i].ch_lock);

	devm_kfree(&pdev->dev, mhi->mmio_backup);
	devm_kfree(&pdev->dev, mhi->ch);
	devm_kfree(&pdev->dev, mhi->ring);

	mhi_dev_sm_exit(mhi);
@@ -3092,6 +3090,11 @@ static int mhi_init(struct mhi_dev *mhi)
	if (!mhi->ring)
		return -ENOMEM;

	/*
	 * mhi_init is also called during device reset, in
	 * which case channel mem will already be allocated.
	 */
	if (!mhi->ch) {
		mhi->ch = devm_kzalloc(&pdev->dev,
			(sizeof(struct mhi_dev_channel) *
			(mhi->cfg.channels)), GFP_KERNEL);
@@ -3100,6 +3103,7 @@ static int mhi_init(struct mhi_dev *mhi)

		for (i = 0; i < mhi->cfg.channels; i++)
			mutex_init(&mhi->ch[i].ch_lock);
	}

	spin_lock_init(&mhi->lock);
	mhi->mmio_backup = devm_kzalloc(&pdev->dev,