[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/2] disk: Add support for device-specific malloc function
From: |
Leif Lindholm |
Subject: |
[PATCH 1/2] disk: Add support for device-specific malloc function |
Date: |
Fri, 19 Feb 2016 16:18:33 +0000 |
Some disk types have allocation requirements beyond normal grub_malloc.
Add a function pointer to grub_disk_t and a wrapper function in
kern/disk.c making use of that function if available, to enable these
disk drivers to implement their own malloc.
---
grub-core/kern/disk.c | 13 +++++++++++--
include/grub/disk.h | 5 +++++
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/grub-core/kern/disk.c b/grub-core/kern/disk.c
index 789f8c0..e186586 100644
--- a/grub-core/kern/disk.c
+++ b/grub-core/kern/disk.c
@@ -184,6 +184,15 @@ find_part_sep (const char *name)
return NULL;
}
+static void *
+disk_malloc (struct grub_disk *disk, grub_size_t size)
+{
+ if (disk->malloc)
+ return disk->malloc (disk, size);
+
+ return grub_malloc (size);
+}
+
grub_disk_t
grub_disk_open (const char *name)
{
@@ -331,7 +340,7 @@ grub_disk_read_small_real (grub_disk_t disk,
grub_disk_addr_t sector,
}
/* Allocate a temporary buffer. */
- tmp_buf = grub_malloc (GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS);
+ tmp_buf = disk_malloc (disk, GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS);
if (! tmp_buf)
return grub_errno;
@@ -373,7 +382,7 @@ grub_disk_read_small_real (grub_disk_t disk,
grub_disk_addr_t sector,
num = ((size + offset + (1ULL << (disk->log_sector_size))
- 1) >> (disk->log_sector_size));
- tmp_buf = grub_malloc (num << disk->log_sector_size);
+ tmp_buf = disk_malloc (disk, num << disk->log_sector_size);
if (!tmp_buf)
return grub_errno;
diff --git a/include/grub/disk.h b/include/grub/disk.h
index b385af8..0fdd779 100644
--- a/include/grub/disk.h
+++ b/include/grub/disk.h
@@ -111,6 +111,8 @@ typedef void (*grub_disk_read_hook_t) (grub_disk_addr_t
sector,
unsigned offset, unsigned length,
void *data);
+typedef void *(*grub_disk_malloc_t) (struct grub_disk *disk, grub_size_t size);
+
/* Disk. */
struct grub_disk
{
@@ -144,6 +146,9 @@ struct grub_disk
/* Device-specific data. */
void *data;
+
+ /* Device-specific malloc function. */
+ grub_disk_malloc_t malloc;
};
typedef struct grub_disk *grub_disk_t;
--
2.1.4
- [PATCH 0/2] Alternative efidisk alignment resolution, Leif Lindholm, 2016/02/19
- [PATCH 1/2] disk: Add support for device-specific malloc function,
Leif Lindholm <=
- Re: [PATCH 1/2] disk: Add support for device-specific malloc function, Andrei Borzenkov, 2016/02/22
- Re: [PATCH 1/2] disk: Add support for device-specific malloc function, Leif Lindholm, 2016/02/22
- Re: [PATCH 1/2] disk: Add support for device-specific malloc function, Andrei Borzenkov, 2016/02/22
- Re: [PATCH 1/2] disk: Add support for device-specific malloc function, Leif Lindholm, 2016/02/24
- Re: [PATCH 1/2] disk: Add support for device-specific malloc function, Andrei Borzenkov, 2016/02/24
- Re: [PATCH 1/2] disk: Add support for device-specific malloc function, Leif Lindholm, 2016/02/24
- Re: [PATCH 1/2] disk: Add support for device-specific malloc function, Andrei Borzenkov, 2016/02/24
- Re: [PATCH 1/2] disk: Add support for device-specific malloc function, Andrei Borzenkov, 2016/02/24
- Re: [PATCH 1/2] disk: Add support for device-specific malloc function, Vladimir 'phcoder' Serbinenko, 2016/02/26
- Re: [PATCH 1/2] disk: Add support for device-specific malloc function, Andrei Borzenkov, 2016/02/26