> -----Original Message-----
> From: Martin K. Petersen [mailto:[email protected]]
> Sent: Wednesday, August 12, 2015 6:59 AM
> To: [email protected]
> Cc: [email protected]; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]
> Subject: Re: [PATCH 1/7] megaraid_sas : Jbod sequence number support
>
>
> Sumit,
>
> @@ -973,7 +973,12 @@ struct megasas_ctrl_info {
>
> struct {
> #if defined(__BIG_ENDIAN_BITFIELD)
> - u32 reserved:12;
> + u32 reserved:7;
> + u32 useSeqNumJbodFP:1;
> + u32 supportExtendedSSCSize:1;
> + u32 supportDiskCacheSettingForSysPDs:1;
> + u32 supportCPLDUpdate:1;
> + u32 supportTTYLogCompression:1;
> u32 discardCacheDuringLDDelete:1;
> u32 supportSecurityonJBOD:1;
> u32 supportCacheBypassModes:1;
> @@ -1013,7 +1018,12 @@ struct megasas_ctrl_info {
> u32 supportCacheBypassModes:1;
> u32 supportSecurityonJBOD:1;
> u32 discardCacheDuringLDDelete:1;
> - u32 reserved:12;
> + u32 supportTTYLogCompression:1;
> + u32 supportCPLDUpdate:1;
> + u32 supportDiskCacheSettingForSysPDs:1;
> + u32 supportExtendedSSCSize:1;
> + u32 useSeqNumJbodFP:1;
> + u32 reserved:7;
> #endif
> } adapterOperations3;
>
> Looks like most of these new flags should be in a separate patch.
I will create separate patch for these new flags which are not related to
JBOD sequence support. These flags are created to keep APIs in sync across
driver and firmware.
>
> @@ -4482,6 +4506,62 @@ megasas_destroy_irqs(struct megasas_instance
> *instance) { }
>
> /**
> + * megasas_setup_jbod_map - setup jbod map for FP seq_number.
> + * @instance: Adapter soft state
> + * @is_probe: Driver probe check
> + *
> + * Return 0 on success.
> + */
> +void
> +megasas_setup_jbod_map(struct megasas_instance *instance) {
> + int i;
> + struct fusion_context *fusion = instance->ctrl_context;
> + u32 pd_seq_map_sz;
> +
> + pd_seq_map_sz = sizeof(struct MR_PD_CFG_SEQ_NUM_SYNC) +
> + (sizeof(struct MR_PD_CFG_SEQ) * (MAX_PHYSICAL_DEVICES -
> 1));
>
> Why -1 here? Presumably MAX_PHYSICAL_DEVICES is a count, not an index.
Yes it is count only. struct MR_PD_CFG_SEQ_NUM_SYNC has "struct
MR_PD_CFG_SEQ" as one of its member so struct MR_PD_CFG_SEQ corresponding
to PD index "0" is embedded inside struct MR_PD_CFG_SEQ_NUM_SYNC. That's
why -1 here.
>
> +
> + if (reset_devices || !fusion ||
> + !instance->ctrl_info->adapterOperations3.useSeqNumJbodFP)
{
> + dev_info(&instance->pdev->dev,
> + "Jbod map is not supported %s %d\n",
> + __func__, __LINE__);
> + instance->use_seqnum_jbod_fp = 0;
>
> Nitpick: It's a bool so use false. Occurs throughout the patch.
Agree, will do this.
>
> + return;
> + }
> +
> + if (fusion->pd_seq_sync[0])
> + goto skip_alloc;
> +
> + for (i = 0; i < 2; i++) {
>
> Magic number. See comment below.
>
> @@ -5510,10 +5594,16 @@ static void megasas_shutdown_controller(struct
> megasas_instance *instance,
>
> if (instance->aen_cmd)
> megasas_issue_blocked_abort_cmd(instance,
> - instance->aen_cmd, 30);
> + instance->aen_cmd,
> + MEGASAS_BLOCKED_CMD_TIMEOUT);
> if (instance->map_update_cmd)
> megasas_issue_blocked_abort_cmd(instance,
> - instance->map_update_cmd, 30);
> + instance->map_update_cmd,
> + MEGASAS_BLOCKED_CMD_TIMEOUT);
> + if (instance->jbod_seq_cmd)
> + megasas_issue_blocked_abort_cmd(instance,
> + instance->jbod_seq_cmd,
> + MEGASAS_BLOCKED_CMD_TIMEOUT);
> dcmd = &cmd->frame->dcmd;
>
> Nice cleanup but ideally those non-jbod timeouts would have been in a
separate
> patch. Please make sure your patches only do what they purport to do.
Agree, will create separate patch.
>
>
> memset(dcmd->mbox.b, 0, MFI_MBOX_SIZE); @@ -5648,6 +5738,7 @@
> megasas_resume(struct pci_dev *pdev)
> }
> if (!megasas_get_map_info(instance))
> megasas_sync_map_info(instance);
> +
> }
> break;
> default:
>
> Whitespace snafu.
Oops.. My bad. Will work on it.
>
> @@ -5781,6 +5874,9 @@ static void megasas_detach_one(struct pci_dev
> *pdev)
> case PCI_DEVICE_ID_LSI_INVADER:
> case PCI_DEVICE_ID_LSI_FURY:
> megasas_release_fusion(instance);
> + pd_seq_map_sz = sizeof(struct
> MR_PD_CFG_SEQ_NUM_SYNC) +
> + (sizeof(struct MR_PD_CFG_SEQ) *
> + (MAX_PHYSICAL_DEVICES - 1));
> for (i = 0; i < 2 ; i++) {
> if (fusion->ld_map[i])
> dma_free_coherent(&instance->pdev->dev,
>
> Minus one again.
Explained above.
>
> + pd_sync = (void *)fusion->pd_seq_sync[(instance->pd_seq_map_id &
> 1)];
> + pd_seq_h = fusion->pd_seq_phys[(instance->pd_seq_map_id & 1)];
> + pd_seq_map_sz = sizeof(struct MR_PD_CFG_SEQ_NUM_SYNC) +
> + (sizeof(struct MR_PD_CFG_SEQ) *
> + (MAX_PHYSICAL_DEVICES - 1));
>
> Patch description could do with a description of the data structures you
set up.
Had given high level description of what patch does. Will rework to
provide description of data structures used in patch as well.
>
>
> + /*Want to send all IO via FW path*/
>
> Comment needs spaces.
I will work on this.
>
> @@ -828,6 +844,8 @@ struct fusion_context {
> u32 current_map_sz;
> u32 drv_map_sz;
> u32 drv_map_pages;
> + struct MR_PD_CFG_SEQ_NUM_SYNC *pd_seq_sync[2];
> + dma_addr_t pd_seq_phys[2];
>
> Please define a suitable constant for 2 and use it in the code.
Sure, will use a suitable macro for 2 and resend patch.
>
> --
> Martin K. Petersen Oracle Linux Engineering
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html