--- ./source/private_module/bdm/sdm/hdm/hdm_routine.c	2018-03-30 08:15:22.000000000 +0000
+++ ./source/private_module/bdm/sdm/hdm/hdm_routine.c.hotpatch	2021-03-09 16:41:09.000000000 +0000
@@ -1432,65 +1432,65 @@
 *     :տ֪ͨ¶
 * : 
 * : 
-*   ֵ: 
-*     : 
 **************************************************************************/
+bool g_isNotifyTemperatureByFrame = FALSE;
+void hdmNotifyDiskTempByFrame(void);
 static void hdmRtNotifyTemperatureByFrameStart(void *arg)
 {
     LVOS_SCHED_WORK_S *workContext = NULL;
     HDM_WORK_CONTEXT_S *usrContext = NULL;
     uint64_t frameWwn[2];
-    uint32_t frameId = 0;
-    uint32_t maxDisk = 0; 
+    
+    
 
     memset(frameWwn, 0, 2*sizeof(uint64_t));
     workContext = (LVOS_SCHED_WORK_S *)arg;
     usrContext = (HDM_WORK_CONTEXT_S *)workContext->pData;
 
     FREE_STRUCTURE(usrContext, HDM_WORK_POOL_ID);
+
     /*Begin Modified by l00245290 DTS2015062304179 20150624*/
     usrContext = NULL;
     /*End Modified by l00245290 DTS2015062304179 20150624*/
 
-    for(frameId = 0; frameId < SD_MAX_FRAME_NUMBER; frameId++)
-    {
-        /*ȡWWN*/
-        if (RETURN_ERROR == hdmGetFramWwn(frameId, frameWwn))
-        {
-            DBG_LogDebug(LOG_ID_HDM_031E,
-                "BDM_RT:Disk get enclosureWWN by frameId fail, FrameId(%u).", frameId);  
-            continue;
-        }
+    if (g_isNotifyTemperatureByFrame) {
+        BDM_PRINT_LIMIT_PERIOD(BDM_LOG_INTERVAL_HALF_HOUR, 1, DBG_LOG_ERROR, LOG_ID_HDM_031E,
+            "BDM_RT_SPH030:hdm is notiyfing dmi temprature.");
+        return;
+    }
+
+    /* ⲻ׼Ȳǿ */
+    g_isNotifyTemperatureByFrame = TRUE;
+    hdmNotifyDiskTempByFrame();
+    g_isNotifyTemperatureByFrame = FALSE;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
-        /*ȡڲλ*/    
-        if(RETURN_OK != OperateEnclosure(GET_DISK_MAX, frameWwn[0], &maxDisk, sizeof(uint32_t)))
-        {
-            if (RETURN_OK != OperateEnclosure(GET_DISK_MAX, frameWwn[1], &maxDisk, sizeof(uint32_t)))
-            {
-                DBG_LogError(LOG_ID_HDM_0320, "BDM_RT:Get frame FrameId(%u) number from dmi failed.", frameId);
-                continue ;
-            }
-        }
 
-        /*3.5ÿ24λ̿һÿ12λ*/
-        if ((HDM_35DSK_NUM_ONE_FRAME == maxDisk) || (HDM_DISK_NUM_UNIBODY == maxDisk))
-        {    
-            hdmRtNtfTempForInch35Dsk(frameWwn, frameId, maxDisk);   
-        }
-        /*2.5ÿ25λ*/    
-        else if (HDM_25DSK_NUM_ONE_FRAME == maxDisk)
-        {    
-            hdmRtNtfTempForInch25Dsk(frameWwn, frameId);
-        }
-        else
-        {
-            if( BDM_LOG_CAN_PRINT(24 * 3600 * HZ, frameWwn[0] ) )
-            {
-                DBG_LogError(LOG_ID_HDM_0321, "BDM_RT:The frame(FrameId(%u)) number(%d) get from dmi is wrong.", frameId, maxDisk);
-            }
-            continue;    
-        }    
-    }
 
     return;
 }
@@ -3737,3 +3737,70 @@
 
 HDM_USE_TRACE_POINT /* PC-Lint */
 
