Commit 9e77018e authored by Shivasharan S's avatar Shivasharan S Committed by Martin K. Petersen

scsi: megaraid_sas: optimize raid context access in IO path

No functional change.  Use local variables when accessing raid context in
IO path.  Improves code readability.
Signed-off-by: default avatarShivasharan S <shivasharan.srikanteshwara@broadcom.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 2e47e4e6
...@@ -2627,19 +2627,22 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, ...@@ -2627,19 +2627,22 @@ megasas_build_ldio_fusion(struct megasas_instance *instance,
struct MR_DRV_RAID_MAP_ALL *local_map_ptr; struct MR_DRV_RAID_MAP_ALL *local_map_ptr;
u8 *raidLUN; u8 *raidLUN;
unsigned long spinlock_flags; unsigned long spinlock_flags;
union RAID_CONTEXT_UNION *praid_context;
struct MR_LD_RAID *raid = NULL; struct MR_LD_RAID *raid = NULL;
struct MR_PRIV_DEVICE *mrdev_priv; struct MR_PRIV_DEVICE *mrdev_priv;
struct RAID_CONTEXT *rctx;
struct RAID_CONTEXT_G35 *rctx_g35;
device_id = MEGASAS_DEV_INDEX(scp); device_id = MEGASAS_DEV_INDEX(scp);
fusion = instance->ctrl_context; fusion = instance->ctrl_context;
io_request = cmd->io_request; io_request = cmd->io_request;
io_request->RaidContext.raid_context.virtual_disk_tgt_id = rctx = &io_request->RaidContext.raid_context;
cpu_to_le16(device_id); rctx_g35 = &io_request->RaidContext.raid_context_g35;
io_request->RaidContext.raid_context.status = 0;
io_request->RaidContext.raid_context.ex_status = 0; rctx->virtual_disk_tgt_id = cpu_to_le16(device_id);
rctx->status = 0;
rctx->ex_status = 0;
req_desc = (union MEGASAS_REQUEST_DESCRIPTOR_UNION *)cmd->request_desc; req_desc = (union MEGASAS_REQUEST_DESCRIPTOR_UNION *)cmd->request_desc;
...@@ -2715,11 +2718,10 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, ...@@ -2715,11 +2718,10 @@ megasas_build_ldio_fusion(struct megasas_instance *instance,
raid = MR_LdRaidGet(ld, local_map_ptr); raid = MR_LdRaidGet(ld, local_map_ptr);
if (!raid || (!fusion->fast_path_io)) { if (!raid || (!fusion->fast_path_io)) {
io_request->RaidContext.raid_context.reg_lock_flags = 0; rctx->reg_lock_flags = 0;
fp_possible = false; fp_possible = false;
} else { } else {
if (MR_BuildRaidContext(instance, &io_info, if (MR_BuildRaidContext(instance, &io_info, rctx,
&io_request->RaidContext.raid_context,
local_map_ptr, &raidLUN)) local_map_ptr, &raidLUN))
fp_possible = (io_info.fpOkForIo > 0) ? true : false; fp_possible = (io_info.fpOkForIo > 0) ? true : false;
} }
...@@ -2727,8 +2729,6 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, ...@@ -2727,8 +2729,6 @@ megasas_build_ldio_fusion(struct megasas_instance *instance,
cmd->request_desc->SCSIIO.MSIxIndex = cmd->request_desc->SCSIIO.MSIxIndex =
instance->reply_map[raw_smp_processor_id()]; instance->reply_map[raw_smp_processor_id()];
praid_context = &io_request->RaidContext;
if (instance->adapter_type == VENTURA_SERIES) { if (instance->adapter_type == VENTURA_SERIES) {
/* FP for Optimal raid level 1. /* FP for Optimal raid level 1.
* All large RAID-1 writes (> 32 KiB, both WT and WB modes) * All large RAID-1 writes (> 32 KiB, both WT and WB modes)
...@@ -2765,17 +2765,17 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, ...@@ -2765,17 +2765,17 @@ megasas_build_ldio_fusion(struct megasas_instance *instance,
/* In ventura if stream detected for a read and it is /* In ventura if stream detected for a read and it is
* read ahead capable make this IO as LDIO * read ahead capable make this IO as LDIO
*/ */
if (is_stream_detected(&io_request->RaidContext.raid_context_g35)) if (is_stream_detected(rctx_g35))
fp_possible = false; fp_possible = false;
} }
/* If raid is NULL, set CPU affinity to default CPU0 */ /* If raid is NULL, set CPU affinity to default CPU0 */
if (raid) if (raid)
megasas_set_raidflag_cpu_affinity(praid_context, megasas_set_raidflag_cpu_affinity(&io_request->RaidContext,
raid, fp_possible, io_info.isRead, raid, fp_possible, io_info.isRead,
scsi_buff_len); scsi_buff_len);
else else
praid_context->raid_context_g35.routing_flags |= rctx_g35->routing_flags |=
(MR_RAID_CTX_CPUSEL_0 << MR_RAID_CTX_ROUTINGFLAGS_CPUSEL_SHIFT); (MR_RAID_CTX_CPUSEL_0 << MR_RAID_CTX_ROUTINGFLAGS_CPUSEL_SHIFT);
} }
...@@ -2787,25 +2787,20 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, ...@@ -2787,25 +2787,20 @@ megasas_build_ldio_fusion(struct megasas_instance *instance,
(MPI2_REQ_DESCRIPT_FLAGS_FP_IO (MPI2_REQ_DESCRIPT_FLAGS_FP_IO
<< MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); << MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT);
if (instance->adapter_type == INVADER_SERIES) { if (instance->adapter_type == INVADER_SERIES) {
if (io_request->RaidContext.raid_context.reg_lock_flags == if (rctx->reg_lock_flags == REGION_TYPE_UNUSED)
REGION_TYPE_UNUSED)
cmd->request_desc->SCSIIO.RequestFlags = cmd->request_desc->SCSIIO.RequestFlags =
(MEGASAS_REQ_DESCRIPT_FLAGS_NO_LOCK << (MEGASAS_REQ_DESCRIPT_FLAGS_NO_LOCK <<
MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT);
io_request->RaidContext.raid_context.type rctx->type = MPI2_TYPE_CUDA;
= MPI2_TYPE_CUDA; rctx->nseg = 0x1;
io_request->RaidContext.raid_context.nseg = 0x1;
io_request->IoFlags |= cpu_to_le16(MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH); io_request->IoFlags |= cpu_to_le16(MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH);
io_request->RaidContext.raid_context.reg_lock_flags |= rctx->reg_lock_flags |=
(MR_RL_FLAGS_GRANT_DESTINATION_CUDA | (MR_RL_FLAGS_GRANT_DESTINATION_CUDA |
MR_RL_FLAGS_SEQ_NUM_ENABLE); MR_RL_FLAGS_SEQ_NUM_ENABLE);
} else if (instance->adapter_type == VENTURA_SERIES) { } else if (instance->adapter_type == VENTURA_SERIES) {
io_request->RaidContext.raid_context_g35.nseg_type |= rctx_g35->nseg_type |= (1 << RAID_CONTEXT_NSEG_SHIFT);
(1 << RAID_CONTEXT_NSEG_SHIFT); rctx_g35->nseg_type |= (MPI2_TYPE_CUDA << RAID_CONTEXT_TYPE_SHIFT);
io_request->RaidContext.raid_context_g35.nseg_type |= rctx_g35->routing_flags |= (1 << MR_RAID_CTX_ROUTINGFLAGS_SQN_SHIFT);
(MPI2_TYPE_CUDA << RAID_CONTEXT_TYPE_SHIFT);
io_request->RaidContext.raid_context_g35.routing_flags |=
(1 << MR_RAID_CTX_ROUTINGFLAGS_SQN_SHIFT);
io_request->IoFlags |= io_request->IoFlags |=
cpu_to_le16(MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH); cpu_to_le16(MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH);
} }
...@@ -2819,11 +2814,9 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, ...@@ -2819,11 +2814,9 @@ megasas_build_ldio_fusion(struct megasas_instance *instance,
scp->SCp.Status |= MEGASAS_LOAD_BALANCE_FLAG; scp->SCp.Status |= MEGASAS_LOAD_BALANCE_FLAG;
cmd->pd_r1_lb = io_info.pd_after_lb; cmd->pd_r1_lb = io_info.pd_after_lb;
if (instance->adapter_type == VENTURA_SERIES) if (instance->adapter_type == VENTURA_SERIES)
io_request->RaidContext.raid_context_g35.span_arm rctx_g35->span_arm = io_info.span_arm;
= io_info.span_arm;
else else
io_request->RaidContext.raid_context.span_arm rctx->span_arm = io_info.span_arm;
= io_info.span_arm;
} else } else
scp->SCp.Status &= ~MEGASAS_LOAD_BALANCE_FLAG; scp->SCp.Status &= ~MEGASAS_LOAD_BALANCE_FLAG;
...@@ -2846,31 +2839,26 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, ...@@ -2846,31 +2839,26 @@ megasas_build_ldio_fusion(struct megasas_instance *instance,
/* populate the LUN field */ /* populate the LUN field */
memcpy(io_request->LUN, raidLUN, 8); memcpy(io_request->LUN, raidLUN, 8);
} else { } else {
io_request->RaidContext.raid_context.timeout_value = rctx->timeout_value =
cpu_to_le16(local_map_ptr->raidMap.fpPdIoTimeoutSec); cpu_to_le16(local_map_ptr->raidMap.fpPdIoTimeoutSec);
cmd->request_desc->SCSIIO.RequestFlags = cmd->request_desc->SCSIIO.RequestFlags =
(MEGASAS_REQ_DESCRIPT_FLAGS_LD_IO (MEGASAS_REQ_DESCRIPT_FLAGS_LD_IO
<< MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); << MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT);
if (instance->adapter_type == INVADER_SERIES) { if (instance->adapter_type == INVADER_SERIES) {
if (io_info.do_fp_rlbypass || if (io_info.do_fp_rlbypass ||
(io_request->RaidContext.raid_context.reg_lock_flags (rctx->reg_lock_flags == REGION_TYPE_UNUSED))
== REGION_TYPE_UNUSED))
cmd->request_desc->SCSIIO.RequestFlags = cmd->request_desc->SCSIIO.RequestFlags =
(MEGASAS_REQ_DESCRIPT_FLAGS_NO_LOCK << (MEGASAS_REQ_DESCRIPT_FLAGS_NO_LOCK <<
MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT);
io_request->RaidContext.raid_context.type rctx->type = MPI2_TYPE_CUDA;
= MPI2_TYPE_CUDA; rctx->reg_lock_flags |=
io_request->RaidContext.raid_context.reg_lock_flags |=
(MR_RL_FLAGS_GRANT_DESTINATION_CPU0 | (MR_RL_FLAGS_GRANT_DESTINATION_CPU0 |
MR_RL_FLAGS_SEQ_NUM_ENABLE); MR_RL_FLAGS_SEQ_NUM_ENABLE);
io_request->RaidContext.raid_context.nseg = 0x1; rctx->nseg = 0x1;
} else if (instance->adapter_type == VENTURA_SERIES) { } else if (instance->adapter_type == VENTURA_SERIES) {
io_request->RaidContext.raid_context_g35.routing_flags |= rctx_g35->routing_flags |= (1 << MR_RAID_CTX_ROUTINGFLAGS_SQN_SHIFT);
(1 << MR_RAID_CTX_ROUTINGFLAGS_SQN_SHIFT); rctx_g35->nseg_type |= (1 << RAID_CONTEXT_NSEG_SHIFT);
io_request->RaidContext.raid_context_g35.nseg_type |= rctx_g35->nseg_type |= (MPI2_TYPE_CUDA << RAID_CONTEXT_TYPE_SHIFT);
(1 << RAID_CONTEXT_NSEG_SHIFT);
io_request->RaidContext.raid_context_g35.nseg_type |=
(MPI2_TYPE_CUDA << RAID_CONTEXT_TYPE_SHIFT);
} }
io_request->Function = MEGASAS_MPI2_FUNCTION_LD_IO_REQUEST; io_request->Function = MEGASAS_MPI2_FUNCTION_LD_IO_REQUEST;
io_request->DevHandle = cpu_to_le16(device_id); io_request->DevHandle = cpu_to_le16(device_id);
......
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