From: Alex Elder Date: Mon, 1 Feb 2021 17:28:45 +0000 (-0600) Subject: net: ipa: introduce gsi_channel_stop_retry() X-Git-Tag: io_uring-worker.v3-2021-02-25~99^2~183^2~5 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=697e834e143afa733913fe2c9bc06b5e4d139c66;p=linux-block.git net: ipa: introduce gsi_channel_stop_retry() Create a new helper function that encapsulates issuing a set of channel stop commands, retrying if appropriate, with a short delay between attempts. Signed-off-by: Alex Elder Acked-by: Willem de Bruijn Signed-off-by: Jakub Kicinski --- diff --git a/drivers/net/ipa/gsi.c b/drivers/net/ipa/gsi.c index 1df7775a9bee..1d89ea6b9fe7 100644 --- a/drivers/net/ipa/gsi.c +++ b/drivers/net/ipa/gsi.c @@ -892,15 +892,12 @@ int gsi_channel_start(struct gsi *gsi, u32 channel_id) return ret; } -/* Stop a started channel */ -int gsi_channel_stop(struct gsi *gsi, u32 channel_id) +static int gsi_channel_stop_retry(struct gsi_channel *channel) { - struct gsi_channel *channel = &gsi->channel[channel_id]; u32 retries = GSI_CHANNEL_STOP_RETRIES; + struct gsi *gsi = channel->gsi; int ret; - gsi_channel_freeze(channel); - mutex_lock(&gsi->mutex); do { @@ -912,6 +909,19 @@ int gsi_channel_stop(struct gsi *gsi, u32 channel_id) mutex_unlock(&gsi->mutex); + return ret; +} + +/* Stop a started channel */ +int gsi_channel_stop(struct gsi *gsi, u32 channel_id) +{ + struct gsi_channel *channel = &gsi->channel[channel_id]; + int ret; + + gsi_channel_freeze(channel); + + ret = gsi_channel_stop_retry(channel); + /* Re-thaw the channel if an error occurred while stopping */ if (ret) gsi_channel_thaw(channel);