+void hdmNotifyDiskTempToDmiByFrame(uint32_t frameNum, uint64_t *allFrame)
+{
+    uint32_t index;
+    uint32_t frameId;
+    uint64_t frameWwn[2];
+    uint32_t maxDisk = 0;
+   
+    for (index = 0; index < frameNum; index++) {
+        frameId = BDM_EAM_GET_INNER_FRAME_ID_FROM_WWN(allFrame[index]);
+ 
+        /*ȡWWN*/
+        if (RETURN_ERROR == hdmGetFramWwn(frameId, frameWwn)) {
+            DBG_LogDebug(LOG_ID_HDM_031E,
+                "BDM_RT:Disk get enclosureWWN by frameId fail, FrameId(%u).", frameId); 
+            continue;
+        }
+ 
+        /*ȡڲλ*/
+        if(RETURN_OK != OperateEnclosure(GET_DISK_MAX, frameWwn[0], &maxDisk, sizeof(uint32_t))) {
+            if (RETURN_OK != OperateEnclosure(GET_DISK_MAX, frameWwn[1], &maxDisk, sizeof(uint32_t))) {
+                DBG_LogError(LOG_ID_HDM_0320, "BDM_RT:Get frame FrameId(%u) number from dmi failed.", frameId);
+                continue ;
+            }
+        }
+ 
+        if ((HDM_35DSK_NUM_ONE_FRAME == maxDisk) || (HDM_DISK_NUM_UNIBODY == maxDisk)) {
+            /*3.5ÿ24λ̿һÿ12λ*/
+            hdmRtNtfTempForInch35Dsk(frameWwn, frameId, maxDisk);
+        } else if (HDM_25DSK_NUM_ONE_FRAME == maxDisk) {
+            /*2.5ÿ25λ*/
+            hdmRtNtfTempForInch25Dsk(frameWwn, frameId);
+        } else if(BDM_LOG_CAN_PRINT(24 * 3600 * HZ, frameWwn[0])) {
+                DBG_LogError(LOG_ID_HDM_0321, "BDM_RT:The frame(FrameId(%u)) number(%u) get from dmi is wrong.", frameId, maxDisk);
+        }
+    }
+}
+
+void hdmNotifyDiskTempByFrame(void)
+{
+    uint64_t *allFrame = NULL;
+    uint32_t frameNum = SD_MAX_FRAME_NUMBER;
+    uint32_t allFrameSize = 0;
+    int32_t ret = RETURN_ERROR;
+
+    allFrameSize = sizeof(uint64_t) * SD_MAX_FRAME_NUMBER;
+    ret = ALLOCATE_PUB_STRUCTURE(allFrameSize, (void**)&allFrame);
+    if (unlikely((RETURN_OK != ret) || (NULL == allFrame))) {
+        DBG_LogError(LOG_ID_HDM_0321, "BDM_RT_SPH030:alloc public structure failed, ret %d, allFrame %p.",
+            ret, allFrame);
+        return;
+    }
+
+    memset(allFrame, 0, sizeof(uint64_t) * SD_MAX_FRAME_NUMBER);
+
+    if (!sdGetAllFrames(&frameNum, allFrame) || frameNum == 0) {
+        FREE_PUB_STRUCTURE(allFrame);
+        DBG_LogError(LOG_ID_HDM_0321, "BDM_RT_SPH030: get frames failed from sd, frameNum %u.", frameNum);
+        return;
+    }
+
+    hdmNotifyDiskTempToDmiByFrame(frameNum, allFrame);
+
+    FREE_PUB_STRUCTURE(allFrame);
+    return;
+}
+
+
--- ./source/private_module/bdm/sdm/hdm/stub_v3/stub_hdm_routine.c	2018-03-30 08:15:22.000000000 +0000
+++ ./source/private_module/bdm/sdm/hdm/stub_v3/stub_hdm_routine.c.hotpatch	2021-02-10 08:11:31.000000000 +0000
@@ -799,21 +799,18 @@
    ֵ: 
      : ϱڸ̵¶
 **************************************************************************/
