RE: [bug report] scsi: megaraid_sas: Add the Support for SAS3.5 Generic Megaraid Controllers Capabilities
Hi Dan, I will fix the static checker warning Thanks sasi -Original Message- From: Dan Carpenter [mailto:dan.carpen...@oracle.com] Sent: Friday, January 13, 2017 7:51 AM To: sasikumar...@broadcom.com Cc: megaraidlinux@broadcom.com; linux-scsi@vger.kernel.org Subject: [bug report] scsi: megaraid_sas: Add the Support for SAS3.5 Generic Megaraid Controllers Capabilities Hello Sasikumar Chandrasekaran, This is a semi-automatic email about new static checker warnings. The patch 9581ebebbe35: "scsi: megaraid_sas: Add the Support for SAS3.5 Generic Megaraid Controllers Capabilities" from Jan 10, 2017, leads to the following Smatch complaint: drivers/scsi/megaraid/megaraid_sas_base.c:5245 megasas_init_fw() error: we previously assumed 'fusion' could be null (see line 5069) drivers/scsi/megaraid/megaraid_sas_base.c 5068 5069 if (fusion) ^^ Patch introduces a new NULL check. 5070 instance->instancet = _instance_template_fusion; 5071 else { 5072 switch (instance->pdev->device) { 5073 case PCI_DEVICE_ID_LSI_SAS1078R: 5074 case PCI_DEVICE_ID_LSI_SAS1078DE: 5075 instance->instancet = _instance_template_ppc; 5076 break; 5077 case PCI_DEVICE_ID_LSI_SAS1078GEN2: 5078 case PCI_DEVICE_ID_LSI_SAS0079GEN2: 5079 instance->instancet = _instance_template_gen2; 5080 break; 5081 case PCI_DEVICE_ID_LSI_SAS0073SKINNY: 5082 case PCI_DEVICE_ID_LSI_SAS0071SKINNY: 5083 instance->instancet = _instance_template_skinny; 5084 break; 5085 case PCI_DEVICE_ID_LSI_SAS1064R: 5086 case PCI_DEVICE_ID_DELL_PERC5: 5087 default: 5088 instance->instancet = _instance_template_xscale; 5089 instance->pd_list_not_supported = 1; 5090 break; 5091 } 5092 } 5093 5094 if (megasas_transition_to_ready(instance, 0)) { 5095 atomic_set(>fw_reset_no_pci_access, 1); 5096 instance->instancet->adp_reset 5097 (instance, instance->reg_set); 5098 atomic_set(>fw_reset_no_pci_access, 0); 5099 dev_info(>pdev->dev, 5100 "FW restarted successfully from %s!\n", 5101 __func__); 5102 5103 /*waitting for about 30 second before retry*/ 5104 ssleep(30); 5105 5106 if (megasas_transition_to_ready(instance, 0)) 5107 goto fail_ready_state; 5108 } 5109 5110 if (instance->is_ventura) { 5111 scratch_pad_3 = 5112 readl(>reg_set->outbound_scratch_pad_3); 5113 #if VD_EXT_DEBUG 5114 dev_info(>pdev->dev, "scratch_pad3 0x%x\n", 5115 scratch_pad_3); 5116 #endif 5117 instance->max_raid_mapsize = ((scratch_pad_3 >> 5118 MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT) & 5119 MR_MAX_RAID_MAP_SIZE_MASK); 5120 } 5121 5122 /* Check if MSI-X is supported while in ready state */ 5123 msix_enable = (instance->instancet->read_fw_status_reg(reg_set) & 5124 0x400) >> 0x1a; 5125 if (msix_enable && !msix_disable) { 5126 int irq_flags = PCI_IRQ_MSIX; 5127 5128 scratch_pad_2 = readl 5129 (>reg_set->outbound_scratch_pad_2); 5130 /* Check max MSI-X vectors */ 5131 if (fusion) { 5132 if (fusion->adapter_type == THUNDERBOLT_SERIES) { /* Thunderbolt Series*/ 5133 instance->msix_vectors = (scratch_pad_2 5134 & MR_MAX_REPLY_QUEUES_OFFSET) + 1; 5135 fw_msix_count = instance->msix_vectors; 5136 } else { /* Invader series supports more than 8 MSI-x vectors*/ 5137 instance->msix_vectors = ((scratch_pad_2 5138 & MR_MAX_REPLY_QUEUES_EXT_OFFSET) 5139 >> MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT) + 1; 5140 if (instance->msix_vectors > 16) 5141 instance->msix_combined = true; 5142 5143 if (rdpq_enable) 5144 instance->is_rdpq = (scratch_pad_2 & MR_RDPQ_MODE_OFFSET) ?
RE: [bug report] scsi: megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers
Hi Dan, I will fix the static checker warning Thanks sasi -Original Message- From: Dan Carpenter [mailto:dan.carpen...@oracle.com] Sent: Thursday, January 12, 2017 2:09 PM To: sasikumar...@broadcom.com; Tomas Henzl Cc: megaraidlinux@broadcom.com; linux-scsi@vger.kernel.org Subject: [bug report] scsi: megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers Hello Sasikumar Chandrasekaran, The patch d889344e4e59: "scsi: megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers" from Jan 10, 2017, leads to the following static checker warning: drivers/scsi/megaraid/megaraid_sas_fusion.c:2043 megasas_build_ldio_fusion() warn: curly braces intended? drivers/scsi/megaraid/megaraid_sas_fusion.c 2020 if (instance->is_ventura) { 2021 if (io_info.isRead) { 2022 if ((raid->cpuAffinity.pdRead.cpu0) && 2023 (raid->cpuAffinity.pdRead.cpu1)) 2024 praid_context->raid_context_g35.routing_flags.bits.cpu_sel 2025 = MR_RAID_CTX_CPUSEL_FCFS; 2026 else if (raid->cpuAffinity.pdRead.cpu1) 2027 praid_context->raid_context_g35.routing_flags.bits.cpu_sel 2028 = MR_RAID_CTX_CPUSEL_1; 2029 else 2030 praid_context->raid_context_g35.routing_flags.bits.cpu_sel 2031 = MR_RAID_CTX_CPUSEL_0; 2032 } else { 2033 if ((raid->cpuAffinity.pdWrite.cpu0) 2034 && (raid->cpuAffinity.pdWrite.cpu1)) 2035 praid_context->raid_context_g35.routing_flags.bits.cpu_sel 2036 = MR_RAID_CTX_CPUSEL_FCFS; 2037 else if (raid->cpuAffinity.pdWrite.cpu1) 2038 praid_context->raid_context_g35.routing_flags.bits.cpu_sel 2039 = MR_RAID_CTX_CPUSEL_1; 2040 else 2041 praid_context->raid_context_g35.routing_flags.bits.cpu_sel 2042 = MR_RAID_CTX_CPUSEL_0; 2043 if (praid_context->raid_context_g35.routing_flags.bits.sld) { 2044 praid_context->raid_context_g35.raid_flags 2045 = (MR_RAID_FLAGS_IO_SUB_TYPE_CACHE_BYPASS 2046 << MR_RAID_CTX_RAID_FLAGS_IO_SUB_TYPE_SHIFT); 2047 } 2048 } 2049 } 2050 } else { Wow... You guys are probably already discussed this code, but I'm not on the linux-scsi list. Do we have a process issue where we are merging code that we shouldn't be? What's going on here? regards, dan carpenter -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [bug report] scsi: megaraid_sas: SAS3.5 Generic Megaraid Controllers Stream Detection and IO Coalescing
Hi Dan, I will fix the static checker warning Thanks sasi -Original Message- From: Dan Carpenter [mailto:dan.carpen...@oracle.com] Sent: Thursday, January 12, 2017 1:50 PM To: sasikumar...@broadcom.com Cc: megaraidlinux@broadcom.com; linux-scsi@vger.kernel.org Subject: [bug report] scsi: megaraid_sas: SAS3.5 Generic Megaraid Controllers Stream Detection and IO Coalescing Hello Sasikumar Chandrasekaran, The patch fdd84e2514b0: "scsi: megaraid_sas: SAS3.5 Generic Megaraid Controllers Stream Detection and IO Coalescing" from Jan 10, 2017, leads to the following static checker warning: drivers/scsi/megaraid/megaraid_sas_fusion.c:1771 megasas_stream_detect() warn: inconsistent indenting drivers/scsi/megaraid/megaraid_sas_fusion.c 1747 static void megasas_stream_detect(struct megasas_instance *instance, 1748 struct megasas_cmd_fusion *cmd, 1749 struct IO_REQUEST_INFO *io_info) 1750 { 1751 struct fusion_context *fusion = instance->ctrl_context; 1752 u32 device_id = io_info->ldTgtId; 1753 struct LD_STREAM_DETECT *current_ld_sd 1754 = fusion->stream_detect_by_ld[device_id]; 1755 u32 *track_stream = _ld_sd->mru_bit_map, stream_num; 1756 u32 shifted_values, unshifted_values; 1757 u32 index_value_mask, shifted_values_mask; 1758 int i; 1759 bool is_read_ahead = false; 1760 struct STREAM_DETECT *current_sd; 1761 /* find possible stream */ 1762 for (i = 0; i < MAX_STREAMS_TRACKED; ++i) { 1763 stream_num = 1764 (*track_stream >> (i * BITS_PER_INDEX_STREAM)) & 1765 STREAM_MASK; 1766 current_sd = _ld_sd->stream_track[stream_num]; 1767 /* if we found a stream, update the raid 1768 * context and also update the mruBitMap 1769 */ 1770 /* boundary condition */ 1771 if ((current_sd->next_seq_lba) && We're still inside the for loop. This isn't indented far enough. 1772 (io_info->ldStartBlock >= current_sd->next_seq_lba) && 1773 (io_info->ldStartBlock <= (current_sd->next_seq_lba+32)) && 1774 (current_sd->is_read == io_info->isRead)) { 1775 1776 if ((io_info->ldStartBlock != current_sd->next_seq_lba) 1777 && ((!io_info->isRead) || (!is_read_ahead))) 1778 /* 1779 * Once the API availible we need to change this. 1780 * At this point we are not allowing any gap 1781 */ 1782 continue; 1783 1784 cmd->io_request->RaidContext.raid_context_g35.stream_detected = true; 1785 current_sd->next_seq_lba = 1786 io_info->ldStartBlock + io_info->numBlocks; 1787 /* 1788 * update the mruBitMap LRU 1789 */ See also: drivers/scsi/megaraid/megaraid_sas_base.c:5396 megasas_init_fw() warn: inconsistent indenting drivers/scsi/megaraid/megaraid_sas_fusion.c:4060 megasas_reset_fusion() warn: inconsistent indenting regards, dan carpenter -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers
-Original Message- From: Tomas Henzl [mailto:the...@redhat.com] Sent: Tuesday, December 20, 2016 9:20 AM To: Sasikumar PC; j...@kernel.org; h...@infradead.org Cc: linux-scsi@vger.kernel.org; Sathya Prakash Veerichetty; linux-ker...@vger.kernel.org; Christopher Owens; Kiran Kumar Kasturi Subject: Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers On 20.12.2016 02:51, Sasikumar PC wrote: > Hi Tomas, > > Please see my response inline > > Thanks > sasi > > -Original Message----- > From: Sasikumar PC [mailto:sasikumar...@broadcom.com] > Sent: Wednesday, December 14, 2016 4:49 PM > To: 'Tomas Henzl'; 'j...@kernel.org'; 'h...@infradead.org' > Cc: 'linux-scsi@vger.kernel.org'; Sathya Prakash Veerichetty; > 'linux-ker...@vger.kernel.org'; Christopher Owens; Kiran Kumar Kasturi > Subject: RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for > SAS3.5 Generic Megaraid Controllers > > Hi Tomas, > > Please see my response inline > > Thanks > sasi > > -Original Message- > From: Tomas Henzl [mailto:the...@redhat.com] > Sent: Friday, December 09, 2016 7:55 AM > To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org > Cc: linux-scsi@vger.kernel.org; sathya.prak...@broadcom.com; > linux-ker...@vger.kernel.org; christopher.ow...@broadcom.com; > kiran-kumar.kast...@broadcom.com > Subject: Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for > SAS3.5 Generic Megaraid Controllers > > On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: >> SAS3.5 Generic Megaraid Controllers FW will support new dynamic RaidMap > to have different >> sizes for different number of supported VDs. >> >> This patch is depending on patch 5 >> >> Signed-off-by: Sasikumar Chandrasekaran <sasikumar...@broadcom.com> >> --- >> drivers/scsi/megaraid/megaraid_sas.h| 7 + >> drivers/scsi/megaraid/megaraid_sas_base.c | 61 -- >> drivers/scsi/megaraid/megaraid_sas_fp.c | 303 > >> drivers/scsi/megaraid/megaraid_sas_fusion.c | 223 >> drivers/scsi/megaraid/megaraid_sas_fusion.h | 240 > ++ >> 5 files changed, 699 insertions(+), 135 deletions(-) >> >> diff --git a/drivers/scsi/megaraid/megaraid_sas.h > b/drivers/scsi/megaraid/megaraid_sas.h >> index f4d6a94..3e087ab 100644 >> --- a/drivers/scsi/megaraid/megaraid_sas.h >> +++ b/drivers/scsi/megaraid/megaraid_sas.h >> @@ -1434,6 +1434,12 @@ enum FW_BOOT_CONTEXT { >> #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 >> #define MR_MAX_MSIX_REG_ARRAY 16 >> #define MR_RDPQ_MODE_OFFSET 0X0080 >> + >> +#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT 16 >> +#define MR_MAX_RAID_MAP_SIZE_MASK 0x1FF >> +#define MR_MIN_MAP_SIZE 0x1 >> +/* 64k */ >> + >> #define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X0100 >> >> /* >> @@ -2152,6 +2158,7 @@ struct megasas_instance { >> bool fw_sync_cache_support; >> bool is_ventura; >> bool msix_combined; >> +u16 max_raid_mapsize; >> }; >> struct MR_LD_VF_MAP { >> u32 size; >> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c > b/drivers/scsi/megaraid/megaraid_sas_base.c >> index c52f7be..3f06b57 100644 >> --- a/drivers/scsi/megaraid/megaraid_sas_base.c >> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c >> @@ -4424,8 +4424,7 @@ int megasas_alloc_cmds(struct megasas_instance > *instance) >> static void megasas_update_ext_vd_details(struct megasas_instance > *instance) >> { >> struct fusion_context *fusion; >> -u32 old_map_sz; >> -u32 new_map_sz; >> +u32 ventura_map_sz = 0; >> >> fusion = instance->ctrl_context; >> /* For MFI based controllers return dummy success */ >> @@ -4455,21 +4454,39 @@ static void megasas_update_ext_vd_details(struct > megasas_instance *instance) >> instance->supportmax256vd ? "Extended VD(240 VD)firmware" > : >> "Legacy(64 VD) firmware"); >> >> -old_map_sz = sizeof(struct MR_FW_RAID_MAP) + >> -(sizeof(struct MR_LD_SPAN_MAP) * >> -(instance->fw_supported_vd_count - 1)); >> -new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); >> -fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) + >> -(sizeof(struct MR_LD_SPAN_MAP) * >> -
RE: [PATCH V4 08/11] megaraid_sas: Enable or Disable Fast path based on the PCI Threshold Bandwidth
Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Tomas Henzl [mailto:the...@redhat.com] Sent: Thursday, December 15, 2016 10:10 AM To: Sasikumar PC; j...@kernel.org; h...@infradead.org Cc: linux-scsi@vger.kernel.org; Sathya Prakash Veerichetty; linux-ker...@vger.kernel.org; Christopher Owens; Kiran Kumar Kasturi Subject: Re: [PATCH V4 08/11] megaraid_sas: Enable or Disable Fast path based on the PCI Threshold Bandwidth On 14.12.2016 22:54, Sasikumar PC wrote: > Hi Tomas, > > Please see my response inline > > Thanks > sasi > > -Original Message- > From: Tomas Henzl [mailto:the...@redhat.com] > Sent: Friday, December 09, 2016 8:59 AM > To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org > Cc: linux-scsi@vger.kernel.org; sathya.prak...@broadcom.com; > linux-ker...@vger.kernel.org; christopher.ow...@broadcom.com; > kiran-kumar.kast...@broadcom.com > Subject: Re: [PATCH V4 08/11] megaraid_sas: Enable or Disable Fast > path based on the PCI Threshold Bandwidth > > On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: >> Large SEQ IO workload should sent as non fast path commands >> >> This patch is depending on patch 7 >> >> Signed-off-by: Sasikumar Chandrasekaran <sasikumar...@broadcom.com> >> --- >> drivers/scsi/megaraid/megaraid_sas.h| 8 + >> drivers/scsi/megaraid/megaraid_sas_base.c | 48 > + >> drivers/scsi/megaraid/megaraid_sas_fp.c | 11 +-- >> drivers/scsi/megaraid/megaraid_sas_fusion.c | 20 +++- >> drivers/scsi/megaraid/megaraid_sas_fusion.h | 2 +- >> 5 files changed, 78 insertions(+), 11 deletions(-) >> >> diff --git a/drivers/scsi/megaraid/megaraid_sas.h >> b/drivers/scsi/megaraid/megaraid_sas.h >> index 3e087ab..eb5be2b 100644 >> --- a/drivers/scsi/megaraid/megaraid_sas.h >> +++ b/drivers/scsi/megaraid/megaraid_sas.h >> @@ -1429,6 +1429,8 @@ enum FW_BOOT_CONTEXT { >> #define MFI_1068_FW_HANDSHAKE_OFFSET0x64 >> #define MFI_1068_FW_READY 0x >> >> +#define MEGASAS_RAID1_FAST_PATH_STATUS_CHECK_INTERVAL HZ >> + >> #define MR_MAX_REPLY_QUEUES_OFFSET 0X001F >> #define MR_MAX_REPLY_QUEUES_EXT_OFFSET 0X003FC000 >> #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 >> @@ -2101,6 +2103,10 @@ struct megasas_instance { >> atomic_t ldio_outstanding; >> atomic_t fw_reset_no_pci_access; >> >> +atomic64_t bytes_wrote; /* used for raid1 fast path enable or > disable */ >> +atomic_t r1_write_fp_capable; > Is a an atomic variable needed for a just boolean variable? > Sasi - As we need to synchronize timer thread and IO issue threads, > With atomic, at any point of time the value will be definitive. > With boolean, it depends, the value could be in transit while one > thread is reading and other is writing. This explanation is I think not good enough, as a write of a char value is atomic on all architectures. If you need synchronisation you probably need a spinlock. Tomash boolean may not be a char in all architectures/implementations. It could be implementation specific isn't it ? Spin_Lock is heavier as the check is in IO path.We need it to be consistent non-transient value, not an exact synchronization. There could be more values that we may set this variable to, to make different decisions and value can be set in more places in future. Atomic will help it keep consistent and extensible. sasi > >> + >> + >> struct megasas_instance_template *instancet; >> struct tasklet_struct isr_tasklet; >> struct work_struct work_init; >> @@ -2143,6 +2149,7 @@ struct megasas_instance { >> long reset_flags; >> struct mutex reset_mutex; >> struct timer_list sriov_heartbeat_timer; >> +struct timer_list r1_fp_hold_timer; >> char skip_heartbeat_timer_del; >> u8 requestorId; >> char PlasmaFW111; >> @@ -2159,6 +2166,7 @@ struct megasas_instance { >> bool is_ventura; >> bool msix_combined; >> u16 max_raid_mapsize; >> +u64 pci_threshold_bandwidth; /* used to control the fp writes */ >> }; >> struct MR_LD_VF_MAP { >> u32 size; >> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c >> b/drivers/scsi/megaraid/megaraid_sas_base.c >> index 8aafb59..899d25c 100644 >> --- a/drivers/scsi/megaraid/megaraid_sas_base.c >> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c >> @@ -1940,6 +1940,9 @@ void megaraid_sas_kill_hba(struct >> megasas_instance > *instance) >> } >> /* Complete outstanding
RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers
Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Sasikumar PC [mailto:sasikumar...@broadcom.com] Sent: Wednesday, December 14, 2016 4:49 PM To: 'Tomas Henzl'; 'j...@kernel.org'; 'h...@infradead.org' Cc: 'linux-scsi@vger.kernel.org'; Sathya Prakash Veerichetty; 'linux-ker...@vger.kernel.org'; Christopher Owens; Kiran Kumar Kasturi Subject: RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Tomas Henzl [mailto:the...@redhat.com] Sent: Friday, December 09, 2016 7:55 AM To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org Cc: linux-scsi@vger.kernel.org; sathya.prak...@broadcom.com; linux-ker...@vger.kernel.org; christopher.ow...@broadcom.com; kiran-kumar.kast...@broadcom.com Subject: Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: > SAS3.5 Generic Megaraid Controllers FW will support new dynamic RaidMap to have different > sizes for different number of supported VDs. > > This patch is depending on patch 5 > > Signed-off-by: Sasikumar Chandrasekaran <sasikumar...@broadcom.com> > --- > drivers/scsi/megaraid/megaraid_sas.h| 7 + > drivers/scsi/megaraid/megaraid_sas_base.c | 61 -- > drivers/scsi/megaraid/megaraid_sas_fp.c | 303 > drivers/scsi/megaraid/megaraid_sas_fusion.c | 223 > drivers/scsi/megaraid/megaraid_sas_fusion.h | 240 ++ > 5 files changed, 699 insertions(+), 135 deletions(-) > > diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h > index f4d6a94..3e087ab 100644 > --- a/drivers/scsi/megaraid/megaraid_sas.h > +++ b/drivers/scsi/megaraid/megaraid_sas.h > @@ -1434,6 +1434,12 @@ enum FW_BOOT_CONTEXT { > #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 > #define MR_MAX_MSIX_REG_ARRAY 16 > #define MR_RDPQ_MODE_OFFSET 0X0080 > + > +#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT16 > +#define MR_MAX_RAID_MAP_SIZE_MASK0x1FF > +#define MR_MIN_MAP_SIZE 0x1 > +/* 64k */ > + > #define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X0100 > > /* > @@ -2152,6 +2158,7 @@ struct megasas_instance { > bool fw_sync_cache_support; > bool is_ventura; > bool msix_combined; > + u16 max_raid_mapsize; > }; > struct MR_LD_VF_MAP { > u32 size; > diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c > index c52f7be..3f06b57 100644 > --- a/drivers/scsi/megaraid/megaraid_sas_base.c > +++ b/drivers/scsi/megaraid/megaraid_sas_base.c > @@ -4424,8 +4424,7 @@ int megasas_alloc_cmds(struct megasas_instance *instance) > static void megasas_update_ext_vd_details(struct megasas_instance *instance) > { > struct fusion_context *fusion; > - u32 old_map_sz; > - u32 new_map_sz; > + u32 ventura_map_sz = 0; > > fusion = instance->ctrl_context; > /* For MFI based controllers return dummy success */ > @@ -4455,21 +4454,39 @@ static void megasas_update_ext_vd_details(struct megasas_instance *instance) > instance->supportmax256vd ? "Extended VD(240 VD)firmware" : > "Legacy(64 VD) firmware"); > > - old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->fw_supported_vd_count - 1)); > - new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > - fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->drv_supported_vd_count - 1)); > - > - fusion->max_map_sz = max(old_map_sz, new_map_sz); > + if (instance->max_raid_mapsize) { > + ventura_map_sz = instance->max_raid_mapsize * > + MR_MIN_MAP_SIZE; /* 64k */ > + fusion->current_map_sz = ventura_map_sz; > + fusion->max_map_sz = ventura_map_sz; > + } else { > + fusion->old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > + (sizeof(struct MR_LD_SPAN_MAP) * > + (instance->fw_supported_vd_count - 1)); > + fusion->new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > > + fusion->max_map_sz = > + max(fusion->old_map_sz, fusion->new_map_sz); > > -
RE: [PATCH V4 02/11] megaraid_sas: 128 MSIX Support
Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Sasikumar PC [mailto:sasikumar...@broadcom.com] Sent: Wednesday, December 14, 2016 4:43 PM To: 'Tomas Henzl'; 'j...@kernel.org'; 'h...@infradead.org' Cc: 'linux-scsi@vger.kernel.org'; Sathya Prakash Veerichetty; 'linux-ker...@vger.kernel.org'; Christopher Owens; Kiran Kumar Kasturi Subject: RE: [PATCH V4 02/11] megaraid_sas: 128 MSIX Support Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Tomas Henzl [mailto:the...@redhat.com] Sent: Thursday, December 08, 2016 10:35 AM To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org Cc: linux-scsi@vger.kernel.org; sathya.prak...@broadcom.com; linux-ker...@vger.kernel.org; christopher.ow...@broadcom.com; kiran-kumar.kast...@broadcom.com Subject: Re: [PATCH V4 02/11] megaraid_sas: 128 MSIX Support On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: > SAS3.5 Generic Megaraid based Controllers will have the support for > 128 MSI-X vectors, resulting in the need to support 128 reply queues > > This patch is depending on patch 1 > > Signed-off-by: Sasikumar Chandrasekaran <sasikumar...@broadcom.com> > --- > drivers/scsi/megaraid/megaraid_sas.h| 1 + > drivers/scsi/megaraid/megaraid_sas_base.c | 24 +--- > drivers/scsi/megaraid/megaraid_sas_fusion.c | 4 ++-- > 3 files changed, 20 insertions(+), 9 deletions(-) > > diff --git a/drivers/scsi/megaraid/megaraid_sas.h > b/drivers/scsi/megaraid/megaraid_sas.h > index 72e16c2..9d4ca8d 100644 > --- a/drivers/scsi/megaraid/megaraid_sas.h > +++ b/drivers/scsi/megaraid/megaraid_sas.h > @@ -2149,6 +2149,7 @@ struct megasas_instance { > bool dev_handle; > bool fw_sync_cache_support; > bool is_ventura; > + bool msix_combined; > }; > struct MR_LD_VF_MAP { > u32 size; > diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c > b/drivers/scsi/megaraid/megaraid_sas_base.c > index efccf98..c583e0b 100644 > --- a/drivers/scsi/megaraid/megaraid_sas_base.c > +++ b/drivers/scsi/megaraid/megaraid_sas_base.c > @@ -5086,13 +5086,7 @@ static int megasas_init_fw(struct megasas_instance *instance) > goto fail_ready_state; > } > > - /* > - * MSI-X host index 0 is common for all adapter. > - * It is used for all MPT based Adapters. > - */ > - instance->reply_post_host_index_addr[0] = > - (u32 __iomem *)((u8 __iomem *)instance->reg_set + > - MPI2_REPLY_POST_HOST_INDEX_OFFSET); > + > > /* Check if MSI-X is supported while in ready state */ > msix_enable = (instance->instancet->read_fw_status_reg(reg_set) & @@ > -5110,6 +5104,9 @@ static int megasas_init_fw(struct megasas_instance *instance) > instance->msix_vectors = ((scratch_pad_2 > & MR_MAX_REPLY_QUEUES_EXT_OFFSET) > >> MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT) + 1; > + if (instance->msix_vectors > 16) > + instance->msix_combined = true; > + > if (rdpq_enable) > instance->is_rdpq = (scratch_pad_2 & MR_RDPQ_MODE_OFFSET) ? > 1 : 0; > @@ -5143,6 +5140,19 @@ static int megasas_init_fw(struct megasas_instance *instance) > else > instance->msix_vectors = 0; > } Have you tested this patch with the pci=nomsi kernel option? Sasi - Driver is tested with pci=nomsi option and looking good is it safe when msix_combined is true and pci_enable_msix_range fails so instance->msix_vectors is zero? msix_combined mode is dependent on how many vectors adapter supports, not the actual vectors used. It is correct to be in combined mode even if actual number of msix_vectors used are fewer than 16, if hardware is in combined mode Sasi tomash > + /* > + * MSI-X host index 0 is common for all adapter. > + * It is used for all MPT based Adapters. > + */ > + if (instance->msix_combined) { > + instance->reply_post_host_index_addr[0] = > + (u32 *)((u8 *)instance->reg_set + > + MPI2_SUP_REPLY_POST_HOST_INDEX_OFFSET); > + } else { > + instance->reply_post_host_index_addr[0] = > + (u32 *)((u8 *)instance->reg_set + > + MPI2_REPLY_POST_HOST_INDEX_OFFSET); > + } > > dev_info(>pdev->dev, > "firmware supports msix\t: (%d)", fw_msix_coun
RE: [PATCH V4 04/11] megaraid_sas: SAS3.5 Generic Megaraid Controllers Stream Detection and IO Coalescing
Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Tomas Henzl [mailto:the...@redhat.com] Sent: Monday, December 12, 2016 11:39 AM To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org Cc: linux-scsi@vger.kernel.org; sathya.prak...@broadcom.com; linux-ker...@vger.kernel.org; christopher.ow...@broadcom.com; kiran-kumar.kast...@broadcom.com Subject: Re: [PATCH V4 04/11] megaraid_sas: SAS3.5 Generic Megaraid Controllers Stream Detection and IO Coalescing On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: > Detect sequential IO streams and pass those IOs directly to FW. > > This patch is depending on patch 3 > > Signed-off-by: Sasikumar Chandrasekaran> --- > drivers/scsi/megaraid/megaraid_sas.h| 5 +- > drivers/scsi/megaraid/megaraid_sas_base.c | 43 +++- > drivers/scsi/megaraid/megaraid_sas_fp.c | 2 + > drivers/scsi/megaraid/megaraid_sas_fusion.c | 164 > +++- > drivers/scsi/megaraid/megaraid_sas_fusion.h | 117 +++- > 5 files changed, 298 insertions(+), 33 deletions(-) > > diff --git a/drivers/scsi/megaraid/megaraid_sas.h > b/drivers/scsi/megaraid/megaraid_sas.h > index 9d4ca8d..d07b3e1 100644 > --- a/drivers/scsi/megaraid/megaraid_sas.h > +++ b/drivers/scsi/megaraid/megaraid_sas.h > @@ -105,7 +105,7 @@ > */ > > /* > - * MFI stands for MegaRAID SAS FW Interface. This is just a moniker > for > + * MFI stands for MegaRAID SAS FW Interface. This is just a moniker > + for > * protocol between the software and firmware. Commands are issued using > * "message frames" > */ > @@ -1440,7 +1440,7 @@ enum FW_BOOT_CONTEXT { > * register set for both 1068 and 1078 controllers > * structure extended for 1078 registers */ > - > + > struct megasas_register_set { > u32 doorbell; /*h*/ > u32 fusion_seq_offset; /*0004h*/ > @@ -2070,6 +2070,7 @@ struct megasas_instance { > /* used to sync fire the cmd to fw */ > spinlock_t hba_lock; > /* used to synch producer, consumer ptrs in dpc */ > + spinlock_t stream_lock; > spinlock_t completion_lock; > struct dma_pool *frame_dma_pool; > struct dma_pool *sense_dma_pool; > diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c > b/drivers/scsi/megaraid/megaraid_sas_base.c > index c583e0b..c52f7be 100644 > --- a/drivers/scsi/megaraid/megaraid_sas_base.c > +++ b/drivers/scsi/megaraid/megaraid_sas_base.c > @@ -5015,7 +5015,7 @@ static int megasas_init_fw(struct megasas_instance > *instance) > struct megasas_register_set __iomem *reg_set; > struct megasas_ctrl_info *ctrl_info = NULL; > unsigned long bar_list; > - int i, loop, fw_msix_count = 0; > + int i, j, loop, fw_msix_count = 0; > struct IOV_111 *iovPtr; > struct fusion_context *fusion; > > @@ -5202,6 +5202,36 @@ static int megasas_init_fw(struct megasas_instance > *instance) > } > > memset(instance->ld_ids, 0xff, MEGASAS_MAX_LD_IDS); > + > + /* stream detection initialization */ > + if (instance->is_ventura) { > + fusion->stream_detect_by_ld = > + kzalloc(sizeof(struct LD_STREAM_DETECT *) > + * MAX_LOGICAL_DRIVES_EXT, > + GFP_KERNEL); > + if (!fusion->stream_detect_by_ld) { > + dev_err(>pdev->dev, > + "unable to allocate stream detection > for pool of LDs\n"); > + goto fail_get_ld_pd_list; > + } > + for (i = 0; i < MAX_LOGICAL_DRIVES_EXT; ++i) { > + fusion->stream_detect_by_ld[i] = > + kmalloc(sizeof(struct LD_STREAM_DETECT), > + GFP_KERNEL); > + if (!fusion->stream_detect_by_ld[i]) { > + dev_err(>pdev->dev, > + "unable to allocate stream detect by > LD\n "); > + for (j = 0; j < i; ++j) > + kfree(fusion->stream_detect_by_ld[j]); > + kfree(fusion->stream_detect_by_ld); > + fusion->stream_detect_by_ld = NULL; > + goto fail_get_ld_pd_list; > + } > + fusion->stream_detect_by_ld[i]->mru_bit_map > + = MR_STREAM_BITMAP; > + } > + } > + > if (megasas_ld_list_query(instance, > MR_LD_QUERY_TYPE_EXPOSED_TO_HOST)) > megasas_get_ld_list(instance); > @@ -5321,6 +5351,8 @@ static int megasas_init_fw(struct > megasas_instance *instance) > > return 0; > > +fail_get_ld_pd_list: > + instance->instancet->disable_intr(instance); > fail_get_pd_list: > instance->instancet->disable_intr(instance); > megasas_destroy_irqs(instance); >
RE: [PATCH V4 08/11] megaraid_sas: Enable or Disable Fast path based on the PCI Threshold Bandwidth
Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Tomas Henzl [mailto:the...@redhat.com] Sent: Friday, December 09, 2016 8:59 AM To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org Cc: linux-scsi@vger.kernel.org; sathya.prak...@broadcom.com; linux-ker...@vger.kernel.org; christopher.ow...@broadcom.com; kiran-kumar.kast...@broadcom.com Subject: Re: [PATCH V4 08/11] megaraid_sas: Enable or Disable Fast path based on the PCI Threshold Bandwidth On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: > Large SEQ IO workload should sent as non fast path commands > > This patch is depending on patch 7 > > Signed-off-by: Sasikumar Chandrasekaran> --- > drivers/scsi/megaraid/megaraid_sas.h| 8 + > drivers/scsi/megaraid/megaraid_sas_base.c | 48 + > drivers/scsi/megaraid/megaraid_sas_fp.c | 11 +-- > drivers/scsi/megaraid/megaraid_sas_fusion.c | 20 +++- > drivers/scsi/megaraid/megaraid_sas_fusion.h | 2 +- > 5 files changed, 78 insertions(+), 11 deletions(-) > > diff --git a/drivers/scsi/megaraid/megaraid_sas.h > b/drivers/scsi/megaraid/megaraid_sas.h > index 3e087ab..eb5be2b 100644 > --- a/drivers/scsi/megaraid/megaraid_sas.h > +++ b/drivers/scsi/megaraid/megaraid_sas.h > @@ -1429,6 +1429,8 @@ enum FW_BOOT_CONTEXT { > #define MFI_1068_FW_HANDSHAKE_OFFSET 0x64 > #define MFI_1068_FW_READY0x > > +#define MEGASAS_RAID1_FAST_PATH_STATUS_CHECK_INTERVAL HZ > + > #define MR_MAX_REPLY_QUEUES_OFFSET 0X001F > #define MR_MAX_REPLY_QUEUES_EXT_OFFSET 0X003FC000 > #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 > @@ -2101,6 +2103,10 @@ struct megasas_instance { > atomic_t ldio_outstanding; > atomic_t fw_reset_no_pci_access; > > + atomic64_t bytes_wrote; /* used for raid1 fast path enable or disable */ > + atomic_t r1_write_fp_capable; Is a an atomic variable needed for a just boolean variable? Sasi - As we need to synchronize timer thread and IO issue threads, With atomic, at any point of time the value will be definitive. With boolean, it depends, the value could be in transit while one thread is reading and other is writing. > + > + > struct megasas_instance_template *instancet; > struct tasklet_struct isr_tasklet; > struct work_struct work_init; > @@ -2143,6 +2149,7 @@ struct megasas_instance { > long reset_flags; > struct mutex reset_mutex; > struct timer_list sriov_heartbeat_timer; > + struct timer_list r1_fp_hold_timer; > char skip_heartbeat_timer_del; > u8 requestorId; > char PlasmaFW111; > @@ -2159,6 +2166,7 @@ struct megasas_instance { > bool is_ventura; > bool msix_combined; > u16 max_raid_mapsize; > + u64 pci_threshold_bandwidth; /* used to control the fp writes */ > }; > struct MR_LD_VF_MAP { > u32 size; > diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c > b/drivers/scsi/megaraid/megaraid_sas_base.c > index 8aafb59..899d25c 100644 > --- a/drivers/scsi/megaraid/megaraid_sas_base.c > +++ b/drivers/scsi/megaraid/megaraid_sas_base.c > @@ -1940,6 +1940,9 @@ void megaraid_sas_kill_hba(struct megasas_instance *instance) > } > /* Complete outstanding ioctls when adapter is killed */ > megasas_complete_outstanding_ioctls(instance); > + if (instance->is_ventura) > + del_timer_sync(>r1_fp_hold_timer); > + > } > > /** > @@ -2438,6 +2441,24 @@ void megasas_sriov_heartbeat_handler(unsigned long instance_addr) > } > } > > +/*Handler for disabling/enabling raid 1 fast paths*/ void > +megasas_change_r1_fp_status(unsigned long instance_addr) { > + struct megasas_instance *instance = > + (struct megasas_instance *)instance_addr; > + if (atomic64_read(>bytes_wrote) >= > + instance->pci_threshold_bandwidth) { > + > + atomic64_set(>bytes_wrote, 0); > + atomic_set(>r1_write_fp_capable, 0); > + } else { > + atomic64_set(>bytes_wrote, 0); > + atomic_set(>r1_write_fp_capable, 1); > + } > + mod_timer(>r1_fp_hold_timer, > + jiffies + MEGASAS_RAID1_FAST_PATH_STATUS_CHECK_INTERVAL); > +} > + > /** > * megasas_wait_for_outstanding -Wait for all outstanding cmds > * @instance:Adapter soft state > @@ -5371,6 +5392,17 @@ static int megasas_init_fw(struct megasas_instance *instance) > instance->skip_heartbeat_timer_del = 1; > } > > + if (instance->is_ventura) { > + atomic64_set(>bytes_wrote, 0); > + atomic_set(>r1_write_fp_capable, 1); > + megasas_start_timer(instance, > + >r1_fp_hold_timer, > + megasas_change_r1_fp_status, > + MEGASAS_RAID1_FAST_PATH_STATUS_CHECK_INTERVAL); > +
RE: [PATCH V4 07/11] megaraid_sas: Add the Support for SAS3.5 Generic Megaraid Controllers Capabilities
Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Tomas Henzl [mailto:the...@redhat.com] Sent: Friday, December 09, 2016 8:14 AM To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org Cc: linux-scsi@vger.kernel.org; sathya.prak...@broadcom.com; linux-ker...@vger.kernel.org; christopher.ow...@broadcom.com; kiran-kumar.kast...@broadcom.com Subject: Re: [PATCH V4 07/11] megaraid_sas: Add the Support for SAS3.5 Generic Megaraid Controllers Capabilities On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: > The Megaraid driver has to support the SAS3.5 Generic Megaraid Controllers Firmware functionality. > > This patch is depending on patch 6 > > Signed-off-by: Sasikumar Chandrasekaran> --- > drivers/scsi/megaraid/megaraid_sas_base.c | 53 ++--- > drivers/scsi/megaraid/megaraid_sas_fusion.c | 19 ++- > drivers/scsi/megaraid/megaraid_sas_fusion.h | 1 + > 3 files changed, 37 insertions(+), 36 deletions(-) > > diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c > b/drivers/scsi/megaraid/megaraid_sas_base.c > index 3f06b57..8aafb59 100644 > --- a/drivers/scsi/megaraid/megaraid_sas_base.c > +++ b/drivers/scsi/megaraid/megaraid_sas_base.c > @@ -5057,34 +5057,29 @@ static int megasas_init_fw(struct > megasas_instance *instance) > > reg_set = instance->reg_set; > > - switch (instance->pdev->device) { > - case PCI_DEVICE_ID_LSI_FUSION: > - case PCI_DEVICE_ID_LSI_PLASMA: > - case PCI_DEVICE_ID_LSI_INVADER: > - case PCI_DEVICE_ID_LSI_FURY: > - case PCI_DEVICE_ID_LSI_INTRUDER: > - case PCI_DEVICE_ID_LSI_INTRUDER_24: > - case PCI_DEVICE_ID_LSI_CUTLASS_52: > - case PCI_DEVICE_ID_LSI_CUTLASS_53: > + if (fusion) > instance->instancet = _instance_template_fusion; > - break; > - case PCI_DEVICE_ID_LSI_SAS1078R: > - case PCI_DEVICE_ID_LSI_SAS1078DE: > - instance->instancet = _instance_template_ppc; > - break; > - case PCI_DEVICE_ID_LSI_SAS1078GEN2: > - case PCI_DEVICE_ID_LSI_SAS0079GEN2: > - instance->instancet = _instance_template_gen2; > - break; > - case PCI_DEVICE_ID_LSI_SAS0073SKINNY: > - case PCI_DEVICE_ID_LSI_SAS0071SKINNY: > - instance->instancet = _instance_template_skinny; > - break; > - case PCI_DEVICE_ID_LSI_SAS1064R: > - case PCI_DEVICE_ID_DELL_PERC5: > - default: > - instance->instancet = _instance_template_xscale; > - break; > + else { > + switch (instance->pdev->device) { > + case PCI_DEVICE_ID_LSI_SAS1078R: > + case PCI_DEVICE_ID_LSI_SAS1078DE: > + instance->instancet = _instance_template_ppc; > + break; > + case PCI_DEVICE_ID_LSI_SAS1078GEN2: > + case PCI_DEVICE_ID_LSI_SAS0079GEN2: > + instance->instancet = _instance_template_gen2; > + break; > + case PCI_DEVICE_ID_LSI_SAS0073SKINNY: > + case PCI_DEVICE_ID_LSI_SAS0071SKINNY: > + instance->instancet = _instance_template_skinny; > + break; > + case PCI_DEVICE_ID_LSI_SAS1064R: > + case PCI_DEVICE_ID_DELL_PERC5: > + default: > + instance->instancet = _instance_template_xscale; > + instance->pd_list_not_supported = 1; > + break; > + } > } > > if (megasas_transition_to_ready(instance, 0)) { @@ -5828,7 +5823,9 > @@ static int megasas_probe_one(struct pci_dev *pdev, > if ((instance->pdev->device == PCI_DEVICE_ID_LSI_FUSION) || > (instance->pdev->device == PCI_DEVICE_ID_LSI_PLASMA)) > fusion->adapter_type = THUNDERBOLT_SERIES; > - else if (!instance->is_ventura) > + else if (instance->is_ventura) > + fusion->adapter_type = VENTURA_SERIES; > + else > fusion->adapter_type = INVADER_SERIES; > } > break; > diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c > b/drivers/scsi/megaraid/megaraid_sas_fusion.c > index 58f86aa..f968a23 100644 > --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c > +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c > @@ -244,7 +244,10 @@ inline void megasas_return_cmd_fusion(struct > megasas_instance *instance, > > reg_set = instance->reg_set; > > - cur_max_fw_cmds = readl(>reg_set->outbound_scratch_pad_3) & 0x00; > + /* ventura FW does not fill outbound_scratch_pad_3 with queue depth */ > + if (!instance->is_ventura) > + cur_max_fw_cmds = > + readl(>reg_set->outbound_scratch_pad_3) & 0x00; > > if (dual_qdepth_disable || !cur_max_fw_cmds) This test connected with the fact that ventura skips reading
RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers
Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Tomas Henzl [mailto:the...@redhat.com] Sent: Friday, December 09, 2016 7:55 AM To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org Cc: linux-scsi@vger.kernel.org; sathya.prak...@broadcom.com; linux-ker...@vger.kernel.org; christopher.ow...@broadcom.com; kiran-kumar.kast...@broadcom.com Subject: Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: > SAS3.5 Generic Megaraid Controllers FW will support new dynamic RaidMap to have different > sizes for different number of supported VDs. > > This patch is depending on patch 5 > > Signed-off-by: Sasikumar Chandrasekaran> --- > drivers/scsi/megaraid/megaraid_sas.h| 7 + > drivers/scsi/megaraid/megaraid_sas_base.c | 61 -- > drivers/scsi/megaraid/megaraid_sas_fp.c | 303 > drivers/scsi/megaraid/megaraid_sas_fusion.c | 223 > drivers/scsi/megaraid/megaraid_sas_fusion.h | 240 ++ > 5 files changed, 699 insertions(+), 135 deletions(-) > > diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h > index f4d6a94..3e087ab 100644 > --- a/drivers/scsi/megaraid/megaraid_sas.h > +++ b/drivers/scsi/megaraid/megaraid_sas.h > @@ -1434,6 +1434,12 @@ enum FW_BOOT_CONTEXT { > #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 > #define MR_MAX_MSIX_REG_ARRAY 16 > #define MR_RDPQ_MODE_OFFSET 0X0080 > + > +#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT16 > +#define MR_MAX_RAID_MAP_SIZE_MASK0x1FF > +#define MR_MIN_MAP_SIZE 0x1 > +/* 64k */ > + > #define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X0100 > > /* > @@ -2152,6 +2158,7 @@ struct megasas_instance { > bool fw_sync_cache_support; > bool is_ventura; > bool msix_combined; > + u16 max_raid_mapsize; > }; > struct MR_LD_VF_MAP { > u32 size; > diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c > index c52f7be..3f06b57 100644 > --- a/drivers/scsi/megaraid/megaraid_sas_base.c > +++ b/drivers/scsi/megaraid/megaraid_sas_base.c > @@ -4424,8 +4424,7 @@ int megasas_alloc_cmds(struct megasas_instance *instance) > static void megasas_update_ext_vd_details(struct megasas_instance *instance) > { > struct fusion_context *fusion; > - u32 old_map_sz; > - u32 new_map_sz; > + u32 ventura_map_sz = 0; > > fusion = instance->ctrl_context; > /* For MFI based controllers return dummy success */ > @@ -4455,21 +4454,39 @@ static void megasas_update_ext_vd_details(struct megasas_instance *instance) > instance->supportmax256vd ? "Extended VD(240 VD)firmware" : > "Legacy(64 VD) firmware"); > > - old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->fw_supported_vd_count - 1)); > - new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > - fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->drv_supported_vd_count - 1)); > - > - fusion->max_map_sz = max(old_map_sz, new_map_sz); > + if (instance->max_raid_mapsize) { > + ventura_map_sz = instance->max_raid_mapsize * > + MR_MIN_MAP_SIZE; /* 64k */ > + fusion->current_map_sz = ventura_map_sz; > + fusion->max_map_sz = ventura_map_sz; > + } else { > + fusion->old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > + (sizeof(struct MR_LD_SPAN_MAP) * > + (instance->fw_supported_vd_count - 1)); > + fusion->new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > > + fusion->max_map_sz = > + max(fusion->old_map_sz, fusion->new_map_sz); > > - if (instance->supportmax256vd) > - fusion->current_map_sz = new_map_sz; > - else > - fusion->current_map_sz = old_map_sz; > + if (instance->supportmax256vd) > + fusion->current_map_sz = fusion->new_map_sz; > + else > + fusion->current_map_sz = fusion->old_map_sz; > + } > + /* irrespective of FW raid maps, driver raid map is constant */ > + fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP_ALL); > +#if VD_EXT_DEBUG > + dev_info(>pdev->dev, "instance->max_raid_mapsize 0x%x \n ", > + instance->max_raid_mapsize); > + dev_info(>pdev->dev, > + "new_map_sz = 0x%x, old_map_sz = 0x%x, " > + "ventura_map_sz = 0x%x, current_map_sz = 0x%x " > +
RE: [PATCH V4 00/11] megaraid_sas: Updates for scsi-next
Hi Chris, I will be rebasing to include " pci_alloc_irq_vectors conversion from Hannes" in the next version of the patch Thanks sasi -Original Message- From: Christoph Hellwig [mailto:h...@infradead.org] Sent: Wednesday, December 07, 2016 2:31 AM To: Sasikumar Chandrasekaran Cc: j...@kernel.org; h...@infradead.org; linux-scsi@vger.kernel.org; sathya.prak...@broadcom.com; linux-ker...@vger.kernel.org; christopher.ow...@broadcom.com; kiran-kumar.kast...@broadcom.com; the...@redhat.com Subject: Re: [PATCH V4 00/11] megaraid_sas: Updates for scsi-next This seems to be missing the pci_alloc_irq_vectors conversion from Hannes? -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html