:: commit e5d6b4c5dbec3956b29c88c1623093bd22958172

Mintsuki <mintsuki@protonmail.com> — 2026-02-04 07:19

parents: 7e392b12cd

drivers/disk: Lazily find unique sectors if needed

diff --git a/common/drivers/disk.s2.c b/common/drivers/disk.s2.c
index c1a8d1a9..191ebdfd 100644
--- a/common/drivers/disk.s2.c
+++ b/common/drivers/disk.s2.c
@@ -393,6 +393,9 @@ static struct volume *pxe_from_efi_handle(EFI_HANDLE efi_handle) {
 
 #define UNIQUE_SECTOR_POOL_SIZE 65536
 static uint8_t *unique_sector_pool;
+static bool unique_sectors_calculated = false;
+
+static void find_unique_sectors(void);
 
 static struct volume *volume_by_unique_sector(void *b2b) {
     for (size_t i = 0; i < volume_index_i; i++) {
@@ -645,6 +648,8 @@ struct volume *disk_volume_from_efi_handle(EFI_HANDLE efi_handle) {
                                       UNIQUE_SECTOR_POOL_SIZE,
                                       unique_sector_pool);
         if (status == 0) {
+            find_unique_sectors();
+
             uint8_t b2b[BLAKE2B_OUT_BYTES];
             blake2b(b2b, unique_sector_pool, UNIQUE_SECTOR_POOL_SIZE);
 
@@ -664,6 +669,11 @@ struct volume *disk_volume_from_efi_handle(EFI_HANDLE efi_handle) {
 }
 
 static void find_unique_sectors(void) {
+    if (unique_sectors_calculated) {
+        return;
+    }
+    unique_sectors_calculated = true;
+
     EFI_STATUS status;
 
     for (size_t i = 0; i < volume_index_i; i++) {
@@ -838,7 +848,6 @@ fail:
         }
     }
 
-    find_unique_sectors();
     find_part_handles(handles, handle_count);
 
     pmm_free(handles, handles_size);
tab: 248 wrap: offon