grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/2] disk: read up to 63 sectors in LBA mode


From: ValdikSS
Subject: [PATCH 1/2] disk: read up to 63 sectors in LBA mode
Date: Fri, 7 Jul 2023 00:39:47 +0300

There's no need to obey CHS layout restrictions for LBA reads
on LBA disks, it only slows down booting process.

See: https://lists.gnu.org/archive/html/grub-devel/2023-07/msg00001.html
---
 grub-core/disk/i386/pc/biosdisk.c | 5 ++++-
 include/grub/disk.h               | 3 +++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/grub-core/disk/i386/pc/biosdisk.c 
b/grub-core/disk/i386/pc/biosdisk.c
index f9362d17c..1d6788950 100644
--- a/grub-core/disk/i386/pc/biosdisk.c
+++ b/grub-core/disk/i386/pc/biosdisk.c
@@ -471,7 +471,7 @@ grub_biosdisk_rw (int cmd, grub_disk_t disk,
       struct grub_biosdisk_dap *dap;
 
       dap = (struct grub_biosdisk_dap *) (GRUB_MEMORY_MACHINE_SCRATCH_ADDR
-                                         + (data->sectors
+                                         + (GRUB_DISK_MAX_LBA_SECTORS
                                             << disk->log_sector_size));
       dap->length = sizeof (*dap);
       dap->reserved = 0;
@@ -561,6 +561,9 @@ get_safe_sectors (grub_disk_t disk, grub_disk_addr_t sector)
   struct grub_biosdisk_data *data = disk->data;
   grub_uint32_t sectors = data->sectors;
 
+  if (data->flags & GRUB_BIOSDISK_FLAG_LBA)
+    sectors = GRUB_DISK_MAX_LBA_SECTORS;
+
   /* OFFSET = SECTOR % SECTORS */
   grub_divmod64 (sector, sectors, &offset);
 
diff --git a/include/grub/disk.h b/include/grub/disk.h
index a4b5d13f3..be032a72c 100644
--- a/include/grub/disk.h
+++ b/include/grub/disk.h
@@ -190,6 +190,9 @@ typedef struct grub_disk_memberlist *grub_disk_memberlist_t;
 
 #define GRUB_DISK_MAX_MAX_AGGLOMERATE ((1 << (30 - GRUB_DISK_CACHE_BITS - 
GRUB_DISK_SECTOR_BITS)) - 1)
 
+/* Maximum number of sectors to read in LBA mode at once */
+#define GRUB_DISK_MAX_LBA_SECTORS 63
+
 /* Return value of grub_disk_native_sectors() in case disk size is unknown. */
 #define GRUB_DISK_SIZE_UNKNOWN  0xffffffffffffffffULL
 
-- 
2.41.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]