Commit 75888956 authored by Sreekanth Reddy's avatar Sreekanth Reddy Committed by Martin K. Petersen

scsi: mpt3sas: Display chassis slot information of the drive

Display chassis slot information along with other drive location
parameters such as slot number and connector name in the logs if
chassis slot validity bit is set in 'SAS Enclosure Page 0'.
Signed-off-by: default avatarSreekanth Reddy <Sreekanth.Reddy@broadcom.com>
Reviewed-by: default avatarTomas Henzl <thenzl@redhat.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 90e7a701
...@@ -469,6 +469,8 @@ struct _internal_cmd { ...@@ -469,6 +469,8 @@ struct _internal_cmd {
* @pfa_led_on: flag for PFA LED status * @pfa_led_on: flag for PFA LED status
* @pend_sas_rphy_add: flag to check if device is in sas_rphy_add() * @pend_sas_rphy_add: flag to check if device is in sas_rphy_add()
* addition routine. * addition routine.
* @chassis_slot: chassis slot
* @is_chassis_slot_valid: chassis slot valid or not
*/ */
struct _sas_device { struct _sas_device {
struct list_head list; struct list_head list;
...@@ -491,6 +493,8 @@ struct _sas_device { ...@@ -491,6 +493,8 @@ struct _sas_device {
u8 pfa_led_on; u8 pfa_led_on;
u8 pend_sas_rphy_add; u8 pend_sas_rphy_add;
u8 enclosure_level; u8 enclosure_level;
u8 chassis_slot;
u8 is_chassis_slot_valid;
u8 connector_name[5]; u8 connector_name[5];
struct kref refcount; struct kref refcount;
}; };
......
...@@ -652,6 +652,69 @@ mpt3sas_get_sdev_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) ...@@ -652,6 +652,69 @@ mpt3sas_get_sdev_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle)
return sas_device; return sas_device;
} }
/**
* _scsih_display_enclosure_chassis_info - display device location info
* @ioc: per adapter object
* @sas_device: per sas device object
* @sdev: scsi device struct
* @starget: scsi target struct
*
* Returns nothing.
*/
static void
_scsih_display_enclosure_chassis_info(struct MPT3SAS_ADAPTER *ioc,
struct _sas_device *sas_device, struct scsi_device *sdev,
struct scsi_target *starget)
{
if (sdev) {
if (sas_device->enclosure_handle != 0)
sdev_printk(KERN_INFO, sdev,
"enclosure logical id (0x%016llx), slot(%d) \n",
(unsigned long long)
sas_device->enclosure_logical_id,
sas_device->slot);
if (sas_device->connector_name[0] != '\0')
sdev_printk(KERN_INFO, sdev,
"enclosure level(0x%04x), connector name( %s)\n",
sas_device->enclosure_level,
sas_device->connector_name);
if (sas_device->is_chassis_slot_valid)
sdev_printk(KERN_INFO, sdev, "chassis slot(0x%04x)\n",
sas_device->chassis_slot);
} else if (starget) {
if (sas_device->enclosure_handle != 0)
starget_printk(KERN_INFO, starget,
"enclosure logical id(0x%016llx), slot(%d) \n",
(unsigned long long)
sas_device->enclosure_logical_id,
sas_device->slot);
if (sas_device->connector_name[0] != '\0')
starget_printk(KERN_INFO, starget,
"enclosure level(0x%04x), connector name( %s)\n",
sas_device->enclosure_level,
sas_device->connector_name);
if (sas_device->is_chassis_slot_valid)
starget_printk(KERN_INFO, starget,
"chassis slot(0x%04x)\n",
sas_device->chassis_slot);
} else {
if (sas_device->enclosure_handle != 0)
pr_info(MPT3SAS_FMT
"enclosure logical id(0x%016llx), slot(%d) \n",
ioc->name, (unsigned long long)
sas_device->enclosure_logical_id,
sas_device->slot);
if (sas_device->connector_name[0] != '\0')
pr_info(MPT3SAS_FMT
"enclosure level(0x%04x), connector name( %s)\n",
ioc->name, sas_device->enclosure_level,
sas_device->connector_name);
if (sas_device->is_chassis_slot_valid)
pr_info(MPT3SAS_FMT "chassis slot(0x%04x)\n",
ioc->name, sas_device->chassis_slot);
}
}
/** /**
* _scsih_sas_device_remove - remove sas_device from list. * _scsih_sas_device_remove - remove sas_device from list.
* @ioc: per adapter object * @ioc: per adapter object
...@@ -673,17 +736,7 @@ _scsih_sas_device_remove(struct MPT3SAS_ADAPTER *ioc, ...@@ -673,17 +736,7 @@ _scsih_sas_device_remove(struct MPT3SAS_ADAPTER *ioc,
ioc->name, sas_device->handle, ioc->name, sas_device->handle,
(unsigned long long) sas_device->sas_address); (unsigned long long) sas_device->sas_address);
if (sas_device->enclosure_handle != 0) _scsih_display_enclosure_chassis_info(ioc, sas_device, NULL, NULL);
pr_info(MPT3SAS_FMT
"removing enclosure logical id(0x%016llx), slot(%d)\n",
ioc->name, (unsigned long long)
sas_device->enclosure_logical_id, sas_device->slot);
if (sas_device->connector_name[0] != '\0')
pr_info(MPT3SAS_FMT
"removing enclosure level(0x%04x), connector name( %s)\n",
ioc->name, sas_device->enclosure_level,
sas_device->connector_name);
/* /*
* The lock serializes access to the list, but we still need to verify * The lock serializes access to the list, but we still need to verify
...@@ -775,17 +828,8 @@ _scsih_sas_device_add(struct MPT3SAS_ADAPTER *ioc, ...@@ -775,17 +828,8 @@ _scsih_sas_device_add(struct MPT3SAS_ADAPTER *ioc,
ioc->name, __func__, sas_device->handle, ioc->name, __func__, sas_device->handle,
(unsigned long long)sas_device->sas_address)); (unsigned long long)sas_device->sas_address));
if (sas_device->enclosure_handle != 0) dewtprintk(ioc, _scsih_display_enclosure_chassis_info(ioc, sas_device,
dewtprintk(ioc, pr_info(MPT3SAS_FMT NULL, NULL));
"%s: enclosure logical id(0x%016llx), slot( %d)\n",
ioc->name, __func__, (unsigned long long)
sas_device->enclosure_logical_id, sas_device->slot));
if (sas_device->connector_name[0] != '\0')
dewtprintk(ioc, pr_info(MPT3SAS_FMT
"%s: enclosure level(0x%04x), connector name( %s)\n",
ioc->name, __func__,
sas_device->enclosure_level, sas_device->connector_name));
spin_lock_irqsave(&ioc->sas_device_lock, flags); spin_lock_irqsave(&ioc->sas_device_lock, flags);
sas_device_get(sas_device); sas_device_get(sas_device);
...@@ -835,17 +879,8 @@ _scsih_sas_device_init_add(struct MPT3SAS_ADAPTER *ioc, ...@@ -835,17 +879,8 @@ _scsih_sas_device_init_add(struct MPT3SAS_ADAPTER *ioc,
__func__, sas_device->handle, __func__, sas_device->handle,
(unsigned long long)sas_device->sas_address)); (unsigned long long)sas_device->sas_address));
if (sas_device->enclosure_handle != 0) dewtprintk(ioc, _scsih_display_enclosure_chassis_info(ioc, sas_device,
dewtprintk(ioc, pr_info(MPT3SAS_FMT NULL, NULL));
"%s: enclosure logical id(0x%016llx), slot( %d)\n",
ioc->name, __func__, (unsigned long long)
sas_device->enclosure_logical_id, sas_device->slot));
if (sas_device->connector_name[0] != '\0')
dewtprintk(ioc, pr_info(MPT3SAS_FMT
"%s: enclosure level(0x%04x), connector name( %s)\n",
ioc->name, __func__, sas_device->enclosure_level,
sas_device->connector_name));
spin_lock_irqsave(&ioc->sas_device_lock, flags); spin_lock_irqsave(&ioc->sas_device_lock, flags);
sas_device_get(sas_device); sas_device_get(sas_device);
...@@ -2008,16 +2043,8 @@ scsih_slave_configure(struct scsi_device *sdev) ...@@ -2008,16 +2043,8 @@ scsih_slave_configure(struct scsi_device *sdev)
"sas_addr(0x%016llx), phy(%d), device_name(0x%016llx)\n", "sas_addr(0x%016llx), phy(%d), device_name(0x%016llx)\n",
ds, handle, (unsigned long long)sas_device->sas_address, ds, handle, (unsigned long long)sas_device->sas_address,
sas_device->phy, (unsigned long long)sas_device->device_name); sas_device->phy, (unsigned long long)sas_device->device_name);
if (sas_device->enclosure_handle != 0)
sdev_printk(KERN_INFO, sdev, _scsih_display_enclosure_chassis_info(NULL, sas_device, sdev, NULL);
"%s: enclosure_logical_id(0x%016llx), slot(%d)\n",
ds, (unsigned long long)
sas_device->enclosure_logical_id, sas_device->slot);
if (sas_device->connector_name[0] != '\0')
sdev_printk(KERN_INFO, sdev,
"%s: enclosure level(0x%04x), connector name( %s)\n",
ds, sas_device->enclosure_level,
sas_device->connector_name);
sas_device_put(sas_device); sas_device_put(sas_device);
spin_unlock_irqrestore(&ioc->sas_device_lock, flags); spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
...@@ -2436,17 +2463,9 @@ _scsih_tm_display_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd) ...@@ -2436,17 +2463,9 @@ _scsih_tm_display_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd)
sas_device->handle, sas_device->handle,
(unsigned long long)sas_device->sas_address, (unsigned long long)sas_device->sas_address,
sas_device->phy); sas_device->phy);
if (sas_device->enclosure_handle != 0)
starget_printk(KERN_INFO, starget, _scsih_display_enclosure_chassis_info(NULL, sas_device,
"enclosure_logical_id(0x%016llx), slot(%d)\n", NULL, starget);
(unsigned long long)
sas_device->enclosure_logical_id,
sas_device->slot);
if (sas_device->connector_name[0] != '\0')
starget_printk(KERN_INFO, starget,
"enclosure level(0x%04x),connector name(%s)\n",
sas_device->enclosure_level,
sas_device->connector_name);
sas_device_put(sas_device); sas_device_put(sas_device);
} }
...@@ -3184,18 +3203,8 @@ _scsih_tm_tr_send(struct MPT3SAS_ADAPTER *ioc, u16 handle) ...@@ -3184,18 +3203,8 @@ _scsih_tm_tr_send(struct MPT3SAS_ADAPTER *ioc, u16 handle)
"setting delete flag: handle(0x%04x), sas_addr(0x%016llx)\n", "setting delete flag: handle(0x%04x), sas_addr(0x%016llx)\n",
ioc->name, handle, ioc->name, handle,
(unsigned long long)sas_address)); (unsigned long long)sas_address));
if (sas_device->enclosure_handle != 0) dewtprintk(ioc, _scsih_display_enclosure_chassis_info(ioc,
dewtprintk(ioc, pr_info(MPT3SAS_FMT sas_device, NULL, NULL));
"setting delete flag:enclosure logical id(0x%016llx),"
" slot(%d)\n", ioc->name, (unsigned long long)
sas_device->enclosure_logical_id,
sas_device->slot));
if (sas_device->connector_name[0] != '\0')
dewtprintk(ioc, pr_info(MPT3SAS_FMT
"setting delete flag: enclosure level(0x%04x),"
" connector name( %s)\n", ioc->name,
sas_device->enclosure_level,
sas_device->connector_name));
_scsih_ublock_io_device(ioc, sas_address); _scsih_ublock_io_device(ioc, sas_address);
sas_target_priv_data->handle = MPT3SAS_INVALID_DEVICE_HANDLE; sas_target_priv_data->handle = MPT3SAS_INVALID_DEVICE_HANDLE;
} }
...@@ -4415,19 +4424,9 @@ _scsih_scsi_ioc_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, ...@@ -4415,19 +4424,9 @@ _scsih_scsi_ioc_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
"\tsas_address(0x%016llx), phy(%d)\n", "\tsas_address(0x%016llx), phy(%d)\n",
ioc->name, (unsigned long long) ioc->name, (unsigned long long)
sas_device->sas_address, sas_device->phy); sas_device->sas_address, sas_device->phy);
if (sas_device->enclosure_handle != 0)
pr_warn(MPT3SAS_FMT _scsih_display_enclosure_chassis_info(ioc, sas_device,
"\tenclosure_logical_id(0x%016llx)," NULL, NULL);
"slot(%d)\n", ioc->name,
(unsigned long long)
sas_device->enclosure_logical_id,
sas_device->slot);
if (sas_device->connector_name[0])
pr_warn(MPT3SAS_FMT
"\tenclosure level(0x%04x),"
" connector name( %s)\n", ioc->name,
sas_device->enclosure_level,
sas_device->connector_name);
sas_device_put(sas_device); sas_device_put(sas_device);
} }
...@@ -4605,16 +4604,8 @@ _scsih_smart_predicted_fault(struct MPT3SAS_ADAPTER *ioc, u16 handle) ...@@ -4605,16 +4604,8 @@ _scsih_smart_predicted_fault(struct MPT3SAS_ADAPTER *ioc, u16 handle)
((sas_target_priv_data->flags & MPT_TARGET_FLAGS_VOLUME))) ((sas_target_priv_data->flags & MPT_TARGET_FLAGS_VOLUME)))
goto out_unlock; goto out_unlock;
if (sas_device->enclosure_handle != 0) _scsih_display_enclosure_chassis_info(NULL, sas_device, NULL, starget);
starget_printk(KERN_INFO, starget, "predicted fault, "
"enclosure logical id(0x%016llx), slot(%d)\n",
(unsigned long long)sas_device->enclosure_logical_id,
sas_device->slot);
if (sas_device->connector_name[0] != '\0')
starget_printk(KERN_WARNING, starget, "predicted fault, "
"enclosure level(0x%04x), connector name( %s)\n",
sas_device->enclosure_level,
sas_device->connector_name);
spin_unlock_irqrestore(&ioc->sas_device_lock, flags); spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
if (ioc->pdev->subsystem_vendor == PCI_VENDOR_ID_IBM) if (ioc->pdev->subsystem_vendor == PCI_VENDOR_ID_IBM)
...@@ -5407,6 +5398,7 @@ _scsih_check_device(struct MPT3SAS_ADAPTER *ioc, ...@@ -5407,6 +5398,7 @@ _scsih_check_device(struct MPT3SAS_ADAPTER *ioc,
{ {
Mpi2ConfigReply_t mpi_reply; Mpi2ConfigReply_t mpi_reply;
Mpi2SasDevicePage0_t sas_device_pg0; Mpi2SasDevicePage0_t sas_device_pg0;
Mpi2SasEnclosurePage0_t enclosure_pg0;
struct _sas_device *sas_device; struct _sas_device *sas_device;
u32 ioc_status; u32 ioc_status;
unsigned long flags; unsigned long flags;
...@@ -5462,6 +5454,18 @@ _scsih_check_device(struct MPT3SAS_ADAPTER *ioc, ...@@ -5462,6 +5454,18 @@ _scsih_check_device(struct MPT3SAS_ADAPTER *ioc,
sas_device->enclosure_level = 0; sas_device->enclosure_level = 0;
sas_device->connector_name[0] = '\0'; sas_device->connector_name[0] = '\0';
} }
sas_device->is_chassis_slot_valid = 0;
if (sas_device->enclosure_handle &&
!(mpt3sas_config_get_enclosure_pg0(ioc, &mpi_reply,
&enclosure_pg0, MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE,
sas_device->enclosure_handle))) {
if (le16_to_cpu(enclosure_pg0.Flags) &
MPI2_SAS_ENCLS0_FLAGS_CHASSIS_SLOT_VALID) {
sas_device->is_chassis_slot_valid = 1;
sas_device->chassis_slot =
enclosure_pg0.ChassisSlot;
}
}
} }
/* check if device is present */ /* check if device is present */
...@@ -5513,6 +5517,7 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num, ...@@ -5513,6 +5517,7 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num,
u32 ioc_status; u32 ioc_status;
u64 sas_address; u64 sas_address;
u32 device_info; u32 device_info;
int encl_pg0_rc = -1;
if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0,
MPI2_SAS_DEVICE_PGAD_FORM_HANDLE, handle))) { MPI2_SAS_DEVICE_PGAD_FORM_HANDLE, handle))) {
...@@ -5557,6 +5562,16 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num, ...@@ -5557,6 +5562,16 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num,
return -1; return -1;
} }
if (sas_device_pg0.EnclosureHandle) {
encl_pg0_rc = mpt3sas_config_get_enclosure_pg0(ioc, &mpi_reply,
&enclosure_pg0, MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE,
sas_device_pg0.EnclosureHandle);
if (encl_pg0_rc)
pr_info(MPT3SAS_FMT
"Enclosure Pg0 read failed for handle(0x%04x)\n",
ioc->name, sas_device_pg0.EnclosureHandle);
}
sas_device = kzalloc(sizeof(struct _sas_device), sas_device = kzalloc(sizeof(struct _sas_device),
GFP_KERNEL); GFP_KERNEL);
if (!sas_device) { if (!sas_device) {
...@@ -5594,13 +5609,21 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num, ...@@ -5594,13 +5609,21 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num,
sas_device->enclosure_level = 0; sas_device->enclosure_level = 0;
sas_device->connector_name[0] = '\0'; sas_device->connector_name[0] = '\0';
} }
/* get enclosure_logical_id */
if (sas_device->enclosure_handle && !(mpt3sas_config_get_enclosure_pg0( /* get enclosure_logical_id & chassis_slot */
ioc, &mpi_reply, &enclosure_pg0, MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE, sas_device->is_chassis_slot_valid = 0;
sas_device->enclosure_handle))) if (encl_pg0_rc == 0) {
sas_device->enclosure_logical_id = sas_device->enclosure_logical_id =
le64_to_cpu(enclosure_pg0.EnclosureLogicalID); le64_to_cpu(enclosure_pg0.EnclosureLogicalID);
if (le16_to_cpu(enclosure_pg0.Flags) &
MPI2_SAS_ENCLS0_FLAGS_CHASSIS_SLOT_VALID) {
sas_device->is_chassis_slot_valid = 1;
sas_device->chassis_slot =
enclosure_pg0.ChassisSlot;
}
}
/* get device name */ /* get device name */
sas_device->device_name = le64_to_cpu(sas_device_pg0.DeviceName); sas_device->device_name = le64_to_cpu(sas_device_pg0.DeviceName);
...@@ -5631,23 +5654,15 @@ _scsih_remove_device(struct MPT3SAS_ADAPTER *ioc, ...@@ -5631,23 +5654,15 @@ _scsih_remove_device(struct MPT3SAS_ADAPTER *ioc,
_scsih_turn_off_pfa_led(ioc, sas_device); _scsih_turn_off_pfa_led(ioc, sas_device);
sas_device->pfa_led_on = 0; sas_device->pfa_led_on = 0;
} }
dewtprintk(ioc, pr_info(MPT3SAS_FMT dewtprintk(ioc, pr_info(MPT3SAS_FMT
"%s: enter: handle(0x%04x), sas_addr(0x%016llx)\n", "%s: enter: handle(0x%04x), sas_addr(0x%016llx)\n",
ioc->name, __func__, ioc->name, __func__,
sas_device->handle, (unsigned long long) sas_device->handle, (unsigned long long)
sas_device->sas_address)); sas_device->sas_address));
if (sas_device->enclosure_handle != 0)
dewtprintk(ioc, pr_info(MPT3SAS_FMT dewtprintk(ioc, _scsih_display_enclosure_chassis_info(ioc, sas_device,
"%s: enter: enclosure logical id(0x%016llx), slot(%d)\n", NULL, NULL));
ioc->name, __func__,
(unsigned long long)sas_device->enclosure_logical_id,
sas_device->slot));
if (sas_device->connector_name[0] != '\0')
dewtprintk(ioc, pr_info(MPT3SAS_FMT
"%s: enter: enclosure level(0x%04x), connector name( %s)\n",
ioc->name, __func__,
sas_device->enclosure_level,
sas_device->connector_name));
if (sas_device->starget && sas_device->starget->hostdata) { if (sas_device->starget && sas_device->starget->hostdata) {
sas_target_priv_data = sas_device->starget->hostdata; sas_target_priv_data = sas_device->starget->hostdata;
...@@ -5666,34 +5681,16 @@ _scsih_remove_device(struct MPT3SAS_ADAPTER *ioc, ...@@ -5666,34 +5681,16 @@ _scsih_remove_device(struct MPT3SAS_ADAPTER *ioc,
"removing handle(0x%04x), sas_addr(0x%016llx)\n", "removing handle(0x%04x), sas_addr(0x%016llx)\n",
ioc->name, sas_device->handle, ioc->name, sas_device->handle,
(unsigned long long) sas_device->sas_address); (unsigned long long) sas_device->sas_address);
if (sas_device->enclosure_handle != 0)
pr_info(MPT3SAS_FMT _scsih_display_enclosure_chassis_info(ioc, sas_device, NULL, NULL);
"removing : enclosure logical id(0x%016llx), slot(%d)\n",
ioc->name,
(unsigned long long)sas_device->enclosure_logical_id,
sas_device->slot);
if (sas_device->connector_name[0] != '\0')
pr_info(MPT3SAS_FMT
"removing enclosure level(0x%04x), connector name( %s)\n",
ioc->name, sas_device->enclosure_level,
sas_device->connector_name);
dewtprintk(ioc, pr_info(MPT3SAS_FMT dewtprintk(ioc, pr_info(MPT3SAS_FMT
"%s: exit: handle(0x%04x), sas_addr(0x%016llx)\n", "%s: exit: handle(0x%04x), sas_addr(0x%016llx)\n",
ioc->name, __func__, ioc->name, __func__,
sas_device->handle, (unsigned long long) sas_device->handle, (unsigned long long)
sas_device->sas_address)); sas_device->sas_address));
if (sas_device->enclosure_handle != 0) dewtprintk(ioc, _scsih_display_enclosure_chassis_info(ioc, sas_device,
dewtprintk(ioc, pr_info(MPT3SAS_FMT NULL, NULL));
"%s: exit: enclosure logical id(0x%016llx), slot(%d)\n",
ioc->name, __func__,
(unsigned long long)sas_device->enclosure_logical_id,
sas_device->slot));
if (sas_device->connector_name[0] != '\0')
dewtprintk(ioc, pr_info(MPT3SAS_FMT
"%s: exit: enclosure level(0x%04x), connector name(%s)\n",
ioc->name, __func__, sas_device->enclosure_level,
sas_device->connector_name));
} }
/** /**
...@@ -7093,6 +7090,8 @@ Mpi2SasDevicePage0_t *sas_device_pg0) ...@@ -7093,6 +7090,8 @@ Mpi2SasDevicePage0_t *sas_device_pg0)
struct scsi_target *starget; struct scsi_target *starget;
struct _sas_device *sas_device; struct _sas_device *sas_device;
unsigned long flags; unsigned long flags;
Mpi2SasEnclosurePage0_t enclosure_pg0;
Mpi2ConfigReply_t mpi_reply;
spin_lock_irqsave(&ioc->sas_device_lock, flags); spin_lock_irqsave(&ioc->sas_device_lock, flags);
list_for_each_entry(sas_device, &ioc->sas_device_list, list) { list_for_each_entry(sas_device, &ioc->sas_device_list, list) {
...@@ -7132,6 +7131,19 @@ Mpi2SasDevicePage0_t *sas_device_pg0) ...@@ -7132,6 +7131,19 @@ Mpi2SasDevicePage0_t *sas_device_pg0)
sas_device->connector_name[0] = '\0'; sas_device->connector_name[0] = '\0';
} }
sas_device->is_chassis_slot_valid = 0;
if (sas_device->enclosure_handle &&
!(mpt3sas_config_get_enclosure_pg0(ioc, &mpi_reply,
&enclosure_pg0, MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE,
sas_device->enclosure_handle))) {
if (le16_to_cpu(enclosure_pg0.Flags) &
MPI2_SAS_ENCLS0_FLAGS_CHASSIS_SLOT_VALID) {
sas_device->is_chassis_slot_valid = 1;
sas_device->chassis_slot =
enclosure_pg0.ChassisSlot;
}
}
if (sas_device->handle == sas_device_pg0->DevHandle) if (sas_device->handle == sas_device_pg0->DevHandle)
goto out; goto out;
pr_info("\thandle changed from(0x%04x)!!!\n", pr_info("\thandle changed from(0x%04x)!!!\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment