Commit c80c4a1e authored by Alex Elder's avatar Alex Elder Committed by Jakub Kicinski

net: ipa: count actual work done in gsi_channel_poll()

There is an off-by-one problem in gsi_channel_poll().  The count of
transactions completed is incremented each time through the loop
*before* determining whether there is any more work to do.  As a
result, if we exit the loop early the counter its value is one more
than the number of transactions actually processed.

Instead, increment the count after processing, to ensure it reflects
the number of processed transactions.  The result is more naturally
described as a for loop rather than a while loop, so change that.
Signed-off-by: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 59a49d96
...@@ -1543,13 +1543,12 @@ static struct gsi_trans *gsi_channel_poll_one(struct gsi_channel *channel) ...@@ -1543,13 +1543,12 @@ static struct gsi_trans *gsi_channel_poll_one(struct gsi_channel *channel)
static int gsi_channel_poll(struct napi_struct *napi, int budget) static int gsi_channel_poll(struct napi_struct *napi, int budget)
{ {
struct gsi_channel *channel; struct gsi_channel *channel;
int count = 0; int count;
channel = container_of(napi, struct gsi_channel, napi); channel = container_of(napi, struct gsi_channel, napi);
while (count < budget) { for (count = 0; count < budget; count++) {
struct gsi_trans *trans; struct gsi_trans *trans;
count++;
trans = gsi_channel_poll_one(channel); trans = gsi_channel_poll_one(channel);
if (!trans) if (!trans)
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment