mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 23:27:06 +00:00
mISDN: fix a loop count
There are two issue here.
1) cnt starts as maxloop + 1 so all these loops iterate one more time
than intended.
2) At the end of the loop we test for "if (maxloop && !cnt)" but for
the first two loops, we end with cnt equal to -1. Changing this to
a pre-op means we end with cnt set to 0.
Fixes: cae86d4a4e
('mISDN: Add driver for Infineon ISDN chipset family')
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2b2b31c845
commit
40d24c4d8a
1 changed files with 3 additions and 4 deletions
|
@ -1170,7 +1170,7 @@ mISDNipac_irq(struct ipac_hw *ipac, int maxloop)
|
||||||
|
|
||||||
if (ipac->type & IPAC_TYPE_IPACX) {
|
if (ipac->type & IPAC_TYPE_IPACX) {
|
||||||
ista = ReadIPAC(ipac, ISACX_ISTA);
|
ista = ReadIPAC(ipac, ISACX_ISTA);
|
||||||
while (ista && cnt--) {
|
while (ista && --cnt) {
|
||||||
pr_debug("%s: ISTA %02x\n", ipac->name, ista);
|
pr_debug("%s: ISTA %02x\n", ipac->name, ista);
|
||||||
if (ista & IPACX__ICA)
|
if (ista & IPACX__ICA)
|
||||||
ipac_irq(&ipac->hscx[0], ista);
|
ipac_irq(&ipac->hscx[0], ista);
|
||||||
|
@ -1182,7 +1182,7 @@ mISDNipac_irq(struct ipac_hw *ipac, int maxloop)
|
||||||
}
|
}
|
||||||
} else if (ipac->type & IPAC_TYPE_IPAC) {
|
} else if (ipac->type & IPAC_TYPE_IPAC) {
|
||||||
ista = ReadIPAC(ipac, IPAC_ISTA);
|
ista = ReadIPAC(ipac, IPAC_ISTA);
|
||||||
while (ista && cnt--) {
|
while (ista && --cnt) {
|
||||||
pr_debug("%s: ISTA %02x\n", ipac->name, ista);
|
pr_debug("%s: ISTA %02x\n", ipac->name, ista);
|
||||||
if (ista & (IPAC__ICD | IPAC__EXD)) {
|
if (ista & (IPAC__ICD | IPAC__EXD)) {
|
||||||
istad = ReadISAC(isac, ISAC_ISTA);
|
istad = ReadISAC(isac, ISAC_ISTA);
|
||||||
|
@ -1200,7 +1200,7 @@ mISDNipac_irq(struct ipac_hw *ipac, int maxloop)
|
||||||
ista = ReadIPAC(ipac, IPAC_ISTA);
|
ista = ReadIPAC(ipac, IPAC_ISTA);
|
||||||
}
|
}
|
||||||
} else if (ipac->type & IPAC_TYPE_HSCX) {
|
} else if (ipac->type & IPAC_TYPE_HSCX) {
|
||||||
while (cnt) {
|
while (--cnt) {
|
||||||
ista = ReadIPAC(ipac, IPAC_ISTAB + ipac->hscx[1].off);
|
ista = ReadIPAC(ipac, IPAC_ISTAB + ipac->hscx[1].off);
|
||||||
pr_debug("%s: B2 ISTA %02x\n", ipac->name, ista);
|
pr_debug("%s: B2 ISTA %02x\n", ipac->name, ista);
|
||||||
if (ista)
|
if (ista)
|
||||||
|
@ -1211,7 +1211,6 @@ mISDNipac_irq(struct ipac_hw *ipac, int maxloop)
|
||||||
mISDNisac_irq(isac, istad);
|
mISDNisac_irq(isac, istad);
|
||||||
if (0 == (ista | istad))
|
if (0 == (ista | istad))
|
||||||
break;
|
break;
|
||||||
cnt--;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (cnt > maxloop) /* only for ISAC/HSCX without PCI IRQ test */
|
if (cnt > maxloop) /* only for ISAC/HSCX without PCI IRQ test */
|
||||||
|
|
Loading…
Reference in a new issue