mlx4: restore conditional call to napi_complete_done()
authorEric Dumazet <edumazet@google.com>
Mon, 10 Nov 2014 22:07:20 +0000 (14:07 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 11 Nov 2014 02:09:03 +0000 (21:09 -0500)
After commit 1a28817282 ("mlx4: use napi_complete_done()") we ended up
calling napi_complete_done() in the case NAPI poll consumed all its
budget.

This added extra interrupt pressure, this patch restores proper
behavior.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Fixes: 1a28817282 ("mlx4: use napi_complete_done()")
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/en_rx.c

index 46ee78326f1fecb14f42d1afcc113fa18087cfa6..5a193f40a14c2a89fecfbac5dce0771e15e69861 100644 (file)
@@ -910,13 +910,14 @@ int mlx4_en_poll_rx_cq(struct napi_struct *napi, int budget)
                cpu_curr = smp_processor_id();
                aff = irq_desc_get_irq_data(cq->irq_desc)->affinity;
 
-               if (unlikely(!cpumask_test_cpu(cpu_curr, aff))) {
-                       /* Current cpu is not according to smp_irq_affinity -
-                        * probably affinity changed. need to stop this NAPI
-                        * poll, and restart it on the right CPU
-                        */
-                       done = 0;
-               }
+               if (likely(cpumask_test_cpu(cpu_curr, aff)))
+                       return budget;
+
+               /* Current cpu is not according to smp_irq_affinity -
+                * probably affinity changed. need to stop this NAPI
+                * poll, and restart it on the right CPU
+                */
+               done = 0;
        }
        /* Done for now */
        napi_complete_done(napi, done);