[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