EFI_OUT_OF_RESOURCES là gì?

Quicknote EFI_OUT_OF_RESOURCES là gì?

3 phút đọc
Đọc bằng Tiếng Việt English 日本語
Debug / Shell / Driver Terms cover

EFI_OUT_OF_RESOURCES báo rằng firmware không còn đủ tài nguyên để hoàn thành request. Tài nguyên ở đây không chỉ là RAM. Nó có thể là pool memory, descriptor, handle, event, NVRAM space hoặc vùng flash dành cho variable store.

Đây là status cần đọc rất cẩn thận vì cùng một tên lỗi nhưng nguyên nhân ở PEI, DXE, BDS và Runtime có thể khác nhau.

Mục Giá trị Ghi chú
DXE Pool AllocatePool fail Hay gặp khi leak memory hoặc allocate quá lớn.
NVRAM Variable store gần đầy SetVariable có thể fail khi reclaim không đủ.
Handle/Event Object firmware quá nhiều Ít gặp hơn nhưng cần nghĩ tới khi loop tạo object.
PEI Resource Temporary RAM hạn chế PEI sớm có rất ít memory.

Ví dụ: NVRAM full khi update variable

Status = gRT->SetVariable (
                L"MySetting",
                &gMyPkgTokenSpaceGuid,
                EFI_VARIABLE_NON_VOLATILE |
                EFI_VARIABLE_BOOTSERVICE_ACCESS |
                EFI_VARIABLE_RUNTIME_ACCESS,
                sizeof (MY_SETTING),
                &MySetting
                );

if (Status == EFI_OUT_OF_RESOURCES) {
  DEBUG ((DEBUG_ERROR, "NVRAM may be full or reclaim failed\n"));
}

Với variable, lỗi này không nên hiểu đơn giản là “thiếu RAM”. Nó có thể là variable store đầy, reclaim fail, hoặc flash policy không cho ghi thêm.

01 MEM

Memory allocation

AllocatePool/AllocatePages fail.

02 VAR

Variable Store

SetVariable fail do NVRAM space hoặc reclaim.

03 OBJ

Firmware object

Handle/Event/Protocol object tạo quá nhiều.

04 POLICY

Policy/Lock

Một số platform map policy lỗi thành resource-like failure.

EFI_OUT_OF_RESOURCES cần xác định loại tài nguyên nào đang hết.

Debug Diary

Nếu log chỉ có:

SetVariable(MySetting) = EFI_OUT_OF_RESOURCES

thì chưa đủ. Nên log thêm:

Variable name / GUID
Data size
Attributes
Remaining variable storage nếu có API hỗ trợ
Phase hiện tại: DXE hay Runtime

Common Pitfall

Xóa một variable không phải lúc nào cũng giải phóng flash ngay lập tức. Variable store thường cần reclaim/garbage collection. Vì vậy “đã delete rồi mà vẫn out of resources” không nhất thiết mâu thuẫn.

Checklist khi gặp EFI_OUT_OF_RESOURCES

Bài liên quan

Nguồn tham khảo public

Thấy nội dung này hữu ích?

Lưu lại hoặc chia sẻ cho người cũng đang học firmware, BIOS/UEFI và embedded systems.

Biến note thành bài viết hoàn chỉnh

Notes là nơi ghi nhanh khái niệm.