Message ID | 20210203152855.11866-3-elder@linaro.org |
---|---|
State | New |
Headers | show |
Series | net: ipa: a mix of small improvements | expand |
On Wed, 3 Feb 2021 09:28:50 -0600 Alex Elder wrote: > int gsi_channel_suspend(struct gsi *gsi, u32 channel_id, bool stop) > { > struct gsi_channel *channel = &gsi->channel[channel_id]; > + int ret; > > - return __gsi_channel_stop(channel, stop); > + /* Synchronize NAPI if successful, to ensure polling has finished. */ > + ret = __gsi_channel_stop(channel, stop); > + if (!ret) > + napi_synchronize(&channel->napi); > + > + return ret; nit: ret = function(); if (ret) return ret; /* success path: do something else */ return 0;
On 2/4/21 10:53 PM, Jakub Kicinski wrote: > On Wed, 3 Feb 2021 09:28:50 -0600 Alex Elder wrote: >> int gsi_channel_suspend(struct gsi *gsi, u32 channel_id, bool stop) >> { >> struct gsi_channel *channel = &gsi->channel[channel_id]; >> + int ret; >> >> - return __gsi_channel_stop(channel, stop); >> + /* Synchronize NAPI if successful, to ensure polling has finished. */ >> + ret = __gsi_channel_stop(channel, stop); >> + if (!ret) >> + napi_synchronize(&channel->napi); >> + >> + return ret; > > nit: > > ret = function(); > if (ret) > return ret; > > /* success path: do something else */ > > return 0; No problem, I'm happy with it the way you suggest. I will update in v2. Thank you. -Alex
diff --git a/drivers/net/ipa/gsi.c b/drivers/net/ipa/gsi.c index 2671b76ebcfe3..420d0f3bfae9a 100644 --- a/drivers/net/ipa/gsi.c +++ b/drivers/net/ipa/gsi.c @@ -939,10 +939,6 @@ static int __gsi_channel_stop(struct gsi_channel *channel, bool stop) mutex_unlock(&gsi->mutex); } - /* Finally, ensure NAPI polling has finished. */ - if (!ret) - napi_synchronize(&channel->napi); - return ret; } @@ -984,8 +980,14 @@ void gsi_channel_reset(struct gsi *gsi, u32 channel_id, bool doorbell) int gsi_channel_suspend(struct gsi *gsi, u32 channel_id, bool stop) { struct gsi_channel *channel = &gsi->channel[channel_id]; + int ret; - return __gsi_channel_stop(channel, stop); + /* Synchronize NAPI if successful, to ensure polling has finished. */ + ret = __gsi_channel_stop(channel, stop); + if (!ret) + napi_synchronize(&channel->napi); + + return ret; } /* Resume a suspended channel (starting will be requested if STOPPED) */
When stopping a channel, gsi_channel_stop() will ensure NAPI polling is complete when it calls napi_disable(). So there is no need to call napi_synchronize() in that case. Move the call to napi_synchronize() out of __gsi_channel_stop() and into gsi_channel_suspend(), so it's only used where needed. Signed-off-by: Alex Elder <elder@linaro.org> --- drivers/net/ipa/gsi.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) -- 2.20.1