diff options
Diffstat (limited to 'drivers/firewire/fw-sbp2.c')
-rw-r--r-- | drivers/firewire/fw-sbp2.c | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c index 994914f89b55..07e410b0ae53 100644 --- a/drivers/firewire/fw-sbp2.c +++ b/drivers/firewire/fw-sbp2.c | |||
@@ -452,8 +452,6 @@ sbp2_send_management_orb(struct fw_unit *unit, int node_id, int generation, | |||
452 | 452 | ||
453 | wait_for_completion(&orb->done); | 453 | wait_for_completion(&orb->done); |
454 | 454 | ||
455 | /* FIXME: Handle bus reset race here. */ | ||
456 | |||
457 | retval = -EIO; | 455 | retval = -EIO; |
458 | if (orb->base.rcode != RCODE_COMPLETE) { | 456 | if (orb->base.rcode != RCODE_COMPLETE) { |
459 | fw_error("management write failed, rcode 0x%02x\n", | 457 | fw_error("management write failed, rcode 0x%02x\n", |
@@ -496,7 +494,6 @@ complete_agent_reset_write(struct fw_card *card, int rcode, | |||
496 | { | 494 | { |
497 | struct fw_transaction *t = data; | 495 | struct fw_transaction *t = data; |
498 | 496 | ||
499 | fw_notify("agent reset write rcode=%d\n", rcode); | ||
500 | kfree(t); | 497 | kfree(t); |
501 | } | 498 | } |
502 | 499 | ||
@@ -542,9 +539,6 @@ static void sbp2_login(struct work_struct *work) | |||
542 | if (sbp2_send_management_orb(unit, node_id, generation, | 539 | if (sbp2_send_management_orb(unit, node_id, generation, |
543 | SBP2_LOGIN_REQUEST, lun, &response) < 0) { | 540 | SBP2_LOGIN_REQUEST, lun, &response) < 0) { |
544 | if (sd->retries++ < 5) { | 541 | if (sd->retries++ < 5) { |
545 | fw_error("login attempt %d for %s failed, " | ||
546 | "rescheduling\n", | ||
547 | sd->retries, unit->device.bus_id); | ||
548 | schedule_delayed_work(&sd->work, DIV_ROUND_UP(HZ, 5)); | 542 | schedule_delayed_work(&sd->work, DIV_ROUND_UP(HZ, 5)); |
549 | } else { | 543 | } else { |
550 | fw_error("failed to login to %s\n", | 544 | fw_error("failed to login to %s\n", |
@@ -560,16 +554,17 @@ static void sbp2_login(struct work_struct *work) | |||
560 | 554 | ||
561 | /* Get command block agent offset and login id. */ | 555 | /* Get command block agent offset and login id. */ |
562 | sd->command_block_agent_address = | 556 | sd->command_block_agent_address = |
563 | ((u64) response.command_block_agent.high << 32) | | 557 | ((u64) (response.command_block_agent.high & 0xffff) << 32) | |
564 | response.command_block_agent.low; | 558 | response.command_block_agent.low; |
565 | sd->login_id = login_response_get_login_id(response); | 559 | sd->login_id = login_response_get_login_id(response); |
566 | 560 | ||
567 | fw_notify("logged in to sbp2 unit %s\n", unit->device.bus_id); | 561 | fw_notify("logged in to sbp2 unit %s (%d retries)\n", |
568 | fw_notify(" - management_agent_address: 0x%012llx\n", | 562 | unit->device.bus_id, sd->retries); |
563 | fw_notify(" - management_agent_address: 0x%012llx\n", | ||
569 | (unsigned long long) sd->management_agent_address); | 564 | (unsigned long long) sd->management_agent_address); |
570 | fw_notify(" - command_block_agent_address: 0x%012llx\n", | 565 | fw_notify(" - command_block_agent_address: 0x%012llx\n", |
571 | (unsigned long long) sd->command_block_agent_address); | 566 | (unsigned long long) sd->command_block_agent_address); |
572 | fw_notify(" - status write address: 0x%012llx\n", | 567 | fw_notify(" - status write address: 0x%012llx\n", |
573 | (unsigned long long) sd->address_handler.offset); | 568 | (unsigned long long) sd->address_handler.offset); |
574 | 569 | ||
575 | #if 0 | 570 | #if 0 |
@@ -705,11 +700,7 @@ static void sbp2_reconnect(struct work_struct *work) | |||
705 | if (sbp2_send_management_orb(unit, node_id, generation, | 700 | if (sbp2_send_management_orb(unit, node_id, generation, |
706 | SBP2_RECONNECT_REQUEST, | 701 | SBP2_RECONNECT_REQUEST, |
707 | sd->login_id, NULL) < 0) { | 702 | sd->login_id, NULL) < 0) { |
708 | if (sd->retries++ < 5) { | 703 | if (sd->retries++ >= 5) { |
709 | fw_error("reconnect attempt %d for %s failed, " | ||
710 | "rescheduling\n", | ||
711 | sd->retries, unit->device.bus_id); | ||
712 | } else { | ||
713 | fw_error("failed to reconnect to %s\n", | 704 | fw_error("failed to reconnect to %s\n", |
714 | unit->device.bus_id); | 705 | unit->device.bus_id); |
715 | /* Fall back and try to log in again. */ | 706 | /* Fall back and try to log in again. */ |
@@ -724,7 +715,8 @@ static void sbp2_reconnect(struct work_struct *work) | |||
724 | sd->node_id = node_id; | 715 | sd->node_id = node_id; |
725 | sd->address_high = local_node_id << 16; | 716 | sd->address_high = local_node_id << 16; |
726 | 717 | ||
727 | fw_notify("reconnected to unit %s\n", unit->device.bus_id); | 718 | fw_notify("reconnected to unit %s (%d retries)\n", |
719 | unit->device.bus_id, sd->retries); | ||
728 | sbp2_agent_reset(unit); | 720 | sbp2_agent_reset(unit); |
729 | sbp2_cancel_orbs(unit); | 721 | sbp2_cancel_orbs(unit); |
730 | } | 722 | } |
@@ -837,8 +829,6 @@ complete_command_orb(struct sbp2_orb *base_orb, struct sbp2_status *status) | |||
837 | /* If the orb completes with status == NULL, something | 829 | /* If the orb completes with status == NULL, something |
838 | * went wrong, typically a bus reset happened mid-orb | 830 | * went wrong, typically a bus reset happened mid-orb |
839 | * or when sending the write (less likely). */ | 831 | * or when sending the write (less likely). */ |
840 | fw_notify("no command orb status, rcode=%d\n", | ||
841 | orb->base.rcode); | ||
842 | result = DID_BUS_BUSY; | 832 | result = DID_BUS_BUSY; |
843 | } | 833 | } |
844 | 834 | ||