Commit 5e6a9760 authored by Gilbert Wu's avatar Gilbert Wu Committed by Martin K. Petersen

scsi: smartpqi: add module param for exposure order

Expose physical devices before logical devices.
Reviewed-by: default avatarScott Benesh <scott.benesh@microsemi.com>
Reviewed-by: default avatarKevin Barnett <kevin.barnett@microsemi.com>
Signed-off-by: default avatarGilbert Wu <gilbert.wu@microsemi.com>
Signed-off-by: default avatarDon Brace <don.brace@microsemi.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 01f2ef6d
...@@ -145,6 +145,12 @@ MODULE_PARM_DESC(lockup_action, "Action to take when controller locked up.\n" ...@@ -145,6 +145,12 @@ MODULE_PARM_DESC(lockup_action, "Action to take when controller locked up.\n"
"\t\tSupported: none, reboot, panic\n" "\t\tSupported: none, reboot, panic\n"
"\t\tDefault: none"); "\t\tDefault: none");
static int pqi_expose_ld_first;
module_param_named(expose_ld_first,
pqi_expose_ld_first, int, 0644);
MODULE_PARM_DESC(expose_ld_first,
"Expose logical drives before physical drives.");
static char *raid_levels[] = { static char *raid_levels[] = {
"RAID-0", "RAID-0",
"RAID-4", "RAID-4",
...@@ -1988,6 +1994,8 @@ static int pqi_update_scsi_devices(struct pqi_ctrl_info *ctrl_info) ...@@ -1988,6 +1994,8 @@ static int pqi_update_scsi_devices(struct pqi_ctrl_info *ctrl_info)
unsigned int num_valid_devices; unsigned int num_valid_devices;
bool is_physical_device; bool is_physical_device;
u8 *scsi3addr; u8 *scsi3addr;
unsigned int physical_index;
unsigned int logical_index;
static char *out_of_memory_msg = static char *out_of_memory_msg =
"failed to allocate memory, device discovery stopped"; "failed to allocate memory, device discovery stopped";
...@@ -2050,19 +2058,23 @@ static int pqi_update_scsi_devices(struct pqi_ctrl_info *ctrl_info) ...@@ -2050,19 +2058,23 @@ static int pqi_update_scsi_devices(struct pqi_ctrl_info *ctrl_info)
device = NULL; device = NULL;
num_valid_devices = 0; num_valid_devices = 0;
physical_index = 0;
logical_index = 0;
for (i = 0; i < num_new_devices; i++) { for (i = 0; i < num_new_devices; i++) {
if (i < num_physicals) { if ((!pqi_expose_ld_first && i < num_physicals) ||
(pqi_expose_ld_first && i >= num_logicals)) {
is_physical_device = true; is_physical_device = true;
phys_lun_ext_entry = &physdev_list->lun_entries[i]; phys_lun_ext_entry =
&physdev_list->lun_entries[physical_index++];
log_lun_ext_entry = NULL; log_lun_ext_entry = NULL;
scsi3addr = phys_lun_ext_entry->lunid; scsi3addr = phys_lun_ext_entry->lunid;
} else { } else {
is_physical_device = false; is_physical_device = false;
phys_lun_ext_entry = NULL; phys_lun_ext_entry = NULL;
log_lun_ext_entry = log_lun_ext_entry =
&logdev_list->lun_entries[i - num_physicals]; &logdev_list->lun_entries[logical_index++];
scsi3addr = log_lun_ext_entry->lunid; scsi3addr = log_lun_ext_entry->lunid;
} }
......
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