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

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
Loading
Loading
Loading
Loading
+15 −3
Original line number Original line Diff line number Diff line
@@ -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)
	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)


	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;
		}
		}