Commit 96796ea8b6b1221c7cacf68ce056d77eff0a793d

Authored by sjur.brandeland@stericsson.com
Committed by David S. Miller
1 parent 54e90fb5ca

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

... ... @@ -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;