// If exist, search the front path which point to partition node in the variable instants.\r
// If fail to find or HD_BOOT_DEVICE_PATH_VARIABLE_NAME not exist, reconnect all and search in all system\r
//\r
- CachedDevicePath = BdsLibGetVariableAndSize (\r
- HD_BOOT_DEVICE_PATH_VARIABLE_NAME,\r
- &gHdBootDevicePathVariablGuid,\r
- &CachedDevicePathSize\r
- );\r
+ GetVariable2 (\r
+ HD_BOOT_DEVICE_PATH_VARIABLE_NAME,\r
+ &gHdBootDevicePathVariablGuid,\r
+ (VOID **) &CachedDevicePath,\r
+ &CachedDevicePathSize\r
+ );\r
+\r
+ //\r
+ // Delete the invalid HD_BOOT_DEVICE_PATH_VARIABLE_NAME variable.\r
+ //\r
+ if ((CachedDevicePath != NULL) && !IsDevicePathValid (CachedDevicePath, CachedDevicePathSize)) {\r
+ FreePool (CachedDevicePath);\r
+ CachedDevicePath = NULL;\r
+ Status = gRT->SetVariable (\r
+ HD_BOOT_DEVICE_PATH_VARIABLE_NAME,\r
+ &gHdBootDevicePathVariablGuid,\r
+ 0,\r
+ 0,\r
+ NULL\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
\r
if (CachedDevicePath != NULL) {\r
TempNewDevicePath = CachedDevicePath;\r
Status = gRT->SetVariable (\r
HD_BOOT_DEVICE_PATH_VARIABLE_NAME,\r
&gHdBootDevicePathVariablGuid,\r
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
GetDevicePathSize (CachedDevicePath),\r
CachedDevicePath\r
);\r
Status = gRT->SetVariable (\r
HD_BOOT_DEVICE_PATH_VARIABLE_NAME,\r
&gHdBootDevicePathVariablGuid,\r
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
GetDevicePathSize (CachedDevicePath),\r
CachedDevicePath\r
);\r