* [PATCH 0/7] qla4xxx: Updates for scsi "misc" branch @ 2013-07-08 12:33 adheer.chandravanshi 2013-07-08 12:33 ` [PATCH 1/7] qla4xxx: Allow removal of failed session using logout adheer.chandravanshi ` (7 more replies) 0 siblings, 8 replies; 13+ messages in thread From: adheer.chandravanshi @ 2013-07-08 12:33 UTC (permalink / raw) To: jbottomley, michaelc Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Adheer Chandravanshi From: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> James, Please apply the following patches to the scsi tree at your earliest convenience. Adheer Chandravanshi (7): qla4xxx: Allow removal of failed session using logout. qla4xxx: Use discovery_parent_idx instead of discovery_parent_type qla4xxx: Set IPv6 traffic class if device type is IPv6. qla4xxx: discovery_parent_idx can be shown without any check. qla4xxx: Only BIOS boot target entries should be at index 0 and 1. qla4xxx: Export more firmware info in sysfs qla4xxx: Update driver version to 5.03.00-k11 Thanks, Adheer ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/7] qla4xxx: Allow removal of failed session using logout. 2013-07-08 12:33 [PATCH 0/7] qla4xxx: Updates for scsi "misc" branch adheer.chandravanshi @ 2013-07-08 12:33 ` adheer.chandravanshi 2013-08-23 19:32 ` James Bottomley 2013-07-08 12:33 ` [PATCH 2/7] qla4xxx: Use discovery_parent_idx instead of discovery_parent_type adheer.chandravanshi ` (6 subsequent siblings) 7 siblings, 1 reply; 13+ messages in thread From: adheer.chandravanshi @ 2013-07-08 12:33 UTC (permalink / raw) To: jbottomley, michaelc Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Adheer Chandravanshi From: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> If logout is performed on a failed session entry then that session should be gracefully removed. Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com> --- drivers/scsi/qla4xxx/ql4_def.h | 1 + drivers/scsi/qla4xxx/ql4_os.c | 48 +++++++++++++++++++++++++++++++++------ 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/drivers/scsi/qla4xxx/ql4_def.h b/drivers/scsi/qla4xxx/ql4_def.h index ddf16a8..50dc0c7 100644 --- a/drivers/scsi/qla4xxx/ql4_def.h +++ b/drivers/scsi/qla4xxx/ql4_def.h @@ -335,6 +335,7 @@ struct ql4_tuple_ddb { #define DF_BOOT_TGT 1 /* Boot target entry */ #define DF_ISNS_DISCOVERED 2 /* Device was discovered via iSNS */ #define DF_FO_MASKED 3 +#define DF_DISABLE_RELOGIN 4 /* Disable relogin to device */ enum qla4_work_type { QLA4_EVENT_AEN, diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index 84d9361..ee2f903 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c @@ -3583,7 +3583,9 @@ static void qla4xxx_relogin_devices(struct iscsi_cls_session *cls_session) } else { /* Trigger relogin */ if (ddb_entry->ddb_type == FLASH_DDB) { - if (!test_bit(DF_RELOGIN, &ddb_entry->flags)) + if (!(test_bit(DF_RELOGIN, &ddb_entry->flags) || + test_bit(DF_DISABLE_RELOGIN, + &ddb_entry->flags))) qla4xxx_arm_relogin_timer(ddb_entry); } else iscsi_session_failure(cls_session->dd_data, @@ -3686,6 +3688,9 @@ static void qla4xxx_dpc_relogin(struct iscsi_cls_session *cls_sess) if (!(ddb_entry->ddb_type == FLASH_DDB)) return; + if (test_bit(DF_DISABLE_RELOGIN, &ddb_entry->flags)) + return; + if (test_and_clear_bit(DF_RELOGIN, &ddb_entry->flags) && !iscsi_is_session_online(cls_sess)) { DEBUG2(ql4_printk(KERN_INFO, ha, @@ -6014,13 +6019,6 @@ static int qla4xxx_sysfs_ddb_logout_sid(struct iscsi_cls_session *cls_sess) goto exit_ddb_logout; } - options = LOGOUT_OPTION_CLOSE_SESSION; - if (qla4xxx_session_logout_ddb(ha, ddb_entry, options) == QLA_ERROR) { - ql4_printk(KERN_ERR, ha, "%s: Logout failed\n", __func__); - ret = -EIO; - goto exit_ddb_logout; - } - fw_ddb_entry = dma_alloc_coherent(&ha->pdev->dev, sizeof(*fw_ddb_entry), &fw_ddb_entry_dma, GFP_KERNEL); if (!fw_ddb_entry) { @@ -6030,6 +6028,38 @@ static int qla4xxx_sysfs_ddb_logout_sid(struct iscsi_cls_session *cls_sess) goto exit_ddb_logout; } + if (test_and_set_bit(DF_DISABLE_RELOGIN, &ddb_entry->flags)) + goto ddb_logout_init; + + ret = qla4xxx_get_fwddb_entry(ha, ddb_entry->fw_ddb_index, + fw_ddb_entry, fw_ddb_entry_dma, + NULL, NULL, &ddb_state, NULL, + NULL, NULL); + if (ret == QLA_ERROR) + goto ddb_logout_init; + + if (ddb_state == DDB_DS_SESSION_ACTIVE) + goto ddb_logout_init; + + /* wait until next relogin is triggered using DF_RELOGIN and + * clear DF_RELOGIN to avoid invocation of further relogin + */ + wtime = jiffies + (HZ * RELOGIN_TOV); + do { + if (test_and_clear_bit(DF_RELOGIN, &ddb_entry->flags)) + goto ddb_logout_init; + + schedule_timeout_uninterruptible(HZ); + } while ((time_after(wtime, jiffies))); + +ddb_logout_init: + atomic_set(&ddb_entry->retry_relogin_timer, INVALID_ENTRY); + atomic_set(&ddb_entry->relogin_timer, 0); + + options = LOGOUT_OPTION_CLOSE_SESSION; + qla4xxx_session_logout_ddb(ha, ddb_entry, options); + + memset(fw_ddb_entry, 0, sizeof(*fw_ddb_entry)); wtime = jiffies + (HZ * LOGOUT_TOV); do { ret = qla4xxx_get_fwddb_entry(ha, ddb_entry->fw_ddb_index, @@ -6059,10 +6089,12 @@ ddb_logout_clr_sess: spin_lock_irqsave(&ha->hardware_lock, flags); qla4xxx_free_ddb(ha, ddb_entry); + clear_bit(ddb_entry->fw_ddb_index, ha->ddb_idx_map); spin_unlock_irqrestore(&ha->hardware_lock, flags); iscsi_session_teardown(ddb_entry->sess); + clear_bit(DF_DISABLE_RELOGIN, &ddb_entry->flags); ret = QLA_SUCCESS; exit_ddb_logout: -- 1.7.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 1/7] qla4xxx: Allow removal of failed session using logout. 2013-07-08 12:33 ` [PATCH 1/7] qla4xxx: Allow removal of failed session using logout adheer.chandravanshi @ 2013-08-23 19:32 ` James Bottomley 2013-08-27 12:28 ` Adheer Chandravanshi 0 siblings, 1 reply; 13+ messages in thread From: James Bottomley @ 2013-08-23 19:32 UTC (permalink / raw) To: adheer.chandravanshi@qlogic.com Cc: michaelc@cs.wisc.edu, linux-scsi@vger.kernel.org, vikas.chaudhary@qlogic.com, lalit.chandivade@qlogic.com On Mon, 2013-07-08 at 08:33 -0400, adheer.chandravanshi@qlogic.com wrote: > + /* wait until next relogin is triggered using DF_RELOGIN and > + * clear DF_RELOGIN to avoid invocation of further relogin > + */ > + wtime = jiffies + (HZ * RELOGIN_TOV); > + do { > + if (test_and_clear_bit(DF_RELOGIN, &ddb_entry->flags)) > + goto ddb_logout_init; > + > + schedule_timeout_uninterruptible(HZ); > + } while ((time_after(wtime, jiffies))); This looks a bit like a hand rolled wait_event_timeout() couldn't you use the linux primitives? James ^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [PATCH 1/7] qla4xxx: Allow removal of failed session using logout. 2013-08-23 19:32 ` James Bottomley @ 2013-08-27 12:28 ` Adheer Chandravanshi 0 siblings, 0 replies; 13+ messages in thread From: Adheer Chandravanshi @ 2013-08-27 12:28 UTC (permalink / raw) To: James Bottomley Cc: michaelc@cs.wisc.edu, linux-scsi, Vikas Chaudhary, Lalit Chandivade [-- Attachment #1: Type: text/plain, Size: 1114 bytes --] James, Thanks for pointing this out. We will send the fix for this in the next patch-set. -- Adheer > -----Original Message----- > From: James Bottomley [mailto:jbottomley@parallels.com] > Sent: Saturday, August 24, 2013 1:03 AM > To: Adheer Chandravanshi > Cc: michaelc@cs.wisc.edu; linux-scsi; Vikas Chaudhary; Lalit Chandivade > Subject: Re: [PATCH 1/7] qla4xxx: Allow removal of failed session using > logout. > > On Mon, 2013-07-08 at 08:33 -0400, adheer.chandravanshi@qlogic.com > wrote: > > + /* wait until next relogin is triggered using DF_RELOGIN and > > + * clear DF_RELOGIN to avoid invocation of further relogin > > + */ > > + wtime = jiffies + (HZ * RELOGIN_TOV); > > + do { > > + if (test_and_clear_bit(DF_RELOGIN, &ddb_entry->flags)) > > + goto ddb_logout_init; > > + > > + schedule_timeout_uninterruptible(HZ); > > + } while ((time_after(wtime, jiffies))); > > This looks a bit like a hand rolled wait_event_timeout() couldn't you use the > linux primitives? > > James [-- Attachment #2: winmail.dat --] [-- Type: application/ms-tnef, Size: 4659 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 2/7] qla4xxx: Use discovery_parent_idx instead of discovery_parent_type 2013-07-08 12:33 [PATCH 0/7] qla4xxx: Updates for scsi "misc" branch adheer.chandravanshi 2013-07-08 12:33 ` [PATCH 1/7] qla4xxx: Allow removal of failed session using logout adheer.chandravanshi @ 2013-07-08 12:33 ` adheer.chandravanshi 2013-07-08 12:33 ` [PATCH 3/7] qla4xxx: Set IPv6 traffic class if device type is IPv6 adheer.chandravanshi ` (5 subsequent siblings) 7 siblings, 0 replies; 13+ messages in thread From: adheer.chandravanshi @ 2013-07-08 12:33 UTC (permalink / raw) To: jbottomley, michaelc Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Adheer Chandravanshi From: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> While setting the values for DDB, discovery_parent_idx needs to be used instead of discovery_parent_type. Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com> --- drivers/scsi/qla4xxx/ql4_os.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index ee2f903..9b25b8c 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c @@ -2262,7 +2262,7 @@ static int qla4xxx_copy_to_fwddb_param(struct iscsi_bus_flash_session *sess, fw_ddb_entry->lcl_port = cpu_to_le16(conn->local_port); fw_ddb_entry->stat_sn = cpu_to_le32(conn->statsn); fw_ddb_entry->exp_stat_sn = cpu_to_le32(conn->exp_statsn); - fw_ddb_entry->ddb_link = cpu_to_le16(sess->discovery_parent_type); + fw_ddb_entry->ddb_link = cpu_to_le16(sess->discovery_parent_idx); fw_ddb_entry->chap_tbl_idx = cpu_to_le16(sess->chap_out_idx); fw_ddb_entry->tsid = cpu_to_le16(sess->tsid); fw_ddb_entry->port = cpu_to_le16(conn->port); @@ -6654,8 +6654,8 @@ qla4xxx_sysfs_ddb_set_param(struct iscsi_bus_flash_session *fnode_sess, memcpy(fnode_conn->link_local_ipv6_addr, fnode_param->value, IPv6_ADDR_LEN); break; - case ISCSI_FLASHNODE_DISCOVERY_PARENT_TYPE: - fnode_sess->discovery_parent_type = + case ISCSI_FLASHNODE_DISCOVERY_PARENT_IDX: + fnode_sess->discovery_parent_idx = *(uint16_t *)fnode_param->value; break; case ISCSI_FLASHNODE_TCP_XMIT_WSF: -- 1.7.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 3/7] qla4xxx: Set IPv6 traffic class if device type is IPv6. 2013-07-08 12:33 [PATCH 0/7] qla4xxx: Updates for scsi "misc" branch adheer.chandravanshi 2013-07-08 12:33 ` [PATCH 1/7] qla4xxx: Allow removal of failed session using logout adheer.chandravanshi 2013-07-08 12:33 ` [PATCH 2/7] qla4xxx: Use discovery_parent_idx instead of discovery_parent_type adheer.chandravanshi @ 2013-07-08 12:33 ` adheer.chandravanshi 2013-07-08 12:33 ` [PATCH 4/7] qla4xxx: discovery_parent_idx can be shown without any check adheer.chandravanshi ` (4 subsequent siblings) 7 siblings, 0 replies; 13+ messages in thread From: adheer.chandravanshi @ 2013-07-08 12:33 UTC (permalink / raw) To: jbottomley, michaelc Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Adheer Chandravanshi From: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com> --- drivers/scsi/qla4xxx/ql4_os.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index 9b25b8c..85762f7 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c @@ -2256,7 +2256,6 @@ static int qla4xxx_copy_to_fwddb_param(struct iscsi_bus_flash_session *sess, fw_ddb_entry->mss = cpu_to_le16(conn->max_segment_size); fw_ddb_entry->tcp_xmt_wsf = (uint8_t) cpu_to_le32(conn->tcp_xmit_wsf); fw_ddb_entry->tcp_rcv_wsf = (uint8_t) cpu_to_le32(conn->tcp_recv_wsf); - fw_ddb_entry->ipv4_tos = conn->ipv4_tos; fw_ddb_entry->ipv6_flow_lbl = cpu_to_le16(conn->ipv6_flow_label); fw_ddb_entry->ka_timeout = cpu_to_le16(conn->keepalive_timeout); fw_ddb_entry->lcl_port = cpu_to_le16(conn->local_port); @@ -2269,6 +2268,11 @@ static int qla4xxx_copy_to_fwddb_param(struct iscsi_bus_flash_session *sess, fw_ddb_entry->def_timeout = cpu_to_le16(sess->default_taskmgmt_timeout); + if (!strncmp(sess->portal_type, PORTAL_TYPE_IPV6, 4)) + fw_ddb_entry->ipv4_tos = conn->ipv6_traffic_class; + else + fw_ddb_entry->ipv4_tos = conn->ipv4_tos; + if (conn->ipaddress) memcpy(fw_ddb_entry->ip_addr, conn->ipaddress, sizeof(fw_ddb_entry->ip_addr)); -- 1.7.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 4/7] qla4xxx: discovery_parent_idx can be shown without any check. 2013-07-08 12:33 [PATCH 0/7] qla4xxx: Updates for scsi "misc" branch adheer.chandravanshi ` (2 preceding siblings ...) 2013-07-08 12:33 ` [PATCH 3/7] qla4xxx: Set IPv6 traffic class if device type is IPv6 adheer.chandravanshi @ 2013-07-08 12:33 ` adheer.chandravanshi 2013-07-08 12:33 ` [PATCH 5/7] qla4xxx: Only BIOS boot target entries should be at index 0 and 1 adheer.chandravanshi ` (3 subsequent siblings) 7 siblings, 0 replies; 13+ messages in thread From: adheer.chandravanshi @ 2013-07-08 12:33 UTC (permalink / raw) To: jbottomley, michaelc Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Adheer Chandravanshi From: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com> --- drivers/scsi/qla4xxx/ql4_os.c | 7 ++----- 1 files changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index 85762f7..a6e4d51 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c @@ -6235,7 +6235,7 @@ qla4xxx_sysfs_ddb_get_param(struct iscsi_bus_flash_session *fnode_sess, struct iscsi_bus_flash_conn *fnode_conn; struct ql4_chap_table chap_tbl; struct device *dev; - int parent_type, parent_index = 0xffff; + int parent_type; int rc = 0; dev = iscsi_find_flashnode_conn(fnode_sess); @@ -6401,10 +6401,7 @@ qla4xxx_sysfs_ddb_get_param(struct iscsi_bus_flash_session *fnode_sess, rc = sprintf(buf, "\n"); break; case ISCSI_FLASHNODE_DISCOVERY_PARENT_IDX: - if (fnode_sess->discovery_parent_idx < MAX_DDB_ENTRIES) - parent_index = fnode_sess->discovery_parent_idx; - - rc = sprintf(buf, "%u\n", parent_index); + rc = sprintf(buf, "%u\n", fnode_sess->discovery_parent_idx); break; case ISCSI_FLASHNODE_DISCOVERY_PARENT_TYPE: if (fnode_sess->discovery_parent_type == DDB_ISNS) -- 1.7.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 5/7] qla4xxx: Only BIOS boot target entries should be at index 0 and 1. 2013-07-08 12:33 [PATCH 0/7] qla4xxx: Updates for scsi "misc" branch adheer.chandravanshi ` (3 preceding siblings ...) 2013-07-08 12:33 ` [PATCH 4/7] qla4xxx: discovery_parent_idx can be shown without any check adheer.chandravanshi @ 2013-07-08 12:33 ` adheer.chandravanshi 2013-07-08 12:33 ` [PATCH 6/7] qla4xxx: Export more firmware info in sysfs adheer.chandravanshi ` (2 subsequent siblings) 7 siblings, 0 replies; 13+ messages in thread From: adheer.chandravanshi @ 2013-07-08 12:33 UTC (permalink / raw) To: jbottomley, michaelc Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Adheer Chandravanshi From: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> Flash target index 0 and 1 are reserved for boot target entries created with BIOS utility. Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com> --- drivers/scsi/qla4xxx/ql4_os.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index a6e4d51..52d01ae 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c @@ -5707,7 +5707,8 @@ static int qla4xxx_sysfs_ddb_add(struct Scsi_Host *shost, const char *buf, goto exit_ddb_add; } - for (idx = 0; idx < max_ddbs; idx++) { + /* Index 0 and 1 are reserved for boot target entries */ + for (idx = 2; idx < max_ddbs; idx++) { if (qla4xxx_flashdb_by_index(ha, fw_ddb_entry, fw_ddb_entry_dma, idx)) break; -- 1.7.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 6/7] qla4xxx: Export more firmware info in sysfs 2013-07-08 12:33 [PATCH 0/7] qla4xxx: Updates for scsi "misc" branch adheer.chandravanshi ` (4 preceding siblings ...) 2013-07-08 12:33 ` [PATCH 5/7] qla4xxx: Only BIOS boot target entries should be at index 0 and 1 adheer.chandravanshi @ 2013-07-08 12:33 ` adheer.chandravanshi 2013-07-17 17:44 ` Mike Christie 2013-07-08 12:33 ` [PATCH 7/7] qla4xxx: Update driver version to 5.03.00-k11 adheer.chandravanshi 2013-07-19 15:56 ` [PATCH 0/7] qla4xxx: Updates for scsi "misc" branch Mike Christie 7 siblings, 1 reply; 13+ messages in thread From: adheer.chandravanshi @ 2013-07-08 12:33 UTC (permalink / raw) To: jbottomley, michaelc Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Adheer Chandravanshi From: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com> --- drivers/scsi/qla4xxx/ql4_attr.c | 86 ++++++++++++++++++++++++++++++++++----- drivers/scsi/qla4xxx/ql4_def.h | 9 +--- drivers/scsi/qla4xxx/ql4_fw.h | 2 +- drivers/scsi/qla4xxx/ql4_mbx.c | 33 ++++++++++----- drivers/scsi/qla4xxx/ql4_os.c | 4 +- 5 files changed, 105 insertions(+), 29 deletions(-) diff --git a/drivers/scsi/qla4xxx/ql4_attr.c b/drivers/scsi/qla4xxx/ql4_attr.c index 19ee55a..687c07f 100644 --- a/drivers/scsi/qla4xxx/ql4_attr.c +++ b/drivers/scsi/qla4xxx/ql4_attr.c @@ -158,14 +158,12 @@ qla4xxx_fw_version_show(struct device *dev, if (is_qla80XX(ha)) return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d (%x)\n", - ha->firmware_version[0], - ha->firmware_version[1], - ha->patch_number, ha->build_number); + ha->fw_info.fw_major, ha->fw_info.fw_minor, + ha->fw_info.fw_patch, ha->fw_info.fw_build); else return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d.%02d\n", - ha->firmware_version[0], - ha->firmware_version[1], - ha->patch_number, ha->build_number); + ha->fw_info.fw_major, ha->fw_info.fw_minor, + ha->fw_info.fw_patch, ha->fw_info.fw_build); } static ssize_t @@ -181,8 +179,8 @@ qla4xxx_iscsi_version_show(struct device *dev, struct device_attribute *attr, char *buf) { struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); - return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->iscsi_major, - ha->iscsi_minor); + return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->fw_info.iscsi_major, + ha->fw_info.iscsi_minor); } static ssize_t @@ -191,8 +189,8 @@ qla4xxx_optrom_version_show(struct device *dev, struct device_attribute *attr, { struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d.%02d\n", - ha->bootload_major, ha->bootload_minor, - ha->bootload_patch, ha->bootload_build); + ha->fw_info.bootload_major, ha->fw_info.bootload_minor, + ha->fw_info.bootload_patch, ha->fw_info.bootload_build); } static ssize_t @@ -259,6 +257,63 @@ qla4xxx_hba_model_show(struct device *dev, struct device_attribute *attr, return snprintf(buf, PAGE_SIZE, "%s\n", ha->model_name); } +static ssize_t +qla4xxx_fw_timestamp_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); + return snprintf(buf, PAGE_SIZE, "%s %s\n", ha->fw_info.fw_build_date, + ha->fw_info.fw_build_time); +} + +static ssize_t +qla4xxx_fw_build_user_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); + return snprintf(buf, PAGE_SIZE, "%s\n", ha->fw_info.fw_build_user); +} + +static ssize_t +qla4xxx_fw_ext_timestamp_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); + return snprintf(buf, PAGE_SIZE, "%s\n", ha->fw_info.extended_timestamp); +} + +static ssize_t +qla4xxx_fw_load_src_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); + char *load_src = NULL; + + switch (ha->fw_info.fw_load_source) { + case 1: + load_src = "Flash Primary"; + break; + case 2: + load_src = "Flash Secondary"; + break; + case 3: + load_src = "Host Download"; + break; + } + + return snprintf(buf, PAGE_SIZE, "%s\n", load_src); +} + +static ssize_t +qla4xxx_fw_uptime_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); + qla4xxx_about_firmware(ha); + return snprintf(buf, PAGE_SIZE, "%u.%u secs\n", ha->fw_uptime_secs, + ha->fw_uptime_msecs); +} + static DEVICE_ATTR(fw_version, S_IRUGO, qla4xxx_fw_version_show, NULL); static DEVICE_ATTR(serial_num, S_IRUGO, qla4xxx_serial_num_show, NULL); static DEVICE_ATTR(iscsi_version, S_IRUGO, qla4xxx_iscsi_version_show, NULL); @@ -269,6 +324,12 @@ static DEVICE_ATTR(phy_port_cnt, S_IRUGO, qla4xxx_phy_port_cnt_show, NULL); static DEVICE_ATTR(phy_port_num, S_IRUGO, qla4xxx_phy_port_num_show, NULL); static DEVICE_ATTR(iscsi_func_cnt, S_IRUGO, qla4xxx_iscsi_func_cnt_show, NULL); static DEVICE_ATTR(hba_model, S_IRUGO, qla4xxx_hba_model_show, NULL); +static DEVICE_ATTR(fw_timestamp, S_IRUGO, qla4xxx_fw_timestamp_show, NULL); +static DEVICE_ATTR(fw_build_user, S_IRUGO, qla4xxx_fw_build_user_show, NULL); +static DEVICE_ATTR(fw_ext_timestamp, S_IRUGO, qla4xxx_fw_ext_timestamp_show, + NULL); +static DEVICE_ATTR(fw_load_src, S_IRUGO, qla4xxx_fw_load_src_show, NULL); +static DEVICE_ATTR(fw_uptime, S_IRUGO, qla4xxx_fw_uptime_show, NULL); struct device_attribute *qla4xxx_host_attrs[] = { &dev_attr_fw_version, @@ -281,5 +342,10 @@ struct device_attribute *qla4xxx_host_attrs[] = { &dev_attr_phy_port_num, &dev_attr_iscsi_func_cnt, &dev_attr_hba_model, + &dev_attr_fw_timestamp, + &dev_attr_fw_build_user, + &dev_attr_fw_ext_timestamp, + &dev_attr_fw_load_src, + &dev_attr_fw_uptime, NULL, }; diff --git a/drivers/scsi/qla4xxx/ql4_def.h b/drivers/scsi/qla4xxx/ql4_def.h index 50dc0c7..b0a0e93 100644 --- a/drivers/scsi/qla4xxx/ql4_def.h +++ b/drivers/scsi/qla4xxx/ql4_def.h @@ -735,12 +735,9 @@ struct scsi_qla_host { struct iscsi_iface *iface_ipv6_1; /* --- From About Firmware --- */ - uint16_t iscsi_major; - uint16_t iscsi_minor; - uint16_t bootload_major; - uint16_t bootload_minor; - uint16_t bootload_patch; - uint16_t bootload_build; + struct about_fw_info fw_info; + uint32_t fw_uptime_secs; /* seconds elapsed since fw bootup */ + uint32_t fw_uptime_msecs; /* milliseconds beyond elapsed seconds */ uint16_t def_timeout; /* Default login timeout */ uint32_t flash_state; diff --git a/drivers/scsi/qla4xxx/ql4_fw.h b/drivers/scsi/qla4xxx/ql4_fw.h index c7b8892..9a46f59 100644 --- a/drivers/scsi/qla4xxx/ql4_fw.h +++ b/drivers/scsi/qla4xxx/ql4_fw.h @@ -955,7 +955,7 @@ struct about_fw_info { uint16_t bootload_minor; /* 46 - 47 */ uint16_t bootload_patch; /* 48 - 49 */ uint16_t bootload_build; /* 4A - 4B */ - uint8_t reserved2[180]; /* 4C - FF */ + uint8_t extended_timestamp[180];/* 4C - FF */ }; struct crash_record { diff --git a/drivers/scsi/qla4xxx/ql4_mbx.c b/drivers/scsi/qla4xxx/ql4_mbx.c index a501bea..3c18b7f 100644 --- a/drivers/scsi/qla4xxx/ql4_mbx.c +++ b/drivers/scsi/qla4xxx/ql4_mbx.c @@ -5,6 +5,7 @@ * See LICENSE.qla4xxx for copyright and licensing details. */ +#include <linux/ctype.h> #include "ql4_def.h" #include "ql4_glbl.h" #include "ql4_dbg.h" @@ -1270,16 +1271,28 @@ int qla4xxx_about_firmware(struct scsi_qla_host *ha) } /* Save version information. */ - ha->firmware_version[0] = le16_to_cpu(about_fw->fw_major); - ha->firmware_version[1] = le16_to_cpu(about_fw->fw_minor); - ha->patch_number = le16_to_cpu(about_fw->fw_patch); - ha->build_number = le16_to_cpu(about_fw->fw_build); - ha->iscsi_major = le16_to_cpu(about_fw->iscsi_major); - ha->iscsi_minor = le16_to_cpu(about_fw->iscsi_minor); - ha->bootload_major = le16_to_cpu(about_fw->bootload_major); - ha->bootload_minor = le16_to_cpu(about_fw->bootload_minor); - ha->bootload_patch = le16_to_cpu(about_fw->bootload_patch); - ha->bootload_build = le16_to_cpu(about_fw->bootload_build); + ha->fw_info.fw_major = le16_to_cpu(about_fw->fw_major); + ha->fw_info.fw_minor = le16_to_cpu(about_fw->fw_minor); + ha->fw_info.fw_patch = le16_to_cpu(about_fw->fw_patch); + ha->fw_info.fw_build = le16_to_cpu(about_fw->fw_build); + memcpy(ha->fw_info.fw_build_date, about_fw->fw_build_date, + sizeof(about_fw->fw_build_date)); + memcpy(ha->fw_info.fw_build_time, about_fw->fw_build_time, + sizeof(about_fw->fw_build_time)); + strcpy((char *)ha->fw_info.fw_build_user, + skip_spaces((char *)about_fw->fw_build_user)); + ha->fw_info.fw_load_source = le16_to_cpu(about_fw->fw_load_source); + ha->fw_info.iscsi_major = le16_to_cpu(about_fw->iscsi_major); + ha->fw_info.iscsi_minor = le16_to_cpu(about_fw->iscsi_minor); + ha->fw_info.bootload_major = le16_to_cpu(about_fw->bootload_major); + ha->fw_info.bootload_minor = le16_to_cpu(about_fw->bootload_minor); + ha->fw_info.bootload_patch = le16_to_cpu(about_fw->bootload_patch); + ha->fw_info.bootload_build = le16_to_cpu(about_fw->bootload_build); + strcpy((char *)ha->fw_info.extended_timestamp, + skip_spaces((char *)about_fw->extended_timestamp)); + + ha->fw_uptime_secs = le32_to_cpu(mbox_sts[5]); + ha->fw_uptime_msecs = le32_to_cpu(mbox_sts[6]); status = QLA_SUCCESS; exit_about_fw: diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index 52d01ae..14472b1 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c @@ -7220,8 +7220,8 @@ skip_retry_init: " QLogic iSCSI HBA Driver version: %s\n" " QLogic ISP%04x @ %s, host#=%ld, fw=%02d.%02d.%02d.%02d\n", qla4xxx_version_str, ha->pdev->device, pci_name(ha->pdev), - ha->host_no, ha->firmware_version[0], ha->firmware_version[1], - ha->patch_number, ha->build_number); + ha->host_no, ha->fw_info.fw_major, ha->fw_info.fw_minor, + ha->fw_info.fw_patch, ha->fw_info.fw_build); /* Set the driver version */ if (is_qla80XX(ha)) -- 1.7.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 6/7] qla4xxx: Export more firmware info in sysfs 2013-07-08 12:33 ` [PATCH 6/7] qla4xxx: Export more firmware info in sysfs adheer.chandravanshi @ 2013-07-17 17:44 ` Mike Christie 2013-07-19 15:53 ` Mike Christie 0 siblings, 1 reply; 13+ messages in thread From: Mike Christie @ 2013-07-17 17:44 UTC (permalink / raw) To: adheer.chandravanshi Cc: jbottomley, linux-scsi, vikas.chaudhary, lalit.chandivade On 07/08/2013 06:33 AM, adheer.chandravanshi@qlogic.com wrote: > static ssize_t > @@ -181,8 +179,8 @@ qla4xxx_iscsi_version_show(struct device *dev, struct device_attribute *attr, > char *buf) > { > struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); > - return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->iscsi_major, > - ha->iscsi_minor); > + return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->fw_info.iscsi_major, > + ha->fw_info.iscsi_minor); > } Is this the same as the iscsi max and min from the iscsi spec? If so, it should be a iscsi host setting. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 6/7] qla4xxx: Export more firmware info in sysfs 2013-07-17 17:44 ` Mike Christie @ 2013-07-19 15:53 ` Mike Christie 0 siblings, 0 replies; 13+ messages in thread From: Mike Christie @ 2013-07-19 15:53 UTC (permalink / raw) To: adheer.chandravanshi Cc: jbottomley, linux-scsi, vikas.chaudhary, lalit.chandivade On 07/17/2013 11:44 AM, Mike Christie wrote: > On 07/08/2013 06:33 AM, adheer.chandravanshi@qlogic.com wrote: >> static ssize_t >> @@ -181,8 +179,8 @@ qla4xxx_iscsi_version_show(struct device *dev, struct device_attribute *attr, >> char *buf) >> { >> struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); >> - return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->iscsi_major, >> - ha->iscsi_minor); >> + return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->fw_info.iscsi_major, >> + ha->fw_info.iscsi_minor); >> } > > Is this the same as the iscsi max and min from the iscsi spec? If so, it > should be a iscsi host setting. > Ignore this comment. ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 7/7] qla4xxx: Update driver version to 5.03.00-k11 2013-07-08 12:33 [PATCH 0/7] qla4xxx: Updates for scsi "misc" branch adheer.chandravanshi ` (5 preceding siblings ...) 2013-07-08 12:33 ` [PATCH 6/7] qla4xxx: Export more firmware info in sysfs adheer.chandravanshi @ 2013-07-08 12:33 ` adheer.chandravanshi 2013-07-19 15:56 ` [PATCH 0/7] qla4xxx: Updates for scsi "misc" branch Mike Christie 7 siblings, 0 replies; 13+ messages in thread From: adheer.chandravanshi @ 2013-07-08 12:33 UTC (permalink / raw) To: jbottomley, michaelc Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Adheer Chandravanshi From: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com> --- drivers/scsi/qla4xxx/ql4_version.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla4xxx/ql4_version.h b/drivers/scsi/qla4xxx/ql4_version.h index c5edd0d..c085c9a 100644 --- a/drivers/scsi/qla4xxx/ql4_version.h +++ b/drivers/scsi/qla4xxx/ql4_version.h @@ -5,4 +5,4 @@ * See LICENSE.qla4xxx for copyright and licensing details. */ -#define QLA4XXX_DRIVER_VERSION "5.03.00-k10" +#define QLA4XXX_DRIVER_VERSION "5.03.00-k11" -- 1.7.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 0/7] qla4xxx: Updates for scsi "misc" branch 2013-07-08 12:33 [PATCH 0/7] qla4xxx: Updates for scsi "misc" branch adheer.chandravanshi ` (6 preceding siblings ...) 2013-07-08 12:33 ` [PATCH 7/7] qla4xxx: Update driver version to 5.03.00-k11 adheer.chandravanshi @ 2013-07-19 15:56 ` Mike Christie 7 siblings, 0 replies; 13+ messages in thread From: Mike Christie @ 2013-07-19 15:56 UTC (permalink / raw) To: adheer.chandravanshi Cc: jbottomley, linux-scsi, vikas.chaudhary, lalit.chandivade On 07/08/2013 06:33 AM, adheer.chandravanshi@qlogic.com wrote: > From: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> > > James, > > Please apply the following patches to the scsi tree at your earliest > convenience. > > Adheer Chandravanshi (7): > qla4xxx: Allow removal of failed session using logout. > qla4xxx: Use discovery_parent_idx instead of discovery_parent_type > qla4xxx: Set IPv6 traffic class if device type is IPv6. > qla4xxx: discovery_parent_idx can be shown without any check. > qla4xxx: Only BIOS boot target entries should be at index 0 and 1. > qla4xxx: Export more firmware info in sysfs > qla4xxx: Update driver version to 5.03.00-k11 > Ignore my comment on that one patch. Patches look ok. Reviewed-by: Mike Christie <michaelc@cs.wisc.edu> ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2013-08-27 12:28 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-07-08 12:33 [PATCH 0/7] qla4xxx: Updates for scsi "misc" branch adheer.chandravanshi 2013-07-08 12:33 ` [PATCH 1/7] qla4xxx: Allow removal of failed session using logout adheer.chandravanshi 2013-08-23 19:32 ` James Bottomley 2013-08-27 12:28 ` Adheer Chandravanshi 2013-07-08 12:33 ` [PATCH 2/7] qla4xxx: Use discovery_parent_idx instead of discovery_parent_type adheer.chandravanshi 2013-07-08 12:33 ` [PATCH 3/7] qla4xxx: Set IPv6 traffic class if device type is IPv6 adheer.chandravanshi 2013-07-08 12:33 ` [PATCH 4/7] qla4xxx: discovery_parent_idx can be shown without any check adheer.chandravanshi 2013-07-08 12:33 ` [PATCH 5/7] qla4xxx: Only BIOS boot target entries should be at index 0 and 1 adheer.chandravanshi 2013-07-08 12:33 ` [PATCH 6/7] qla4xxx: Export more firmware info in sysfs adheer.chandravanshi 2013-07-17 17:44 ` Mike Christie 2013-07-19 15:53 ` Mike Christie 2013-07-08 12:33 ` [PATCH 7/7] qla4xxx: Update driver version to 5.03.00-k11 adheer.chandravanshi 2013-07-19 15:56 ` [PATCH 0/7] qla4xxx: Updates for scsi "misc" branch Mike Christie
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).