* [PATCH 14/17] lpfc: Add logging for misconfigured optics.
@ 2015-12-16 23:12 James Smart
2015-12-17 8:38 ` Hannes Reinecke
0 siblings, 1 reply; 4+ messages in thread
From: James Smart @ 2015-12-16 23:12 UTC (permalink / raw)
To: linux-scsi
Add logging for misconfigured optics acqe reported by fw.
Signed-off-by: Dick Kennedy <dick.kennedy@avagotech.com>
Signed-off-by: James Smart <james.smart@avagotech.com>
---
drivers/scsi/lpfc/lpfc_hw4.h | 51 ++++++++++++++++++++++++--------
drivers/scsi/lpfc/lpfc_init.c | 67 ++++++++++++++++++++++++++++++-------------
drivers/scsi/lpfc/lpfc_sli4.h | 1 +
3 files changed, 87 insertions(+), 32 deletions(-)
diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h
index f13a76a..608f941 100644
--- a/drivers/scsi/lpfc/lpfc_hw4.h
+++ b/drivers/scsi/lpfc/lpfc_hw4.h
@@ -3448,23 +3448,50 @@ struct lpfc_acqe_fc_la {
struct lpfc_acqe_misconfigured_event {
struct {
uint32_t word0;
-#define lpfc_sli_misconfigured_port0_SHIFT 0
-#define lpfc_sli_misconfigured_port0_MASK 0x000000FF
-#define lpfc_sli_misconfigured_port0_WORD word0
-#define lpfc_sli_misconfigured_port1_SHIFT 8
-#define lpfc_sli_misconfigured_port1_MASK 0x000000FF
-#define lpfc_sli_misconfigured_port1_WORD word0
-#define lpfc_sli_misconfigured_port2_SHIFT 16
-#define lpfc_sli_misconfigured_port2_MASK 0x000000FF
-#define lpfc_sli_misconfigured_port2_WORD word0
-#define lpfc_sli_misconfigured_port3_SHIFT 24
-#define lpfc_sli_misconfigured_port3_MASK 0x000000FF
-#define lpfc_sli_misconfigured_port3_WORD word0
+#define lpfc_sli_misconfigured_port0_state_SHIFT 0
+#define lpfc_sli_misconfigured_port0_state_MASK 0x000000FF
+#define lpfc_sli_misconfigured_port0_state_WORD word0
+#define lpfc_sli_misconfigured_port1_state_SHIFT 8
+#define lpfc_sli_misconfigured_port1_state_MASK 0x000000FF
+#define lpfc_sli_misconfigured_port1_state_WORD word0
+#define lpfc_sli_misconfigured_port2_state_SHIFT 16
+#define lpfc_sli_misconfigured_port2_state_MASK 0x000000FF
+#define lpfc_sli_misconfigured_port2_state_WORD word0
+#define lpfc_sli_misconfigured_port3_state_SHIFT 24
+#define lpfc_sli_misconfigured_port3_state_MASK 0x000000FF
+#define lpfc_sli_misconfigured_port3_state_WORD word0
+ uint32_t word1;
+#define lpfc_sli_misconfigured_port0_op_SHIFT 0
+#define lpfc_sli_misconfigured_port0_op_MASK 0x00000001
+#define lpfc_sli_misconfigured_port0_op_WORD word1
+#define lpfc_sli_misconfigured_port0_severity_SHIFT 1
+#define lpfc_sli_misconfigured_port0_severity_MASK 0x00000003
+#define lpfc_sli_misconfigured_port0_severity_WORD word1
+#define lpfc_sli_misconfigured_port1_op_SHIFT 8
+#define lpfc_sli_misconfigured_port1_op_MASK 0x00000001
+#define lpfc_sli_misconfigured_port1_op_WORD word1
+#define lpfc_sli_misconfigured_port1_severity_SHIFT 9
+#define lpfc_sli_misconfigured_port1_severity_MASK 0x00000003
+#define lpfc_sli_misconfigured_port1_severity_WORD word1
+#define lpfc_sli_misconfigured_port2_op_SHIFT 16
+#define lpfc_sli_misconfigured_port2_op_MASK 0x00000001
+#define lpfc_sli_misconfigured_port2_op_WORD word1
+#define lpfc_sli_misconfigured_port2_severity_SHIFT 17
+#define lpfc_sli_misconfigured_port2_severity_MASK 0x00000003
+#define lpfc_sli_misconfigured_port2_severity_WORD word1
+#define lpfc_sli_misconfigured_port3_op_SHIFT 24
+#define lpfc_sli_misconfigured_port3_op_MASK 0x00000001
+#define lpfc_sli_misconfigured_port3_op_WORD word1
+#define lpfc_sli_misconfigured_port3_severity_SHIFT 25
+#define lpfc_sli_misconfigured_port3_severity_MASK 0x00000003
+#define lpfc_sli_misconfigured_port3_severity_WORD word1
} theEvent;
#define LPFC_SLI_EVENT_STATUS_VALID 0x00
#define LPFC_SLI_EVENT_STATUS_NOT_PRESENT 0x01
#define LPFC_SLI_EVENT_STATUS_WRONG_TYPE 0x02
#define LPFC_SLI_EVENT_STATUS_UNSUPPORTED 0x03
+#define LPFC_SLI_EVENT_STATUS_UNQUALIFIED 0x04
+#define LPFC_SLI_EVENT_STATUS_UNCERTIFIED 0x05
};
struct lpfc_acqe_sli {
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index fdf750e..b94d114 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -4079,22 +4079,18 @@ lpfc_sli4_async_sli_evt(struct lpfc_hba *phba, struct lpfc_acqe_sli *acqe_sli)
char message[128];
uint8_t status;
uint8_t evt_type;
+ uint8_t operational = 0;
struct temp_event temp_event_data;
struct lpfc_acqe_misconfigured_event *misconfigured;
struct Scsi_Host *shost;
evt_type = bf_get(lpfc_trailer_type, acqe_sli);
- /* Special case Lancer */
- if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) !=
- LPFC_SLI_INTF_IF_TYPE_2) {
- lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
- "2901 Async SLI event - Event Data1:x%08x Event Data2:"
- "x%08x SLI Event Type:%d\n",
- acqe_sli->event_data1, acqe_sli->event_data2,
- evt_type);
- return;
- }
+ lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
+ "2901 Async SLI event - Event Data1:x%08x Event Data2:"
+ "x%08x SLI Event Type:%d\n",
+ acqe_sli->event_data1, acqe_sli->event_data2,
+ evt_type);
port_name = phba->Port[0];
if (port_name == 0x00)
@@ -4140,29 +4136,46 @@ lpfc_sli4_async_sli_evt(struct lpfc_hba *phba, struct lpfc_acqe_sli *acqe_sli)
/* fetch the status for this port */
switch (phba->sli4_hba.lnk_info.lnk_no) {
case LPFC_LINK_NUMBER_0:
- status = bf_get(lpfc_sli_misconfigured_port0,
+ status = bf_get(lpfc_sli_misconfigured_port0_state,
+ &misconfigured->theEvent);
+ operational = bf_get(lpfc_sli_misconfigured_port0_op,
&misconfigured->theEvent);
break;
case LPFC_LINK_NUMBER_1:
- status = bf_get(lpfc_sli_misconfigured_port1,
+ status = bf_get(lpfc_sli_misconfigured_port1_state,
+ &misconfigured->theEvent);
+ operational = bf_get(lpfc_sli_misconfigured_port1_op,
&misconfigured->theEvent);
break;
case LPFC_LINK_NUMBER_2:
- status = bf_get(lpfc_sli_misconfigured_port2,
+ status = bf_get(lpfc_sli_misconfigured_port2_state,
+ &misconfigured->theEvent);
+ operational = bf_get(lpfc_sli_misconfigured_port2_op,
&misconfigured->theEvent);
break;
case LPFC_LINK_NUMBER_3:
- status = bf_get(lpfc_sli_misconfigured_port3,
+ status = bf_get(lpfc_sli_misconfigured_port3_state,
+ &misconfigured->theEvent);
+ operational = bf_get(lpfc_sli_misconfigured_port3_op,
&misconfigured->theEvent);
break;
default:
- status = ~LPFC_SLI_EVENT_STATUS_VALID;
- break;
+ lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
+ "3296 "
+ "LPFC_SLI_EVENT_TYPE_MISCONFIGURED "
+ "event: Invalid link %d",
+ phba->sli4_hba.lnk_info.lnk_no);
+ return;
}
+ /* Skip if optic state unchanged */
+ if (phba->sli4_hba.lnk_info.optic_state == status)
+ return;
+
switch (status) {
case LPFC_SLI_EVENT_STATUS_VALID:
- return; /* no message if the sfp is okay */
+ sprintf(message, "Physical Link is functional");
+ break;
case LPFC_SLI_EVENT_STATUS_NOT_PRESENT:
sprintf(message, "Optics faulted/incorrectly "
"installed/not installed - Reseat optics, "
@@ -4177,15 +4190,26 @@ lpfc_sli4_async_sli_evt(struct lpfc_hba *phba, struct lpfc_acqe_sli *acqe_sli)
sprintf(message, "Incompatible optics - Replace with "
"compatible optics for card to function.");
break;
+ case LPFC_SLI_EVENT_STATUS_UNQUALIFIED:
+ sprintf(message, "Unqualified optics - Replace with "
+ "Avago optics for Warranty and Technical "
+ "Support - Link is%s operational",
+ (operational) ? "" : " not");
+ break;
+ case LPFC_SLI_EVENT_STATUS_UNCERTIFIED:
+ sprintf(message, "Uncertified optics - Replace with "
+ "Avago-certified optics to enable link "
+ "operation - Link is%s operational",
+ (operational) ? "" : " not");
+ break;
default:
/* firmware is reporting a status we don't know about */
sprintf(message, "Unknown event status x%02x", status);
break;
}
-
+ phba->sli4_hba.lnk_info.optic_state = status;
lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
- "3176 Misconfigured Physical Port - "
- "Port Name %c %s\n", port_name, message);
+ "3176 Port Name %c %s\n", port_name, message);
break;
case LPFC_SLI_EVENT_TYPE_REMOTE_DPORT:
lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
@@ -5259,6 +5283,9 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
INIT_LIST_HEAD(&phba->sli4_hba.lpfc_vfi_blk_list);
INIT_LIST_HEAD(&phba->lpfc_vpi_blk_list);
+ /* initialize optic_state to 0xFF */
+ phba->sli4_hba.lnk_info.optic_state = 0xff;
+
/* Initialize the driver internal SLI layer lists. */
lpfc_sli_setup(phba);
lpfc_sli_queue_setup(phba);
diff --git a/drivers/scsi/lpfc/lpfc_sli4.h b/drivers/scsi/lpfc/lpfc_sli4.h
index 1e916e1..cd780c2 100644
--- a/drivers/scsi/lpfc/lpfc_sli4.h
+++ b/drivers/scsi/lpfc/lpfc_sli4.h
@@ -442,6 +442,7 @@ struct lpfc_sli4_lnk_info {
#define LPFC_LNK_GE 0x0 /* FCoE */
#define LPFC_LNK_FC 0x1 /* FC */
uint8_t lnk_no;
+ uint8_t optic_state;
};
#define LPFC_SLI4_HANDLER_CNT (LPFC_FCP_IO_CHAN_MAX+ \
--
1.7.11.7
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 14/17] lpfc: Add logging for misconfigured optics.
2015-12-16 23:12 [PATCH 14/17] lpfc: Add logging for misconfigured optics James Smart
@ 2015-12-17 8:38 ` Hannes Reinecke
2015-12-17 15:51 ` James Smart
0 siblings, 1 reply; 4+ messages in thread
From: Hannes Reinecke @ 2015-12-17 8:38 UTC (permalink / raw)
To: James Smart, linux-scsi
On 12/17/2015 12:12 AM, James Smart wrote:
>
> Add logging for misconfigured optics acqe reported by fw.
>
> Signed-off-by: Dick Kennedy <dick.kennedy@avagotech.com>
> Signed-off-by: James Smart <james.smart@avagotech.com>
> ---
> drivers/scsi/lpfc/lpfc_hw4.h | 51 ++++++++++++++++++++++++--------
> drivers/scsi/lpfc/lpfc_init.c | 67 ++++++++++++++++++++++++++++++-------------
> drivers/scsi/lpfc/lpfc_sli4.h | 1 +
> 3 files changed, 87 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h
> index f13a76a..608f941 100644
> --- a/drivers/scsi/lpfc/lpfc_hw4.h
> +++ b/drivers/scsi/lpfc/lpfc_hw4.h
> @@ -3448,23 +3448,50 @@ struct lpfc_acqe_fc_la {
> struct lpfc_acqe_misconfigured_event {
> struct {
> uint32_t word0;
> -#define lpfc_sli_misconfigured_port0_SHIFT 0
> -#define lpfc_sli_misconfigured_port0_MASK 0x000000FF
> -#define lpfc_sli_misconfigured_port0_WORD word0
> -#define lpfc_sli_misconfigured_port1_SHIFT 8
> -#define lpfc_sli_misconfigured_port1_MASK 0x000000FF
> -#define lpfc_sli_misconfigured_port1_WORD word0
> -#define lpfc_sli_misconfigured_port2_SHIFT 16
> -#define lpfc_sli_misconfigured_port2_MASK 0x000000FF
> -#define lpfc_sli_misconfigured_port2_WORD word0
> -#define lpfc_sli_misconfigured_port3_SHIFT 24
> -#define lpfc_sli_misconfigured_port3_MASK 0x000000FF
> -#define lpfc_sli_misconfigured_port3_WORD word0
> +#define lpfc_sli_misconfigured_port0_state_SHIFT 0
> +#define lpfc_sli_misconfigured_port0_state_MASK 0x000000FF
> +#define lpfc_sli_misconfigured_port0_state_WORD word0
> +#define lpfc_sli_misconfigured_port1_state_SHIFT 8
> +#define lpfc_sli_misconfigured_port1_state_MASK 0x000000FF
> +#define lpfc_sli_misconfigured_port1_state_WORD word0
> +#define lpfc_sli_misconfigured_port2_state_SHIFT 16
> +#define lpfc_sli_misconfigured_port2_state_MASK 0x000000FF
> +#define lpfc_sli_misconfigured_port2_state_WORD word0
> +#define lpfc_sli_misconfigured_port3_state_SHIFT 24
> +#define lpfc_sli_misconfigured_port3_state_MASK 0x000000FF
> +#define lpfc_sli_misconfigured_port3_state_WORD word0
> + uint32_t word1;
> +#define lpfc_sli_misconfigured_port0_op_SHIFT 0
> +#define lpfc_sli_misconfigured_port0_op_MASK 0x00000001
> +#define lpfc_sli_misconfigured_port0_op_WORD word1
> +#define lpfc_sli_misconfigured_port0_severity_SHIFT 1
> +#define lpfc_sli_misconfigured_port0_severity_MASK 0x00000003
> +#define lpfc_sli_misconfigured_port0_severity_WORD word1
> +#define lpfc_sli_misconfigured_port1_op_SHIFT 8
> +#define lpfc_sli_misconfigured_port1_op_MASK 0x00000001
> +#define lpfc_sli_misconfigured_port1_op_WORD word1
> +#define lpfc_sli_misconfigured_port1_severity_SHIFT 9
> +#define lpfc_sli_misconfigured_port1_severity_MASK 0x00000003
> +#define lpfc_sli_misconfigured_port1_severity_WORD word1
> +#define lpfc_sli_misconfigured_port2_op_SHIFT 16
> +#define lpfc_sli_misconfigured_port2_op_MASK 0x00000001
> +#define lpfc_sli_misconfigured_port2_op_WORD word1
> +#define lpfc_sli_misconfigured_port2_severity_SHIFT 17
> +#define lpfc_sli_misconfigured_port2_severity_MASK 0x00000003
> +#define lpfc_sli_misconfigured_port2_severity_WORD word1
> +#define lpfc_sli_misconfigured_port3_op_SHIFT 24
> +#define lpfc_sli_misconfigured_port3_op_MASK 0x00000001
> +#define lpfc_sli_misconfigured_port3_op_WORD word1
> +#define lpfc_sli_misconfigured_port3_severity_SHIFT 25
> +#define lpfc_sli_misconfigured_port3_severity_MASK 0x00000003
> +#define lpfc_sli_misconfigured_port3_severity_WORD word1
> } theEvent;
> #define LPFC_SLI_EVENT_STATUS_VALID 0x00
> #define LPFC_SLI_EVENT_STATUS_NOT_PRESENT 0x01
> #define LPFC_SLI_EVENT_STATUS_WRONG_TYPE 0x02
> #define LPFC_SLI_EVENT_STATUS_UNSUPPORTED 0x03
> +#define LPFC_SLI_EVENT_STATUS_UNQUALIFIED 0x04
> +#define LPFC_SLI_EVENT_STATUS_UNCERTIFIED 0x05
> };
>
> struct lpfc_acqe_sli {
> diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
> index fdf750e..b94d114 100644
> --- a/drivers/scsi/lpfc/lpfc_init.c
> +++ b/drivers/scsi/lpfc/lpfc_init.c
> @@ -4079,22 +4079,18 @@ lpfc_sli4_async_sli_evt(struct lpfc_hba *phba, struct lpfc_acqe_sli *acqe_sli)
> char message[128];
> uint8_t status;
> uint8_t evt_type;
> + uint8_t operational = 0;
> struct temp_event temp_event_data;
> struct lpfc_acqe_misconfigured_event *misconfigured;
> struct Scsi_Host *shost;
>
> evt_type = bf_get(lpfc_trailer_type, acqe_sli);
>
> - /* Special case Lancer */
> - if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) !=
> - LPFC_SLI_INTF_IF_TYPE_2) {
> - lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
> - "2901 Async SLI event - Event Data1:x%08x Event Data2:"
> - "x%08x SLI Event Type:%d\n",
> - acqe_sli->event_data1, acqe_sli->event_data2,
> - evt_type);
> - return;
> - }
> + lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
> + "2901 Async SLI event - Event Data1:x%08x Event Data2:"
> + "x%08x SLI Event Type:%d\n",
> + acqe_sli->event_data1, acqe_sli->event_data2,
> + evt_type);
>
> port_name = phba->Port[0];
> if (port_name == 0x00)
Why isn't this special cased anymore? Is it now supported by all HBAs?
> @@ -4140,29 +4136,46 @@ lpfc_sli4_async_sli_evt(struct lpfc_hba *phba, struct lpfc_acqe_sli *acqe_sli)
> /* fetch the status for this port */
> switch (phba->sli4_hba.lnk_info.lnk_no) {
> case LPFC_LINK_NUMBER_0:
> - status = bf_get(lpfc_sli_misconfigured_port0,
> + status = bf_get(lpfc_sli_misconfigured_port0_state,
> + &misconfigured->theEvent);
> + operational = bf_get(lpfc_sli_misconfigured_port0_op,
> &misconfigured->theEvent);
> break;
> case LPFC_LINK_NUMBER_1:
> - status = bf_get(lpfc_sli_misconfigured_port1,
> + status = bf_get(lpfc_sli_misconfigured_port1_state,
> + &misconfigured->theEvent);
> + operational = bf_get(lpfc_sli_misconfigured_port1_op,
> &misconfigured->theEvent);
> break;
> case LPFC_LINK_NUMBER_2:
> - status = bf_get(lpfc_sli_misconfigured_port2,
> + status = bf_get(lpfc_sli_misconfigured_port2_state,
> + &misconfigured->theEvent);
> + operational = bf_get(lpfc_sli_misconfigured_port2_op,
> &misconfigured->theEvent);
> break;
> case LPFC_LINK_NUMBER_3:
> - status = bf_get(lpfc_sli_misconfigured_port3,
> + status = bf_get(lpfc_sli_misconfigured_port3_state,
> + &misconfigured->theEvent);
> + operational = bf_get(lpfc_sli_misconfigured_port3_op,
> &misconfigured->theEvent);
> break;
> default:
> - status = ~LPFC_SLI_EVENT_STATUS_VALID;
> - break;
> + lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
> + "3296 "
> + "LPFC_SLI_EVENT_TYPE_MISCONFIGURED "
> + "event: Invalid link %d",
> + phba->sli4_hba.lnk_info.lnk_no);
> + return;
> }
>
> + /* Skip if optic state unchanged */
> + if (phba->sli4_hba.lnk_info.optic_state == status)
> + return;
> +
> switch (status) {
> case LPFC_SLI_EVENT_STATUS_VALID:
> - return; /* no message if the sfp is okay */
> + sprintf(message, "Physical Link is functional");
> + break;
> case LPFC_SLI_EVENT_STATUS_NOT_PRESENT:
> sprintf(message, "Optics faulted/incorrectly "
> "installed/not installed - Reseat optics, "
> @@ -4177,15 +4190,26 @@ lpfc_sli4_async_sli_evt(struct lpfc_hba *phba, struct lpfc_acqe_sli *acqe_sli)
> sprintf(message, "Incompatible optics - Replace with "
> "compatible optics for card to function.");
> break;
> + case LPFC_SLI_EVENT_STATUS_UNQUALIFIED:
> + sprintf(message, "Unqualified optics - Replace with "
> + "Avago optics for Warranty and Technical "
> + "Support - Link is%s operational",
> + (operational) ? "" : " not");
> + break;
> + case LPFC_SLI_EVENT_STATUS_UNCERTIFIED:
> + sprintf(message, "Uncertified optics - Replace with "
> + "Avago-certified optics to enable link "
> + "operation - Link is%s operational",
> + (operational) ? "" : " not");
> + break;
> default:
> /* firmware is reporting a status we don't know about */
> sprintf(message, "Unknown event status x%02x", status);
> break;
> }
> -
> + phba->sli4_hba.lnk_info.optic_state = status;
> lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
> - "3176 Misconfigured Physical Port - "
> - "Port Name %c %s\n", port_name, message);
> + "3176 Port Name %c %s\n", port_name, message);
> break;
> case LPFC_SLI_EVENT_TYPE_REMOTE_DPORT:
> lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
Hmm. How does this pan out on older cards?
Does every card sending out this event support the optic
misconfiguration detection? Or is there a chance that we lose the
link just because the event isn't properly implemented and we detect
it as non-operational?
Cheers,
Hannes
--
Dr. Hannes Reinecke zSeries & Storage
hare@suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 14/17] lpfc: Add logging for misconfigured optics.
2015-12-17 8:38 ` Hannes Reinecke
@ 2015-12-17 15:51 ` James Smart
2015-12-17 16:03 ` Hannes Reinecke
0 siblings, 1 reply; 4+ messages in thread
From: James Smart @ 2015-12-17 15:51 UTC (permalink / raw)
To: Hannes Reinecke, linux-scsi
On 12/17/2015 12:38 AM, Hannes Reinecke wrote:
> On 12/17/2015 12:12 AM, James Smart wrote:
>>
> Why isn't this special cased anymore? Is it now supported by all HBAs?
Yes - if and when/where an async event is generated by the adapter is in
the fw. The special casing wasn't needed in the first place.
>
> Hmm. How does this pan out on older cards?
> Does every card sending out this event support the optic
> misconfiguration detection? Or is there a chance that we lose the link
> just because the event isn't properly implemented and we detect it as
> non-operational?
>
Every card could - but whether it does is specific to the card and how
it was built and the restrictions made on that card type. The adapter
itself manages that. The event to the driver is solely for reporting.
The driver can't influence optics behavior.
-- james s
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 14/17] lpfc: Add logging for misconfigured optics.
2015-12-17 15:51 ` James Smart
@ 2015-12-17 16:03 ` Hannes Reinecke
0 siblings, 0 replies; 4+ messages in thread
From: Hannes Reinecke @ 2015-12-17 16:03 UTC (permalink / raw)
To: James Smart; +Cc: linux-scsi
On Thursday, December 17, 2015 07:51:36 AM James Smart wrote:
> On 12/17/2015 12:38 AM, Hannes Reinecke wrote:
> > On 12/17/2015 12:12 AM, James Smart wrote:
> >
> > Why isn't this special cased anymore? Is it now supported by all HBAs?
>
> Yes - if and when/where an async event is generated by the adapter is in
> the fw. The special casing wasn't needed in the first place.
>
> > Hmm. How does this pan out on older cards?
> > Does every card sending out this event support the optic
> > misconfiguration detection? Or is there a chance that we lose the link
> > just because the event isn't properly implemented and we detect it as
> > non-operational?
>
> Every card could - but whether it does is specific to the card and how
> it was built and the restrictions made on that card type. The adapter
> itself manages that. The event to the driver is solely for reporting.
> The driver can't influence optics behavior.
>
Okay, fair enough. Just wanted to clarify this.
Reviewed-by: Hannes Reinecke <hare@suse.com>
Cheers,
Hannes
--
Dr. Hannes Reinecke zSeries & Storage
hare@suse.de +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-12-17 16:03 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-16 23:12 [PATCH 14/17] lpfc: Add logging for misconfigured optics James Smart
2015-12-17 8:38 ` Hannes Reinecke
2015-12-17 15:51 ` James Smart
2015-12-17 16:03 ` Hannes Reinecke
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).