Commit 96796ea8b6b1221c7cacf68ce056d77eff0a793d
Committed by
David S. Miller
1 parent
54e90fb5ca
Exists in
master
and in
4 other branches
caif: Fix freezes when running CAIF loopback device
Fix spinlock bugs when running out of link-ids in loopback tests and avoid allocating link-id when error is set in link-setup-response. Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 1 changed file with 5 additions and 4 deletions Side-by-side Diff
net/caif/cfctrl.c
... | ... | @@ -368,7 +368,8 @@ |
368 | 368 | cfpkt_extr_head(pkt, &cmdrsp, 1); |
369 | 369 | cmd = cmdrsp & CFCTRL_CMD_MASK; |
370 | 370 | if (cmd != CFCTRL_CMD_LINK_ERR |
371 | - && CFCTRL_RSP_BIT != (CFCTRL_RSP_BIT & cmdrsp)) { | |
371 | + && CFCTRL_RSP_BIT != (CFCTRL_RSP_BIT & cmdrsp) | |
372 | + && CFCTRL_ERR_BIT != (CFCTRL_ERR_BIT & cmdrsp)) { | |
372 | 373 | if (handle_loop(cfctrl, cmd, pkt) != 0) |
373 | 374 | cmdrsp |= CFCTRL_ERR_BIT; |
374 | 375 | } |
375 | 376 | |
376 | 377 | |
... | ... | @@ -604,16 +605,16 @@ |
604 | 605 | case CFCTRL_CMD_LINK_SETUP: |
605 | 606 | spin_lock_bh(&ctrl->loop_linkid_lock); |
606 | 607 | if (!dec) { |
607 | - for (linkid = last_linkid + 1; linkid < 255; linkid++) | |
608 | + for (linkid = last_linkid + 1; linkid < 254; linkid++) | |
608 | 609 | if (!ctrl->loop_linkused[linkid]) |
609 | 610 | goto found; |
610 | 611 | } |
611 | 612 | dec = 1; |
612 | - for (linkid = last_linkid - 1; linkid > 0; linkid--) | |
613 | + for (linkid = last_linkid - 1; linkid > 1; linkid--) | |
613 | 614 | if (!ctrl->loop_linkused[linkid]) |
614 | 615 | goto found; |
615 | 616 | spin_unlock_bh(&ctrl->loop_linkid_lock); |
616 | - | |
617 | + return -1; | |
617 | 618 | found: |
618 | 619 | if (linkid < 10) |
619 | 620 | dec = 0; |