sh: intc_prio_data() test before subtraction on unsigned
authorroel kluin <roel.kluin@gmail.com>
Tue, 9 Sep 2008 21:02:43 +0000 (23:02 +0200)
committerPaul Mundt <lethal@linux-sh.org>
Wed, 10 Sep 2008 03:01:46 +0000 (12:01 +0900)
bit is unsigned, so test before subtraction

Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/kernel/cpu/irq/intc.c

index 8c70e201bde0ff61994fc179ec02e70746b13bcc..94536d358fe17e333f3a843c0abf274fd76272e6 100644 (file)
@@ -464,9 +464,10 @@ static unsigned int __init intc_prio_data(struct intc_desc *desc,
                        }
 
                        fn += (pr->reg_width >> 3) - 1;
-                       bit = pr->reg_width - ((j + 1) * pr->field_width);
 
-                       BUG_ON(bit < 0);
+                       BUG_ON((j + 1) * pr->field_width > pr->reg_width);
+
+                       bit = pr->reg_width - ((j + 1) * pr->field_width);
 
                        return _INTC_MK(fn, mode,
                                        intc_get_reg(d, reg_e),
@@ -531,9 +532,10 @@ static unsigned int __init intc_sense_data(struct intc_desc *desc,
 
                        fn = REG_FN_MODIFY_BASE;
                        fn += (sr->reg_width >> 3) - 1;
-                       bit = sr->reg_width - ((j + 1) * sr->field_width);
 
-                       BUG_ON(bit < 0);
+                       BUG_ON((j + 1) * sr->field_width > sr->reg_width);
+
+                       bit = sr->reg_width - ((j + 1) * sr->field_width);
 
                        return _INTC_MK(fn, 0, intc_get_reg(d, sr->reg),
                                        0, sr->field_width, bit);