|
@@ -168,7 +168,7 @@ static struct MR_LD_SPAN *MR_LdSpanPtrGet(u32 ld, u32 span,
|
|
|
/*
|
|
|
* This function will Populate Driver Map using firmware raid map
|
|
|
*/
|
|
|
-void MR_PopulateDrvRaidMap(struct megasas_instance *instance)
|
|
|
+static int MR_PopulateDrvRaidMap(struct megasas_instance *instance)
|
|
|
{
|
|
|
struct fusion_context *fusion = instance->ctrl_context;
|
|
|
struct MR_FW_RAID_MAP_ALL *fw_map_old = NULL;
|
|
@@ -259,7 +259,7 @@ void MR_PopulateDrvRaidMap(struct megasas_instance *instance)
|
|
|
ld_count = (u16)le16_to_cpu(fw_map_ext->ldCount);
|
|
|
if (ld_count > MAX_LOGICAL_DRIVES_EXT) {
|
|
|
dev_dbg(&instance->pdev->dev, "megaraid_sas: LD count exposed in RAID map in not valid\n");
|
|
|
- return;
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
pDrvRaidMap->ldCount = (__le16)cpu_to_le16(ld_count);
|
|
@@ -285,6 +285,12 @@ void MR_PopulateDrvRaidMap(struct megasas_instance *instance)
|
|
|
fusion->ld_map[(instance->map_id & 1)];
|
|
|
pFwRaidMap = &fw_map_old->raidMap;
|
|
|
ld_count = (u16)le32_to_cpu(pFwRaidMap->ldCount);
|
|
|
+ if (ld_count > MAX_LOGICAL_DRIVES) {
|
|
|
+ dev_dbg(&instance->pdev->dev,
|
|
|
+ "LD count exposed in RAID map in not valid\n");
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
pDrvRaidMap->totalSize = pFwRaidMap->totalSize;
|
|
|
pDrvRaidMap->ldCount = (__le16)cpu_to_le16(ld_count);
|
|
|
pDrvRaidMap->fpPdIoTimeoutSec = pFwRaidMap->fpPdIoTimeoutSec;
|
|
@@ -300,6 +306,8 @@ void MR_PopulateDrvRaidMap(struct megasas_instance *instance)
|
|
|
sizeof(struct MR_DEV_HANDLE_INFO) *
|
|
|
MAX_RAIDMAP_PHYSICAL_DEVICES);
|
|
|
}
|
|
|
+
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -317,8 +325,8 @@ u8 MR_ValidateMapInfo(struct megasas_instance *instance)
|
|
|
u16 ld;
|
|
|
u32 expected_size;
|
|
|
|
|
|
-
|
|
|
- MR_PopulateDrvRaidMap(instance);
|
|
|
+ if (MR_PopulateDrvRaidMap(instance))
|
|
|
+ return 0;
|
|
|
|
|
|
fusion = instance->ctrl_context;
|
|
|
drv_map = fusion->ld_drv_map[(instance->map_id & 1)];
|