From 5cfb42acc84d8d01d6745e81b68abe1ddf3ca80d Mon Sep 17 00:00:00 2001 From: Hemant Kumar Date: Thu, 9 Jan 2020 14:36:05 -0800 Subject: [PATCH] mhi: device: netdev: Add flag to track napi scheduling Flag is set to true when napi_schedule is called and false when napi_complete is called. This helps to identify the status of napi if a data stall is reported on downlink. Change-Id: Id54340c0274da3120f21154c0774e035a61347a9 Signed-off-by: Hemant Kumar --- drivers/bus/mhi/devices/mhi_netdev.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/bus/mhi/devices/mhi_netdev.c b/drivers/bus/mhi/devices/mhi_netdev.c index bcd5065cce68..14c03244fc92 100644 --- a/drivers/bus/mhi/devices/mhi_netdev.c +++ b/drivers/bus/mhi/devices/mhi_netdev.c @@ -111,6 +111,7 @@ struct mhi_netdev { /* debug stats */ u32 abuffers, kbuffers, rbuffers; + bool napi_scheduled; }; struct mhi_netdev_priv { @@ -449,6 +450,7 @@ static int mhi_netdev_alloc_thread(void *data) /* replenish the ring */ napi_schedule(mhi_netdev->napi); + mhi_netdev->napi_scheduled = true; /* wait for buffers to run low or thread to stop */ wait_event_interruptible(mhi_netdev->alloc_event, @@ -488,6 +490,7 @@ static int mhi_netdev_poll(struct napi_struct *napi, int budget) if (rx_work < 0) { MSG_ERR("Error polling ret:%d\n", rx_work); napi_complete(napi); + mhi_netdev->napi_scheduled = false; return 0; } @@ -498,8 +501,10 @@ static int mhi_netdev_poll(struct napi_struct *napi, int budget) mhi_netdev_queue(mhi_netdev, rsc_dev->mhi_dev); /* complete work if # of packet processed less than allocated budget */ - if (rx_work < budget) + if (rx_work < budget) { napi_complete(napi); + mhi_netdev->napi_scheduled = false; + } MSG_VERB("polled %d pkts\n", rx_work); @@ -835,6 +840,7 @@ static void mhi_netdev_status_cb(struct mhi_device *mhi_dev, enum MHI_CB mhi_cb) return; napi_schedule(mhi_netdev->napi); + mhi_netdev->napi_scheduled = true; } #ifdef CONFIG_DEBUG_FS @@ -1098,6 +1104,7 @@ static int mhi_netdev_probe(struct mhi_device *mhi_dev, * by triggering a napi_poll */ napi_schedule(mhi_netdev->napi); + mhi_netdev->napi_scheduled = true; return 0; }