BNX2X: spatch atomics
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 19 Feb 2015 21:15:56 +0000 (16:15 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 2 Mar 2015 16:59:10 +0000 (11:59 -0500)
Gotta love the little things, like how the atomic_add()s differ in the order of
the arguments.

Manually uncommented the two functions, of course.

kern/drivers/net/bnx2x/bnx2x_main.c
kern/drivers/net/bnx2x/bnx2x_sp.c
scripts/spatch/linux/sync.cocci

index 4104220..a469eb3 100644 (file)
@@ -5634,7 +5634,7 @@ next_spqe:
        } /* for */
 
        cmb();
-       atomic_add(spqe_cnt, &bp->eq_spq_left);
+       atomic_add(&bp->eq_spq_left, spqe_cnt);
 
        bp->eq_cons = sw_cons;
        bp->eq_prod = sw_prod;
index 83e1e20..a3e7818 100644 (file)
@@ -3710,8 +3710,6 @@ void bnx2x_init_mcast_obj(struct bnx2x *bp,
  */
 static inline bool __atomic_add_ifless(atomic_t *v, int a, int u)
 {
-panic("Not implemented");
-#if 0 // AKAROS_PORT
        int c, old;
 
        c = atomic_read(v);
@@ -3719,14 +3717,13 @@ panic("Not implemented");
                if (unlikely(c + a >= u))
                        return false;
 
-               old = atomic_cmpxchg((v), c, c + a);
+               old = atomic_cas((v), c, c + a);
                if (likely(old == c))
                        break;
                c = old;
        }
 
        return true;
-#endif
 }
 
 /**
@@ -3741,8 +3738,6 @@ panic("Not implemented");
  */
 static inline bool __atomic_dec_ifmoe(atomic_t *v, int a, int u)
 {
-panic("Not implemented");
-#if 0 // AKAROS_PORT
        int c, old;
 
        c = atomic_read(v);
@@ -3750,14 +3745,13 @@ panic("Not implemented");
                if (unlikely(c - a < u))
                        return false;
 
-               old = atomic_cmpxchg((v), c, c - a);
+               old = atomic_cas((v), c, c - a);
                if (likely(old == c))
                        break;
                c = old;
        }
 
        return true;
-#endif
 }
 
 static bool bnx2x_credit_pool_get(struct bnx2x_credit_pool_obj *o, int cnt)
index 595f68b..09f1797 100644 (file)
@@ -43,3 +43,18 @@ expression DEV;
 @@
 -netif_addr_unlock_bh(DEV)
 +qunlock(&DEV->qlock)
+
+@@
+expression AMT;
+expression VARP;
+@@
+-atomic_add(AMT, VARP)
++atomic_add(VARP, AMT)
+
+@@
+expression VARP;
+expression OLD;
+expression NEW;
+@@
+-atomic_cmpxchg(VARP, OLD, NEW)
++atomic_cas(VARP, OLD, NEW)