isdn: hisax: fix frame calculation
authorAndrzej Hajda <a.hajda@samsung.com>
Mon, 21 Sep 2015 13:33:49 +0000 (15:33 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 22 Sep 2015 23:14:31 +0000 (16:14 -0700)
Difference of unsigned values is also unsigned so it does not make
sense to check its sign.

The problem has been detected using proposed semantic patch
scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci [1].

[1]: http://permalink.gmane.org/gmane.linux.kernel/2038576

Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/isdn/hisax/hfc4s8s_l1.c

index 0e5d673871c05b30bc906e7131ead462eb86c667..9600cd771f1a3a234a3b7c647904f3dbd22385c7 100644 (file)
@@ -646,14 +646,14 @@ rx_d_frame(struct hfc4s8s_l1 *l1p, int ech)
 
                f1 = Read_hfc8_stable(l1p->hw, A_F1);
                f2 = Read_hfc8(l1p->hw, A_F2);
-               df = f1 - f2;
-               if ((f1 - f2) < 0)
-                       df = f1 - f2 + MAX_F_CNT + 1;
 
+               if (f1 < f2)
+                       df = MAX_F_CNT + 1 + f1 - f2;
+               else
+                       df = f1 - f2;
 
-               if (!df) {
+               if (!df)
                        return; /* no complete frame in fifo */
-               }
 
                z1 = Read_hfc16_stable(l1p->hw, A_Z1);
                z2 = Read_hfc16(l1p->hw, A_Z2);