-/*Begin Modified by w90005722 PCIE_ROOT_DISK*/
+#define HDM_NOTIFY_DRV_INFO_PRINT_LIMIT (7 * 24 *3600 * HZ) /*7ӡ1*/
 static void hdmRtNtfTempForDisk(uint64_t *frameWwn, uint32_t frameId, uint8_t cnt, void* buf)
 {
     uint32_t wwnNum = 0;
     int32_t ret = RETURN_ERROR;
-	DMI_DISK_TEMP_INFO_S* dmiTmpBuf = buf;
+    DMI_DISK_TEMP_INFO_S* dmiTmpBuf = buf;
 
-    if (MAX_CTRL_NUM_WITH_FULL_INTERCONNECTION == bdmGetCtrlNumInOneEngine())
-    {
-        for (wwnNum = 0; wwnNum < 2; wwnNum++)
-        {
+    if (MAX_CTRL_NUM_WITH_FULL_INTERCONNECTION == bdmGetCtrlNumInOneEngine()) {
+        for (wwnNum = 0; wwnNum < 2; wwnNum++) {
             ret = OperateDisk(SET_DISK_TEMPERATURE, frameWwn[wwnNum], INVALID_VALUE32, (void*)dmiTmpBuf, 
                                 (sizeof(DMI_DISK_TEMP_COMMON_INFO_S) + sizeof(DMI_SINGLE_DISK_TEMP_INFO_S) * cnt));
-            if (RETURN_OK != ret)
-            {
+            if (RETURN_OK != ret) {
                 BDM_LOG_WARN_CAN_PRINT(LOG_ID_HDM_0322, 24 * 3600 * HZ, (uint64_t)frameId ,
                                 "BDM_RT:Notify drv tempertrature by frame fail, frame wwn: %llu, FrameId:%d.", 
                                 frameWwn[wwnNum], frameId);
@@ -821,26 +818,15 @@
         }
     }
     /*Begin Modified by t00352166  DTS2017031600915  20170317*/
-    if (MAX_CTRL_NUM_WITHOUT_FULL_INTERCONNECTION == bdmGetCtrlNumInOneEngine())
-    {
+    if (MAX_CTRL_NUM_WITHOUT_FULL_INTERCONNECTION == bdmGetCtrlNumInOneEngine()) {
         ret = OperateDisk(SET_DISK_TEMPERATURE, frameWwn[0], INVALID_VALUE32, (void*)dmiTmpBuf, 
                             (sizeof(DMI_DISK_TEMP_COMMON_INFO_S) + sizeof(DMI_SINGLE_DISK_TEMP_INFO_S) * cnt));
-
-        BDM_ADJUSTABLE_LOG(LOG_ID_HDM_0322, "Notify drv tempertrature by frame, slot %u, temp %d, thresh(%d, %d, %d, %d).",
-                   dmiTmpBuf->DiskTempInfo[0].DiskSlot,
-                   dmiTmpBuf->DiskTempInfo[0].DiskSmartTemp,
-                   dmiTmpBuf->DiskTempInfo[0].IncTempThresh,
-                   dmiTmpBuf->DiskTempInfo[0].DecTempThresh,
-                   dmiTmpBuf->DiskTempInfo[0].OverIncTempThresh,
-                   dmiTmpBuf->DiskTempInfo[0].OverDecTempThresh);
     /*End Modified by t00352166  DTS2017031600915  20170317*/
     
-        if (RETURN_OK != ret)
-        {
+        if (RETURN_OK != ret) {
             ret = OperateDisk(SET_DISK_TEMPERATURE, frameWwn[1], INVALID_VALUE32, (void*)dmiTmpBuf, 
                             (sizeof(DMI_DISK_TEMP_COMMON_INFO_S) + sizeof(DMI_SINGLE_DISK_TEMP_INFO_S) * cnt));
-            if (RETURN_OK != ret)
-            {
+            if (RETURN_OK != ret) {
                 BDM_LOG_WARN_CAN_PRINT(LOG_ID_HDM_0323, 24 * 3600 * HZ, 1ULL,
                                 "BDM_RT:Notify drv tempertrature by frame fail, frame wwn: %llu, FrameId:%d.", 
                                 frameWwn[1], frameId);
@@ -848,6 +834,20 @@
         }
     }
 
+    BDM_ADJUSTABLE_LOG(LOG_ID_HDM_0322, "Notify drv tempertrature by frame, slot %u, temp %d, thresh(%d, %d, %d, %d).",
+                   dmiTmpBuf->DiskTempInfo[0].DiskSlot,
+                   dmiTmpBuf->DiskTempInfo[0].DiskSmartTemp,
+                   dmiTmpBuf->DiskTempInfo[0].IncTempThresh,
+                   dmiTmpBuf->DiskTempInfo[0].DecTempThresh,
+                   dmiTmpBuf->DiskTempInfo[0].OverIncTempThresh,
+                   dmiTmpBuf->DiskTempInfo[0].OverDecTempThresh);
+
+    BDM_PRINT_LIMIT_PERIOD(HDM_NOTIFY_DRV_INFO_PRINT_LIMIT, 1, DBG_LOG_INFO, LOG_ID_HDM_031E,
+        "Notify drv tempertrature by frame, slot %u, temp %d, thresh(%d, %d, %d, %d).",
+        dmiTmpBuf->DiskTempInfo[0].DiskSlot, dmiTmpBuf->DiskTempInfo[0].DiskSmartTemp,
+        dmiTmpBuf->DiskTempInfo[0].IncTempThresh, dmiTmpBuf->DiskTempInfo[0].DecTempThresh,
+        dmiTmpBuf->DiskTempInfo[0].OverIncTempThresh, dmiTmpBuf->DiskTempInfo[0].OverDecTempThresh);
+
     return;
 }
 /*End Modified by w90005722 PCIE_ROOT_DISK*/
