Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a4c379c1979fbc417099cd22ba16735bc3625bbf
Commit:     a4c379c1979fbc417099cd22ba16735bc3625bbf
Parent:     8f9f963e5d9853dbc5fa5091f15ae64f423d3d89
Author:     Jarod Wilson <[EMAIL PROTECTED]>
AuthorDate: Sat Jan 19 13:15:05 2008 +0100
Committer:  Stefan Richter <[EMAIL PROTECTED]>
CommitDate: Wed Jan 30 22:22:28 2008 +0100

    firewire: fw-sbp2: increase login orb reply timeout, fix "failed to login"
    
    Increase (and rename) the login orb reply timeout value to 20s
    to match that of the old firewire stack. 2s simply didn't give
    many devices enough time to spin up and reply.
    
    Fixes inability to recognize some devices.
    Failure mode was "orb reply timed out"/"failed to login".
    
    Signed-off-by: Jarod Wilson <[EMAIL PROTECTED]>
    Signed-off-by: Stefan Richter <[EMAIL PROTECTED]> (style, comments, 
changelog)
---
 drivers/firewire/fw-sbp2.c |   16 +++++++++++++---
 1 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c
index 705a20c..794bade 100644
--- a/drivers/firewire/fw-sbp2.c
+++ b/drivers/firewire/fw-sbp2.c
@@ -151,9 +151,16 @@ struct sbp2_target {
        struct list_head lu_list;
 };
 
-#define SBP2_MAX_SG_ELEMENT_LENGTH     0xf000
+/*
+ * Per section 7.4.8 of the SBP-2 spec, a mgt_ORB_timeout value can be
+ * provided in the config rom.  A high timeout value really only matters
+ * on initial login, where we'll just use 20s rather than hassling with
+ * reading the config rom, since it really wouldn't buy us much.
+ */
+#define SBP2_LOGIN_ORB_TIMEOUT         20000   /* Timeout in ms */
 #define SBP2_ORB_TIMEOUT               2000    /* Timeout in ms */
 #define SBP2_ORB_NULL                  0x80000000
+#define SBP2_MAX_SG_ELEMENT_LENGTH     0xf000
 
 #define SBP2_DIRECTION_TO_MEDIA                0x0
 #define SBP2_DIRECTION_FROM_MEDIA      0x1
@@ -488,6 +495,7 @@ sbp2_send_management_orb(struct sbp2_logical_unit *lu, int 
node_id,
 {
        struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
        struct sbp2_management_orb *orb;
+       unsigned int timeout;
        int retval = -ENOMEM;
 
        orb = kzalloc(sizeof(*orb), GFP_ATOMIC);
@@ -519,6 +527,9 @@ sbp2_send_management_orb(struct sbp2_logical_unit *lu, int 
node_id,
                orb->request.misc |=
                        MANAGEMENT_ORB_RECONNECT(2) |
                        MANAGEMENT_ORB_EXCLUSIVE(sbp2_param_exclusive_login);
+               timeout = SBP2_LOGIN_ORB_TIMEOUT;
+       } else {
+               timeout = SBP2_ORB_TIMEOUT;
        }
 
        fw_memcpy_to_be32(&orb->request, &orb->request, sizeof(orb->request));
@@ -535,8 +546,7 @@ sbp2_send_management_orb(struct sbp2_logical_unit *lu, int 
node_id,
        sbp2_send_orb(&orb->base, lu, node_id, generation,
                      lu->tgt->management_agent_address);
 
-       wait_for_completion_timeout(&orb->done,
-                                   msecs_to_jiffies(SBP2_ORB_TIMEOUT));
+       wait_for_completion_timeout(&orb->done, msecs_to_jiffies(timeout));
 
        retval = -EIO;
        if (sbp2_cancel_orbs(lu) == 0) {
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to