Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

i2c: omap: sanitize exit path

move the goto out label one line down, so that
it can be used when stat is read as zero. All
other exits, can be done with a break statement.

While at that, also break out as soon as we
complete draining IRQ, since at that time
we know we transferred everything there was
to be transferred.

Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Shubhrajyoti D <shubhrajyoti@ti.com>
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>

authored by

Felipe Balbi and committed by
Wolfram Sang
0bdfe0cb 6d8451d5

+13 -13
+13 -13
drivers/i2c/busses/i2c-omap.c
··· 901 901 902 902 if (!stat) { 903 903 /* my work here is done */ 904 - spin_unlock_irqrestore(&dev->lock, flags); 905 - return IRQ_HANDLED; 904 + goto out; 906 905 } 907 906 908 907 dev_dbg(dev->dev, "IRQ (ISR = 0x%04x)\n", stat); 909 908 if (count++ == 100) { 910 909 dev_warn(dev->dev, "Too much work in one IRQ\n"); 911 - goto out; 910 + break; 912 911 } 913 912 914 913 if (stat & OMAP_I2C_STAT_NACK) { 915 914 err |= OMAP_I2C_STAT_NACK; 916 915 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK); 917 - goto out; 916 + break; 918 917 } 919 918 920 919 if (stat & OMAP_I2C_STAT_AL) { 921 920 dev_err(dev->dev, "Arbitration lost\n"); 922 921 err |= OMAP_I2C_STAT_AL; 923 922 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL); 924 - goto out; 923 + break; 925 924 } 926 925 927 926 /* ··· 933 934 OMAP_I2C_STAT_XRDY | 934 935 OMAP_I2C_STAT_XDR | 935 936 OMAP_I2C_STAT_ARDY)); 936 - goto out; 937 + break; 937 938 } 938 939 939 940 if (stat & OMAP_I2C_STAT_RDR) { ··· 948 949 i2c_omap_errata_i207(dev, stat); 949 950 950 951 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR); 951 - continue; 952 + break; 952 953 } 953 954 954 955 if (stat & OMAP_I2C_STAT_RRDY) { ··· 971 972 972 973 ret = omap_i2c_transmit_data(dev, num_bytes, true); 973 974 if (ret < 0) 974 - goto out; 975 + break; 975 976 976 977 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XDR); 977 - continue; 978 + break; 978 979 } 979 980 980 981 if (stat & OMAP_I2C_STAT_XRDY) { ··· 986 987 987 988 ret = omap_i2c_transmit_data(dev, num_bytes, false); 988 989 if (ret < 0) 989 - goto out; 990 + break; 990 991 991 992 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XRDY); 992 993 continue; ··· 996 997 dev_err(dev->dev, "Receive overrun\n"); 997 998 err |= OMAP_I2C_STAT_ROVR; 998 999 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_ROVR); 999 - goto out; 1000 + break; 1000 1001 } 1001 1002 1002 1003 if (stat & OMAP_I2C_STAT_XUDF) { 1003 1004 dev_err(dev->dev, "Transmit underflow\n"); 1004 1005 err |= OMAP_I2C_STAT_XUDF; 1005 1006 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XUDF); 1006 - goto out; 1007 + break; 1007 1008 } 1008 1009 } while (stat); 1009 1010 1010 - out: 1011 1011 omap_i2c_complete_cmd(dev, err); 1012 + 1013 + out: 1012 1014 spin_unlock_irqrestore(&dev->lock, flags); 1013 1015 1014 1016 return IRQ_HANDLED;