ppc64le: sync cas/tpm patchset with upstream
Resolves: #2143420 Signed-off-by: Robbie Harwood <rharwood@redhat.com>
This commit is contained in:
parent
d3f33bc682
commit
5ad247ff66
@ -12,7 +12,7 @@ https://bugzilla.redhat.com/show_bug.cgi?id=973205
|
|||||||
3 files changed, 12 insertions(+), 4 deletions(-)
|
3 files changed, 12 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
diff --git a/grub-core/kern/ieee1275/cmain.c b/grub-core/kern/ieee1275/cmain.c
|
diff --git a/grub-core/kern/ieee1275/cmain.c b/grub-core/kern/ieee1275/cmain.c
|
||||||
index 20cbbd761ec..04df9d2c667 100644
|
index 20cbbd761e..04df9d2c66 100644
|
||||||
--- a/grub-core/kern/ieee1275/cmain.c
|
--- a/grub-core/kern/ieee1275/cmain.c
|
||||||
+++ b/grub-core/kern/ieee1275/cmain.c
|
+++ b/grub-core/kern/ieee1275/cmain.c
|
||||||
@@ -90,7 +90,10 @@ grub_ieee1275_find_options (void)
|
@@ -90,7 +90,10 @@ grub_ieee1275_find_options (void)
|
||||||
@ -28,7 +28,7 @@ index 20cbbd761ec..04df9d2c667 100644
|
|||||||
/* Old Macs have no key repeat, newer ones have fully working one.
|
/* Old Macs have no key repeat, newer ones have fully working one.
|
||||||
The ones inbetween when repeated key generates an escaoe sequence
|
The ones inbetween when repeated key generates an escaoe sequence
|
||||||
diff --git a/grub-core/video/ieee1275.c b/grub-core/video/ieee1275.c
|
diff --git a/grub-core/video/ieee1275.c b/grub-core/video/ieee1275.c
|
||||||
index 17a3dbbb575..b8e4b3feb32 100644
|
index 17a3dbbb57..b8e4b3feb3 100644
|
||||||
--- a/grub-core/video/ieee1275.c
|
--- a/grub-core/video/ieee1275.c
|
||||||
+++ b/grub-core/video/ieee1275.c
|
+++ b/grub-core/video/ieee1275.c
|
||||||
@@ -352,9 +352,12 @@ static struct grub_video_adapter grub_video_ieee1275_adapter =
|
@@ -352,9 +352,12 @@ static struct grub_video_adapter grub_video_ieee1275_adapter =
|
||||||
@ -48,7 +48,7 @@ index 17a3dbbb575..b8e4b3feb32 100644
|
|||||||
|
|
||||||
GRUB_MOD_FINI(ieee1275_fb)
|
GRUB_MOD_FINI(ieee1275_fb)
|
||||||
diff --git a/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h
|
diff --git a/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h
|
||||||
index 0a599607f31..b5a1d49bbc3 100644
|
index 0a599607f3..49dbd2ebfb 100644
|
||||||
--- a/include/grub/ieee1275/ieee1275.h
|
--- a/include/grub/ieee1275/ieee1275.h
|
||||||
+++ b/include/grub/ieee1275/ieee1275.h
|
+++ b/include/grub/ieee1275/ieee1275.h
|
||||||
@@ -148,6 +148,8 @@ enum grub_ieee1275_flag
|
@@ -148,6 +148,8 @@ enum grub_ieee1275_flag
|
||||||
@ -56,7 +56,7 @@ index 0a599607f31..b5a1d49bbc3 100644
|
|||||||
|
|
||||||
GRUB_IEEE1275_FLAG_RAW_DEVNAMES,
|
GRUB_IEEE1275_FLAG_RAW_DEVNAMES,
|
||||||
+
|
+
|
||||||
+ GRUB_IEEE1275_FLAG_DISABLE_VIDEO_SUPPORT
|
+ GRUB_IEEE1275_FLAG_DISABLE_VIDEO_SUPPORT,
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int EXPORT_FUNC(grub_ieee1275_test_flag) (enum grub_ieee1275_flag flag);
|
extern int EXPORT_FUNC(grub_ieee1275_test_flag) (enum grub_ieee1275_flag flag);
|
||||||
|
@ -23,7 +23,7 @@ Signed-off-by: Daniel Axtens <dja@axtens.net>
|
|||||||
3 files changed, 201 insertions(+), 3 deletions(-)
|
3 files changed, 201 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
diff --git a/grub-core/commands/appendedsig/x509.c b/grub-core/commands/appendedsig/x509.c
|
diff --git a/grub-core/commands/appendedsig/x509.c b/grub-core/commands/appendedsig/x509.c
|
||||||
index 2b38b3670a2..42ec65c54aa 100644
|
index 2b38b3670a..42ec65c54a 100644
|
||||||
--- a/grub-core/commands/appendedsig/x509.c
|
--- a/grub-core/commands/appendedsig/x509.c
|
||||||
+++ b/grub-core/commands/appendedsig/x509.c
|
+++ b/grub-core/commands/appendedsig/x509.c
|
||||||
@@ -47,6 +47,12 @@ const char *keyUsage_oid = "2.5.29.15";
|
@@ -47,6 +47,12 @@ const char *keyUsage_oid = "2.5.29.15";
|
||||||
@ -156,7 +156,7 @@ index 2b38b3670a2..42ec65c54aa 100644
|
|||||||
|
|
||||||
cleanup_value:
|
cleanup_value:
|
||||||
diff --git a/grub-core/tests/appended_signature_test.c b/grub-core/tests/appended_signature_test.c
|
diff --git a/grub-core/tests/appended_signature_test.c b/grub-core/tests/appended_signature_test.c
|
||||||
index 88a485200d8..dbba0616621 100644
|
index 88a485200d..dbba061662 100644
|
||||||
--- a/grub-core/tests/appended_signature_test.c
|
--- a/grub-core/tests/appended_signature_test.c
|
||||||
+++ b/grub-core/tests/appended_signature_test.c
|
+++ b/grub-core/tests/appended_signature_test.c
|
||||||
@@ -111,6 +111,22 @@ static struct grub_procfs_entry certificate_printable_der_entry = {
|
@@ -111,6 +111,22 @@ static struct grub_procfs_entry certificate_printable_der_entry = {
|
||||||
@ -225,7 +225,7 @@ index 88a485200d8..dbba0616621 100644
|
|||||||
|
|
||||||
GRUB_FUNCTIONAL_TEST (appended_signature_test, appended_signature_test);
|
GRUB_FUNCTIONAL_TEST (appended_signature_test, appended_signature_test);
|
||||||
diff --git a/grub-core/tests/appended_signatures.h b/grub-core/tests/appended_signatures.h
|
diff --git a/grub-core/tests/appended_signatures.h b/grub-core/tests/appended_signatures.h
|
||||||
index aa3dc6278e3..2e5ebd7d8bd 100644
|
index aa3dc6278e..2e5ebd7d8b 100644
|
||||||
--- a/grub-core/tests/appended_signatures.h
|
--- a/grub-core/tests/appended_signatures.h
|
||||||
+++ b/grub-core/tests/appended_signatures.h
|
+++ b/grub-core/tests/appended_signatures.h
|
||||||
@@ -555,3 +555,84 @@ unsigned char certificate_printable_der[] = {
|
@@ -555,3 +555,84 @@ unsigned char certificate_printable_der[] = {
|
@ -1,252 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Daniel Axtens <dja@axtens.net>
|
|
||||||
Date: Wed, 15 Apr 2020 23:28:29 +1000
|
|
||||||
Subject: [PATCH] ieee1275: claim more memory
|
|
||||||
|
|
||||||
On powerpc-ieee1275, we are running out of memory trying to verify
|
|
||||||
anything. This is because:
|
|
||||||
|
|
||||||
- we have to load an entire file into memory to verify it. This is
|
|
||||||
extremely difficult to change with appended signatures.
|
|
||||||
- We only have 32MB of heap.
|
|
||||||
- Distro kernels are now often around 30MB.
|
|
||||||
|
|
||||||
So we want to claim more memory from OpenFirmware for our heap.
|
|
||||||
|
|
||||||
There are some complications:
|
|
||||||
|
|
||||||
- The grub mm code isn't the only thing that will make claims on
|
|
||||||
memory from OpenFirmware:
|
|
||||||
|
|
||||||
* PFW/SLOF will have claimed some for their own use.
|
|
||||||
|
|
||||||
* The ieee1275 loader will try to find other bits of memory that we
|
|
||||||
haven't claimed to place the kernel and initrd when we go to boot.
|
|
||||||
|
|
||||||
* Once we load Linux, it will also try to claim memory. It claims
|
|
||||||
memory without any reference to /memory/available, it just starts
|
|
||||||
at min(top of RMO, 768MB) and works down. So we need to avoid this
|
|
||||||
area. See arch/powerpc/kernel/prom_init.c as of v5.11.
|
|
||||||
|
|
||||||
- The smallest amount of memory a ppc64 KVM guest can have is 256MB.
|
|
||||||
It doesn't work with distro kernels but can work with custom kernels.
|
|
||||||
We should maintain support for that. (ppc32 can boot with even less,
|
|
||||||
and we shouldn't break that either.)
|
|
||||||
|
|
||||||
- Even if a VM has more memory, the memory OpenFirmware makes available
|
|
||||||
as Real Memory Area can be restricted. A freshly created LPAR on a
|
|
||||||
PowerVM machine is likely to have only 256MB available to OpenFirmware
|
|
||||||
even if it has many gigabytes of memory allocated.
|
|
||||||
|
|
||||||
EFI systems will attempt to allocate 1/4th of the available memory,
|
|
||||||
clamped to between 1M and 1600M. That seems like a good sort of
|
|
||||||
approach, we just need to figure out if 1/4 is the right fraction
|
|
||||||
for us.
|
|
||||||
|
|
||||||
We don't know in advance how big the kernel and initrd are going to be,
|
|
||||||
which makes figuring out how much memory we can take a bit tricky.
|
|
||||||
|
|
||||||
To figure out how much memory we should leave unused, I looked at:
|
|
||||||
|
|
||||||
- an Ubuntu 20.04.1 ppc64le pseries KVM guest:
|
|
||||||
vmlinux: ~30MB
|
|
||||||
initrd: ~50MB
|
|
||||||
|
|
||||||
- a RHEL8.2 ppc64le pseries KVM guest:
|
|
||||||
vmlinux: ~30MB
|
|
||||||
initrd: ~30MB
|
|
||||||
|
|
||||||
Ubuntu VMs struggle to boot with just 256MB under SLOF.
|
|
||||||
RHEL likewise has a higher minimum supported memory figure.
|
|
||||||
So lets first consider a distro kernel and 512MB of addressible memory.
|
|
||||||
(This is the default case for anything booting under PFW.) Say we lose
|
|
||||||
131MB to PFW (based on some tests). This leaves us 381MB. 1/4 of 381MB
|
|
||||||
is ~95MB. That should be enough to verify a 30MB vmlinux and should
|
|
||||||
leave plenty of space to load Linux and the initrd.
|
|
||||||
|
|
||||||
If we consider 256MB of RMA under PFW, we have just 125MB remaining. 1/4
|
|
||||||
of that is a smidge under 32MB, which gives us very poor odds of verifying
|
|
||||||
a distro-sized kernel. However, if we need 80MB just to put the kernel
|
|
||||||
and initrd in memory, we can't claim any more than 45MB anyway. So 1/4
|
|
||||||
will do. We'll come back to this later.
|
|
||||||
|
|
||||||
grub is always built as a 32-bit binary, even if it's loading a ppc64
|
|
||||||
kernel. So we can't address memory beyond 4GB. This gives a natural cap
|
|
||||||
of 1GB for powerpc-ieee1275.
|
|
||||||
|
|
||||||
Also apply this 1/4 approach to i386-ieee1275, but keep the 32MB cap.
|
|
||||||
|
|
||||||
make check still works for both i386 and powerpc and I've booted
|
|
||||||
powerpc grub with this change under SLOF and PFW.
|
|
||||||
|
|
||||||
Signed-off-by: Daniel Axtens <dja@axtens.net>
|
|
||||||
---
|
|
||||||
grub-core/kern/ieee1275/init.c | 81 +++++++++++++++++++++++++++++++++---------
|
|
||||||
docs/grub-dev.texi | 6 ++--
|
|
||||||
2 files changed, 69 insertions(+), 18 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c
|
|
||||||
index 0dcd114ce54..c61d91a0285 100644
|
|
||||||
--- a/grub-core/kern/ieee1275/init.c
|
|
||||||
+++ b/grub-core/kern/ieee1275/init.c
|
|
||||||
@@ -46,11 +46,12 @@
|
|
||||||
#endif
|
|
||||||
#include <grub/lockdown.h>
|
|
||||||
|
|
||||||
-/* The maximum heap size we're going to claim */
|
|
||||||
+/* The maximum heap size we're going to claim. Not used by sparc.
|
|
||||||
+ We allocate 1/4 of the available memory under 4G, up to this limit. */
|
|
||||||
#ifdef __i386__
|
|
||||||
#define HEAP_MAX_SIZE (unsigned long) (64 * 1024 * 1024)
|
|
||||||
-#else
|
|
||||||
-#define HEAP_MAX_SIZE (unsigned long) (32 * 1024 * 1024)
|
|
||||||
+#else // __powerpc__
|
|
||||||
+#define HEAP_MAX_SIZE (unsigned long) (1 * 1024 * 1024 * 1024)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern char _end[];
|
|
||||||
@@ -147,16 +148,45 @@ grub_claim_heap (void)
|
|
||||||
+ GRUB_KERNEL_MACHINE_STACK_SIZE), 0x200000);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
-/* Helper for grub_claim_heap. */
|
|
||||||
+/* Helper for grub_claim_heap on powerpc. */
|
|
||||||
+static int
|
|
||||||
+heap_size (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
|
|
||||||
+ void *data)
|
|
||||||
+{
|
|
||||||
+ grub_uint32_t total = *(grub_uint32_t *)data;
|
|
||||||
+
|
|
||||||
+ if (type != GRUB_MEMORY_AVAILABLE)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ /* Do not consider memory beyond 4GB */
|
|
||||||
+ if (addr > 0xffffffffUL)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ if (addr + len > 0xffffffffUL)
|
|
||||||
+ len = 0xffffffffUL - addr;
|
|
||||||
+
|
|
||||||
+ total += len;
|
|
||||||
+ *(grub_uint32_t *)data = total;
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int
|
|
||||||
heap_init (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
|
|
||||||
void *data)
|
|
||||||
{
|
|
||||||
- unsigned long *total = data;
|
|
||||||
+ grub_uint32_t total = *(grub_uint32_t *)data;
|
|
||||||
|
|
||||||
if (type != GRUB_MEMORY_AVAILABLE)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
+ /* Do not consider memory beyond 4GB */
|
|
||||||
+ if (addr > 0xffffffffUL)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ if (addr + len > 0xffffffffUL)
|
|
||||||
+ len = 0xffffffffUL - addr;
|
|
||||||
+
|
|
||||||
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_PRE1_5M_CLAIM))
|
|
||||||
{
|
|
||||||
if (addr + len <= 0x180000)
|
|
||||||
@@ -170,10 +200,6 @@ heap_init (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
|
|
||||||
}
|
|
||||||
len -= 1; /* Required for some firmware. */
|
|
||||||
|
|
||||||
- /* Never exceed HEAP_MAX_SIZE */
|
|
||||||
- if (*total + len > HEAP_MAX_SIZE)
|
|
||||||
- len = HEAP_MAX_SIZE - *total;
|
|
||||||
-
|
|
||||||
/* In theory, firmware should already prevent this from happening by not
|
|
||||||
listing our own image in /memory/available. The check below is intended
|
|
||||||
as a safeguard in case that doesn't happen. However, it doesn't protect
|
|
||||||
@@ -185,6 +211,18 @@ heap_init (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
|
|
||||||
len = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* If this block contains 0x30000000 (768MB), do not claim below that.
|
|
||||||
+ Linux likes to claim memory at min(RMO top, 768MB) and works down
|
|
||||||
+ without reference to /memory/available. */
|
|
||||||
+ if ((addr < 0x30000000) && ((addr + len) > 0x30000000))
|
|
||||||
+ {
|
|
||||||
+ len = len - (0x30000000 - addr);
|
|
||||||
+ addr = 0x30000000;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (len > total)
|
|
||||||
+ len = total;
|
|
||||||
+
|
|
||||||
if (len)
|
|
||||||
{
|
|
||||||
grub_err_t err;
|
|
||||||
@@ -193,10 +231,12 @@ heap_init (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
grub_mm_init_region ((void *) (grub_addr_t) addr, len);
|
|
||||||
+ total -= len;
|
|
||||||
}
|
|
||||||
|
|
||||||
- *total += len;
|
|
||||||
- if (*total >= HEAP_MAX_SIZE)
|
|
||||||
+ *(grub_uint32_t *)data = total;
|
|
||||||
+
|
|
||||||
+ if (total == 0)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
@@ -205,13 +245,22 @@ heap_init (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
|
|
||||||
static void
|
|
||||||
grub_claim_heap (void)
|
|
||||||
{
|
|
||||||
- unsigned long total = 0;
|
|
||||||
+ grub_uint32_t total = 0;
|
|
||||||
|
|
||||||
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_FORCE_CLAIM))
|
|
||||||
- heap_init (GRUB_IEEE1275_STATIC_HEAP_START, GRUB_IEEE1275_STATIC_HEAP_LEN,
|
|
||||||
- 1, &total);
|
|
||||||
- else
|
|
||||||
- grub_machine_mmap_iterate (heap_init, &total);
|
|
||||||
+ {
|
|
||||||
+ heap_init (GRUB_IEEE1275_STATIC_HEAP_START, GRUB_IEEE1275_STATIC_HEAP_LEN,
|
|
||||||
+ 1, &total);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ grub_machine_mmap_iterate (heap_size, &total);
|
|
||||||
+
|
|
||||||
+ total = total / 4;
|
|
||||||
+ if (total > HEAP_MAX_SIZE)
|
|
||||||
+ total = HEAP_MAX_SIZE;
|
|
||||||
+
|
|
||||||
+ grub_machine_mmap_iterate (heap_init, &total);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
diff --git a/docs/grub-dev.texi b/docs/grub-dev.texi
|
|
||||||
index 19f708ee662..90083772c8a 100644
|
|
||||||
--- a/docs/grub-dev.texi
|
|
||||||
+++ b/docs/grub-dev.texi
|
|
||||||
@@ -1047,7 +1047,9 @@ space is limited to 4GiB. GRUB allocates pages from EFI for its heap, at most
|
|
||||||
1.6 GiB.
|
|
||||||
|
|
||||||
On i386-ieee1275 and powerpc-ieee1275 GRUB uses same stack as IEEE1275.
|
|
||||||
-It allocates at most 32MiB for its heap.
|
|
||||||
+
|
|
||||||
+On i386-ieee1275, GRUB allocates at most 32MiB for its heap. On
|
|
||||||
+powerpc-ieee1275, GRUB allocates up to 1GiB.
|
|
||||||
|
|
||||||
On sparc64-ieee1275 stack is 256KiB and heap is 2MiB.
|
|
||||||
|
|
||||||
@@ -1075,7 +1077,7 @@ In short:
|
|
||||||
@item i386-qemu @tab 60 KiB @tab < 4 GiB
|
|
||||||
@item *-efi @tab ? @tab < 1.6 GiB
|
|
||||||
@item i386-ieee1275 @tab ? @tab < 32 MiB
|
|
||||||
-@item powerpc-ieee1275 @tab ? @tab < 32 MiB
|
|
||||||
+@item powerpc-ieee1275 @tab ? @tab < 1 GiB
|
|
||||||
@item sparc64-ieee1275 @tab 256KiB @tab 2 MiB
|
|
||||||
@item arm-uboot @tab 256KiB @tab 2 MiB
|
|
||||||
@item mips(el)-qemu_mips @tab 2MiB @tab 253 MiB
|
|
@ -16,7 +16,7 @@ Signed-off-by: Diego Domingos <diegodo@br.ibm.com>
|
|||||||
2 files changed, 28 insertions(+), 5 deletions(-)
|
2 files changed, 28 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
diff --git a/grub-core/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/ofdisk.c
|
diff --git a/grub-core/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/ofdisk.c
|
||||||
index ea7f78ac7d8..55346849d35 100644
|
index ea7f78ac7d..55346849d3 100644
|
||||||
--- a/grub-core/disk/ieee1275/ofdisk.c
|
--- a/grub-core/disk/ieee1275/ofdisk.c
|
||||||
+++ b/grub-core/disk/ieee1275/ofdisk.c
|
+++ b/grub-core/disk/ieee1275/ofdisk.c
|
||||||
@@ -225,7 +225,9 @@ dev_iterate (const struct grub_ieee1275_devalias *alias)
|
@@ -225,7 +225,9 @@ dev_iterate (const struct grub_ieee1275_devalias *alias)
|
||||||
@ -85,7 +85,7 @@ index ea7f78ac7d8..55346849d35 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/include/grub/ieee1275/ofdisk.h b/include/grub/ieee1275/ofdisk.h
|
diff --git a/include/grub/ieee1275/ofdisk.h b/include/grub/ieee1275/ofdisk.h
|
||||||
index 2f69e3f191d..7d2d5409305 100644
|
index 2f69e3f191..7d2d540930 100644
|
||||||
--- a/include/grub/ieee1275/ofdisk.h
|
--- a/include/grub/ieee1275/ofdisk.h
|
||||||
+++ b/include/grub/ieee1275/ofdisk.h
|
+++ b/include/grub/ieee1275/ofdisk.h
|
||||||
@@ -22,4 +22,12 @@
|
@@ -22,4 +22,12 @@
|
@ -1,268 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Daniel Axtens <dja@axtens.net>
|
|
||||||
Date: Fri, 16 Apr 2021 11:48:46 +1000
|
|
||||||
Subject: [PATCH] ieee1275: request memory with ibm,client-architecture-support
|
|
||||||
|
|
||||||
On PowerVM, the first time we boot a Linux partition, we may only get
|
|
||||||
256MB of real memory area, even if the partition has more memory.
|
|
||||||
|
|
||||||
This isn't really enough. Fortunately, the Power Architecture Platform
|
|
||||||
Reference (PAPR) defines a method we can call to ask for more memory.
|
|
||||||
This is part of the broad and powerful ibm,client-architecture-support
|
|
||||||
(CAS) method.
|
|
||||||
|
|
||||||
CAS can do an enormous amount of things on a PAPR platform: as well as
|
|
||||||
asking for memory, you can set the supported processor level, the interrupt
|
|
||||||
controller, hash vs radix mmu, and so on. We want to touch as little of
|
|
||||||
this as possible because we don't want to step on the toes of the future OS.
|
|
||||||
|
|
||||||
If:
|
|
||||||
|
|
||||||
- we are running under what we think is PowerVM (compatible property of /
|
|
||||||
begins with "IBM"), and
|
|
||||||
|
|
||||||
- the full amount of RMA is less than 512MB (as determined by the reg
|
|
||||||
property of /memory)
|
|
||||||
|
|
||||||
then call CAS as follows: (refer to the Linux on Power Architecture
|
|
||||||
Reference, LoPAR, which is public, at B.5.2.3):
|
|
||||||
|
|
||||||
- Use the "any" PVR value and supply 2 option vectors.
|
|
||||||
|
|
||||||
- Set option vector 1 (PowerPC Server Processor Architecture Level)
|
|
||||||
to "ignore".
|
|
||||||
|
|
||||||
- Set option vector 2 with default or Linux-like options, including a
|
|
||||||
min-rma-size of 512MB.
|
|
||||||
|
|
||||||
This will cause a CAS reboot and the partition will restart with 512MB
|
|
||||||
of RMA. Grub will notice the 512MB and not call CAS again.
|
|
||||||
|
|
||||||
(A partition can be configured with only 256MB of memory, which would
|
|
||||||
mean this request couldn't be satisfied, but PFW refuses to load with
|
|
||||||
only 256MB of memory, so it's a bit moot. SLOF will run fine with 256MB,
|
|
||||||
but we will never call CAS under qemu/SLOF because /compatible won't
|
|
||||||
begin with "IBM".)
|
|
||||||
|
|
||||||
One of the first things Linux does while still running under OpenFirmware
|
|
||||||
is to call CAS with a much fuller set of options (including asking for
|
|
||||||
512MB of memory). This includes a much more restrictive set of PVR values
|
|
||||||
and processor support levels, and this will induce another reboot. On this
|
|
||||||
reboot grub will again notice the higher RMA, and not call CAS. We will get
|
|
||||||
to Linux, Linux will call CAS but because the values are now set for Linux
|
|
||||||
this will not induce another CAS reboot and we will finally boot.
|
|
||||||
|
|
||||||
On all subsequent boots, everything will be configured with 512MB of RMA
|
|
||||||
and all the settings Linux likes, so there will be no further CAS reboots.
|
|
||||||
|
|
||||||
(phyp is super sticky with the RMA size - it persists even on cold boots.
|
|
||||||
So if you've ever booted Linux in a partition, you'll probably never have
|
|
||||||
grub call CAS. It'll only ever fire the first time a partition loads grub,
|
|
||||||
or if you deliberately lower the amount of memory your partition has below
|
|
||||||
512MB.)
|
|
||||||
|
|
||||||
Signed-off-by: Daniel Axtens <dja@axtens.net>
|
|
||||||
---
|
|
||||||
grub-core/kern/ieee1275/cmain.c | 3 +
|
|
||||||
grub-core/kern/ieee1275/init.c | 144 ++++++++++++++++++++++++++++++++++++++-
|
|
||||||
include/grub/ieee1275/ieee1275.h | 8 ++-
|
|
||||||
3 files changed, 152 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/grub-core/kern/ieee1275/cmain.c b/grub-core/kern/ieee1275/cmain.c
|
|
||||||
index 04df9d2c667..6435628ec57 100644
|
|
||||||
--- a/grub-core/kern/ieee1275/cmain.c
|
|
||||||
+++ b/grub-core/kern/ieee1275/cmain.c
|
|
||||||
@@ -127,6 +127,9 @@ grub_ieee1275_find_options (void)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ if (grub_strncmp (tmp, "IBM,", 4) == 0)
|
|
||||||
+ grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_CAN_TRY_CAS_FOR_MORE_MEMORY);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_smartfirmware)
|
|
||||||
diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c
|
|
||||||
index c61d91a0285..9704715c837 100644
|
|
||||||
--- a/grub-core/kern/ieee1275/init.c
|
|
||||||
+++ b/grub-core/kern/ieee1275/init.c
|
|
||||||
@@ -242,6 +242,135 @@ heap_init (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* How much memory does OF believe it has? (regardless of whether
|
|
||||||
+ it's accessible or not) */
|
|
||||||
+static grub_err_t
|
|
||||||
+grub_ieee1275_total_mem (grub_uint64_t *total)
|
|
||||||
+{
|
|
||||||
+ grub_ieee1275_phandle_t root;
|
|
||||||
+ grub_ieee1275_phandle_t memory;
|
|
||||||
+ grub_uint32_t reg[4];
|
|
||||||
+ grub_ssize_t reg_size;
|
|
||||||
+ grub_uint32_t address_cells = 1;
|
|
||||||
+ grub_uint32_t size_cells = 1;
|
|
||||||
+ grub_uint64_t size;
|
|
||||||
+
|
|
||||||
+ /* If we fail to get to the end, report 0. */
|
|
||||||
+ *total = 0;
|
|
||||||
+
|
|
||||||
+ /* Determine the format of each entry in `reg'. */
|
|
||||||
+ grub_ieee1275_finddevice ("/", &root);
|
|
||||||
+ grub_ieee1275_get_integer_property (root, "#address-cells", &address_cells,
|
|
||||||
+ sizeof address_cells, 0);
|
|
||||||
+ grub_ieee1275_get_integer_property (root, "#size-cells", &size_cells,
|
|
||||||
+ sizeof size_cells, 0);
|
|
||||||
+
|
|
||||||
+ if (size_cells > address_cells)
|
|
||||||
+ address_cells = size_cells;
|
|
||||||
+
|
|
||||||
+ /* Load `/memory/reg'. */
|
|
||||||
+ if (grub_ieee1275_finddevice ("/memory", &memory))
|
|
||||||
+ return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
|
||||||
+ "couldn't find /memory node");
|
|
||||||
+ if (grub_ieee1275_get_integer_property (memory, "reg", reg,
|
|
||||||
+ sizeof reg, ®_size))
|
|
||||||
+ return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
|
||||||
+ "couldn't examine /memory/reg property");
|
|
||||||
+ if (reg_size < 0 || (grub_size_t) reg_size > sizeof (reg))
|
|
||||||
+ return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
|
||||||
+ "/memory response buffer exceeded");
|
|
||||||
+
|
|
||||||
+ if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_BROKEN_ADDRESS_CELLS))
|
|
||||||
+ {
|
|
||||||
+ address_cells = 1;
|
|
||||||
+ size_cells = 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Decode only the size */
|
|
||||||
+ size = reg[address_cells];
|
|
||||||
+ if (size_cells == 2)
|
|
||||||
+ size = (size << 32) | reg[address_cells + 1];
|
|
||||||
+
|
|
||||||
+ *total = size;
|
|
||||||
+
|
|
||||||
+ return grub_errno;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* Based on linux - arch/powerpc/kernel/prom_init.c */
|
|
||||||
+struct option_vector2 {
|
|
||||||
+ grub_uint8_t byte1;
|
|
||||||
+ grub_uint16_t reserved;
|
|
||||||
+ grub_uint32_t real_base;
|
|
||||||
+ grub_uint32_t real_size;
|
|
||||||
+ grub_uint32_t virt_base;
|
|
||||||
+ grub_uint32_t virt_size;
|
|
||||||
+ grub_uint32_t load_base;
|
|
||||||
+ grub_uint32_t min_rma;
|
|
||||||
+ grub_uint32_t min_load;
|
|
||||||
+ grub_uint8_t min_rma_percent;
|
|
||||||
+ grub_uint8_t max_pft_size;
|
|
||||||
+} __attribute__((packed));
|
|
||||||
+
|
|
||||||
+struct pvr_entry {
|
|
||||||
+ grub_uint32_t mask;
|
|
||||||
+ grub_uint32_t entry;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+struct cas_vector {
|
|
||||||
+ struct {
|
|
||||||
+ struct pvr_entry terminal;
|
|
||||||
+ } pvr_list;
|
|
||||||
+ grub_uint8_t num_vecs;
|
|
||||||
+ grub_uint8_t vec1_size;
|
|
||||||
+ grub_uint8_t vec1;
|
|
||||||
+ grub_uint8_t vec2_size;
|
|
||||||
+ struct option_vector2 vec2;
|
|
||||||
+} __attribute__((packed));
|
|
||||||
+
|
|
||||||
+/* Call ibm,client-architecture-support to try to get more RMA.
|
|
||||||
+ We ask for 512MB which should be enough to verify a distro kernel.
|
|
||||||
+ We ignore most errors: if we don't succeed we'll proceed with whatever
|
|
||||||
+ memory we have. */
|
|
||||||
+static void
|
|
||||||
+grub_ieee1275_ibm_cas (void)
|
|
||||||
+{
|
|
||||||
+ int rc;
|
|
||||||
+ grub_ieee1275_ihandle_t root;
|
|
||||||
+ struct cas_args {
|
|
||||||
+ struct grub_ieee1275_common_hdr common;
|
|
||||||
+ grub_ieee1275_cell_t method;
|
|
||||||
+ grub_ieee1275_ihandle_t ihandle;
|
|
||||||
+ grub_ieee1275_cell_t cas_addr;
|
|
||||||
+ grub_ieee1275_cell_t result;
|
|
||||||
+ } args;
|
|
||||||
+ struct cas_vector vector = {
|
|
||||||
+ .pvr_list = { { 0x00000000, 0xffffffff } }, /* any processor */
|
|
||||||
+ .num_vecs = 2 - 1,
|
|
||||||
+ .vec1_size = 0,
|
|
||||||
+ .vec1 = 0x80, /* ignore */
|
|
||||||
+ .vec2_size = 1 + sizeof(struct option_vector2) - 2,
|
|
||||||
+ .vec2 = {
|
|
||||||
+ 0, 0, -1, -1, -1, -1, -1, 512, -1, 0, 48
|
|
||||||
+ },
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ INIT_IEEE1275_COMMON (&args.common, "call-method", 3, 2);
|
|
||||||
+ args.method = (grub_ieee1275_cell_t)"ibm,client-architecture-support";
|
|
||||||
+ rc = grub_ieee1275_open("/", &root);
|
|
||||||
+ if (rc) {
|
|
||||||
+ grub_error (GRUB_ERR_IO, "could not open root when trying to call CAS");
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ args.ihandle = root;
|
|
||||||
+ args.cas_addr = (grub_ieee1275_cell_t)&vector;
|
|
||||||
+
|
|
||||||
+ grub_printf("Calling ibm,client-architecture-support...");
|
|
||||||
+ IEEE1275_CALL_ENTRY_FN (&args);
|
|
||||||
+ grub_printf("done\n");
|
|
||||||
+
|
|
||||||
+ grub_ieee1275_close(root);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
grub_claim_heap (void)
|
|
||||||
{
|
|
||||||
@@ -249,11 +378,22 @@ grub_claim_heap (void)
|
|
||||||
|
|
||||||
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_FORCE_CLAIM))
|
|
||||||
{
|
|
||||||
- heap_init (GRUB_IEEE1275_STATIC_HEAP_START, GRUB_IEEE1275_STATIC_HEAP_LEN,
|
|
||||||
- 1, &total);
|
|
||||||
+ heap_init (GRUB_IEEE1275_STATIC_HEAP_START,
|
|
||||||
+ GRUB_IEEE1275_STATIC_HEAP_LEN, 1, &total);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_CAN_TRY_CAS_FOR_MORE_MEMORY))
|
|
||||||
+ {
|
|
||||||
+ grub_uint64_t rma_size;
|
|
||||||
+ grub_err_t err;
|
|
||||||
+
|
|
||||||
+ err = grub_ieee1275_total_mem (&rma_size);
|
|
||||||
+ /* if we have an error, don't call CAS, just hope for the best */
|
|
||||||
+ if (!err && rma_size < (512 * 1024 * 1024))
|
|
||||||
+ grub_ieee1275_ibm_cas();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
grub_machine_mmap_iterate (heap_size, &total);
|
|
||||||
|
|
||||||
total = total / 4;
|
|
||||||
diff --git a/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h
|
|
||||||
index b5a1d49bbc3..e0a6c2ce1e6 100644
|
|
||||||
--- a/include/grub/ieee1275/ieee1275.h
|
|
||||||
+++ b/include/grub/ieee1275/ieee1275.h
|
|
||||||
@@ -149,7 +149,13 @@ enum grub_ieee1275_flag
|
|
||||||
|
|
||||||
GRUB_IEEE1275_FLAG_RAW_DEVNAMES,
|
|
||||||
|
|
||||||
- GRUB_IEEE1275_FLAG_DISABLE_VIDEO_SUPPORT
|
|
||||||
+ GRUB_IEEE1275_FLAG_DISABLE_VIDEO_SUPPORT,
|
|
||||||
+
|
|
||||||
+ /* On PFW, the first time we boot a Linux partition, we may only get 256MB
|
|
||||||
+ of real memory area, even if the partition has more memory. Set this flag
|
|
||||||
+ if we think we're running under PFW. Then, if this flag is set, and the
|
|
||||||
+ RMA is only 256MB in size, try asking for more with CAS. */
|
|
||||||
+ GRUB_IEEE1275_FLAG_CAN_TRY_CAS_FOR_MORE_MEMORY,
|
|
||||||
};
|
|
||||||
|
|
||||||
extern int EXPORT_FUNC(grub_ieee1275_test_flag) (enum grub_ieee1275_flag flag);
|
|
@ -12,7 +12,7 @@ Signed-off-by: Jan Pokorný <jpokorny@fedoraproject.org>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/util/grub.d/10_reset_boot_success.in b/util/grub.d/10_reset_boot_success.in
|
diff --git a/util/grub.d/10_reset_boot_success.in b/util/grub.d/10_reset_boot_success.in
|
||||||
index 737e1ae5b68..e73f4137b36 100644
|
index 737e1ae5b6..e73f4137b3 100644
|
||||||
--- a/util/grub.d/10_reset_boot_success.in
|
--- a/util/grub.d/10_reset_boot_success.in
|
||||||
+++ b/util/grub.d/10_reset_boot_success.in
|
+++ b/util/grub.d/10_reset_boot_success.in
|
||||||
@@ -15,7 +15,7 @@ fi
|
@@ -15,7 +15,7 @@ fi
|
@ -13,7 +13,7 @@ debug output to ./configure and fixes #44.
|
|||||||
2 files changed, 9 insertions(+)
|
2 files changed, 9 insertions(+)
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
diff --git a/configure.ac b/configure.ac
|
||||||
index d5d2a28b4ef..c7842ec29d8 100644
|
index d5d2a28b4e..c7842ec29d 100644
|
||||||
--- a/configure.ac
|
--- a/configure.ac
|
||||||
+++ b/configure.ac
|
+++ b/configure.ac
|
||||||
@@ -1936,6 +1936,8 @@ AC_ARG_ENABLE([rpm-sort],
|
@@ -1936,6 +1936,8 @@ AC_ARG_ENABLE([rpm-sort],
|
||||||
@ -46,7 +46,7 @@ index d5d2a28b4ef..c7842ec29d8 100644
|
|||||||
echo starfield theme: Yes
|
echo starfield theme: Yes
|
||||||
echo With DejaVuSans font from $DJVU_FONT_SOURCE
|
echo With DejaVuSans font from $DJVU_FONT_SOURCE
|
||||||
diff --git a/Makefile.util.def b/Makefile.util.def
|
diff --git a/Makefile.util.def b/Makefile.util.def
|
||||||
index 8cfbe69a76e..3f191aa8095 100644
|
index 8cfbe69a76..3f191aa809 100644
|
||||||
--- a/Makefile.util.def
|
--- a/Makefile.util.def
|
||||||
+++ b/Makefile.util.def
|
+++ b/Makefile.util.def
|
||||||
@@ -774,6 +774,7 @@ program = {
|
@@ -774,6 +774,7 @@ program = {
|
@ -22,7 +22,7 @@ Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
|||||||
1 file changed, 5 insertions(+), 14 deletions(-)
|
1 file changed, 5 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
diff --git a/configure.ac b/configure.ac
|
||||||
index c7842ec29d8..3c808a72230 100644
|
index c7842ec29d..3c808a7223 100644
|
||||||
--- a/configure.ac
|
--- a/configure.ac
|
||||||
+++ b/configure.ac
|
+++ b/configure.ac
|
||||||
@@ -1947,24 +1947,15 @@ if test x"$rpm_sort_excuse" = x ; then
|
@@ -1947,24 +1947,15 @@ if test x"$rpm_sort_excuse" = x ; then
|
@ -11,7 +11,7 @@ Subject: [PATCH] Allow chainloading EFI apps from loop mounts.
|
|||||||
create mode 100644 include/grub/loopback.h
|
create mode 100644 include/grub/loopback.h
|
||||||
|
|
||||||
diff --git a/grub-core/disk/loopback.c b/grub-core/disk/loopback.c
|
diff --git a/grub-core/disk/loopback.c b/grub-core/disk/loopback.c
|
||||||
index 41bebd14fe3..99f47924ec2 100644
|
index 41bebd14fe..99f47924ec 100644
|
||||||
--- a/grub-core/disk/loopback.c
|
--- a/grub-core/disk/loopback.c
|
||||||
+++ b/grub-core/disk/loopback.c
|
+++ b/grub-core/disk/loopback.c
|
||||||
@@ -21,20 +21,13 @@
|
@@ -21,20 +21,13 @@
|
||||||
@ -37,7 +37,7 @@ index 41bebd14fe3..99f47924ec2 100644
|
|||||||
static unsigned long last_id = 0;
|
static unsigned long last_id = 0;
|
||||||
|
|
||||||
diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c
|
diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c
|
||||||
index d41e8ea14a8..3af6b122926 100644
|
index d41e8ea14a..3af6b12292 100644
|
||||||
--- a/grub-core/loader/efi/chainloader.c
|
--- a/grub-core/loader/efi/chainloader.c
|
||||||
+++ b/grub-core/loader/efi/chainloader.c
|
+++ b/grub-core/loader/efi/chainloader.c
|
||||||
@@ -24,6 +24,7 @@
|
@@ -24,6 +24,7 @@
|
||||||
@ -100,7 +100,7 @@ index d41e8ea14a8..3af6b122926 100644
|
|||||||
|
|
||||||
diff --git a/include/grub/loopback.h b/include/grub/loopback.h
|
diff --git a/include/grub/loopback.h b/include/grub/loopback.h
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 00000000000..3b9a9e32e80
|
index 0000000000..3b9a9e32e8
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/include/grub/loopback.h
|
+++ b/include/grub/loopback.h
|
||||||
@@ -0,0 +1,30 @@
|
@@ -0,0 +1,30 @@
|
@ -11,7 +11,7 @@ server ack packet. Currently that case is not handled, add support for it.
|
|||||||
1 file changed, 23 insertions(+), 2 deletions(-)
|
1 file changed, 23 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c
|
diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c
|
||||||
index e11d759f19a..1a24f38a21a 100644
|
index e11d759f19..1a24f38a21 100644
|
||||||
--- a/grub-core/net/drivers/efi/efinet.c
|
--- a/grub-core/net/drivers/efi/efinet.c
|
||||||
+++ b/grub-core/net/drivers/efi/efinet.c
|
+++ b/grub-core/net/drivers/efi/efinet.c
|
||||||
@@ -850,10 +850,31 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char **device,
|
@@ -850,10 +850,31 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char **device,
|
@ -23,7 +23,7 @@ Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
|||||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c
|
diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c
|
||||||
index e7dd78e6635..731d346f886 100644
|
index e7dd78e663..731d346f88 100644
|
||||||
--- a/grub-core/fs/ext2.c
|
--- a/grub-core/fs/ext2.c
|
||||||
+++ b/grub-core/fs/ext2.c
|
+++ b/grub-core/fs/ext2.c
|
||||||
@@ -103,6 +103,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
@@ -103,6 +103,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
@ -20,7 +20,7 @@ Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
|||||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
|
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
|
||||||
index 68adb55d893..c9296154f51 100644
|
index 68adb55d89..c9296154f5 100644
|
||||||
--- a/util/grub.d/10_linux.in
|
--- a/util/grub.d/10_linux.in
|
||||||
+++ b/util/grub.d/10_linux.in
|
+++ b/util/grub.d/10_linux.in
|
||||||
@@ -261,7 +261,9 @@ if [ -z "\${kernelopts}" ]; then
|
@@ -261,7 +261,9 @@ if [ -z "\${kernelopts}" ]; then
|
@ -14,7 +14,7 @@ Signed-off-by: Paulo Flabiano Smorigo <pfsmorigo@br.ibm.com>
|
|||||||
1 file changed, 7 insertions(+)
|
1 file changed, 7 insertions(+)
|
||||||
|
|
||||||
diff --git a/grub-core/gettext/gettext.c b/grub-core/gettext/gettext.c
|
diff --git a/grub-core/gettext/gettext.c b/grub-core/gettext/gettext.c
|
||||||
index 84d520cd494..87a912ac6e5 100644
|
index 84d520cd49..87a912ac6e 100644
|
||||||
--- a/grub-core/gettext/gettext.c
|
--- a/grub-core/gettext/gettext.c
|
||||||
+++ b/grub-core/gettext/gettext.c
|
+++ b/grub-core/gettext/gettext.c
|
||||||
@@ -424,6 +424,13 @@ grub_gettext_init_ext (struct grub_gettext_context *ctx,
|
@@ -424,6 +424,13 @@ grub_gettext_init_ext (struct grub_gettext_context *ctx,
|
@ -19,7 +19,7 @@ Resolves: rhbz#1914571
|
|||||||
1 file changed, 1 insertion(+)
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
diff --git a/docs/grub-boot-success.timer b/docs/grub-boot-success.timer
|
diff --git a/docs/grub-boot-success.timer b/docs/grub-boot-success.timer
|
||||||
index 5d8fcba21aa..406f1720056 100644
|
index 5d8fcba21a..406f172005 100644
|
||||||
--- a/docs/grub-boot-success.timer
|
--- a/docs/grub-boot-success.timer
|
||||||
+++ b/docs/grub-boot-success.timer
|
+++ b/docs/grub-boot-success.timer
|
||||||
@@ -1,6 +1,7 @@
|
@@ -1,6 +1,7 @@
|
@ -15,7 +15,7 @@ Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
|||||||
1 file changed, 1 insertion(+), 8 deletions(-)
|
1 file changed, 1 insertion(+), 8 deletions(-)
|
||||||
|
|
||||||
diff --git a/util/grub-set-password.in b/util/grub-set-password.in
|
diff --git a/util/grub-set-password.in b/util/grub-set-password.in
|
||||||
index c0b5ebbfdc5..d8005e5a142 100644
|
index c0b5ebbfdc..d8005e5a14 100644
|
||||||
--- a/util/grub-set-password.in
|
--- a/util/grub-set-password.in
|
||||||
+++ b/util/grub-set-password.in
|
+++ b/util/grub-set-password.in
|
||||||
@@ -1,11 +1,6 @@
|
@@ -1,11 +1,6 @@
|
@ -14,7 +14,7 @@ Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
|
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
|
||||||
index c9296154f51..6ee0a2cf3d0 100644
|
index c9296154f5..6ee0a2cf3d 100644
|
||||||
--- a/util/grub.d/10_linux.in
|
--- a/util/grub.d/10_linux.in
|
||||||
+++ b/util/grub.d/10_linux.in
|
+++ b/util/grub.d/10_linux.in
|
||||||
@@ -96,7 +96,7 @@ cat <<EOF
|
@@ -96,7 +96,7 @@ cat <<EOF
|
@ -30,7 +30,7 @@ Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
|||||||
1 file changed, 8 insertions(+), 13 deletions(-)
|
1 file changed, 8 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
diff --git a/util/grub.d/30_uefi-firmware.in b/util/grub.d/30_uefi-firmware.in
|
diff --git a/util/grub.d/30_uefi-firmware.in b/util/grub.d/30_uefi-firmware.in
|
||||||
index d344d3883d7..b6041b55e2a 100644
|
index d344d3883d..b6041b55e2 100644
|
||||||
--- a/util/grub.d/30_uefi-firmware.in
|
--- a/util/grub.d/30_uefi-firmware.in
|
||||||
+++ b/util/grub.d/30_uefi-firmware.in
|
+++ b/util/grub.d/30_uefi-firmware.in
|
||||||
@@ -26,19 +26,14 @@ export TEXTDOMAINDIR="@localedir@"
|
@@ -26,19 +26,14 @@ export TEXTDOMAINDIR="@localedir@"
|
@ -21,7 +21,7 @@ Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
|||||||
1 file changed, 23 insertions(+), 20 deletions(-)
|
1 file changed, 23 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
diff --git a/grub-core/commands/efi/efifwsetup.c b/grub-core/commands/efi/efifwsetup.c
|
diff --git a/grub-core/commands/efi/efifwsetup.c b/grub-core/commands/efi/efifwsetup.c
|
||||||
index eaca0328388..328c45e82e0 100644
|
index eaca032838..328c45e82e 100644
|
||||||
--- a/grub-core/commands/efi/efifwsetup.c
|
--- a/grub-core/commands/efi/efifwsetup.c
|
||||||
+++ b/grub-core/commands/efi/efifwsetup.c
|
+++ b/grub-core/commands/efi/efifwsetup.c
|
||||||
@@ -27,6 +27,25 @@
|
@@ -27,6 +27,25 @@
|
@ -19,7 +19,7 @@ Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
|
|||||||
1 file changed, 66 insertions(+), 34 deletions(-)
|
1 file changed, 66 insertions(+), 34 deletions(-)
|
||||||
|
|
||||||
diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c
|
diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c
|
||||||
index 47f8cf0d84b..4a252d5e7e9 100644
|
index 47f8cf0d84..4a252d5e7e 100644
|
||||||
--- a/grub-core/loader/arm64/linux.c
|
--- a/grub-core/loader/arm64/linux.c
|
||||||
+++ b/grub-core/loader/arm64/linux.c
|
+++ b/grub-core/loader/arm64/linux.c
|
||||||
@@ -41,6 +41,8 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
@@ -41,6 +41,8 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
@ -26,7 +26,7 @@ Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
|||||||
1 file changed, 51 insertions(+), 7 deletions(-)
|
1 file changed, 51 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c
|
diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c
|
||||||
index 155bf366da2..f9ccca502ee 100644
|
index 155bf366da..f9ccca502e 100644
|
||||||
--- a/grub-core/normal/main.c
|
--- a/grub-core/normal/main.c
|
||||||
+++ b/grub-core/normal/main.c
|
+++ b/grub-core/normal/main.c
|
||||||
@@ -339,18 +339,13 @@ grub_enter_normal_mode (const char *config)
|
@@ -339,18 +339,13 @@ grub_enter_normal_mode (const char *config)
|
@ -23,7 +23,7 @@ Signed-off-by: Daniel Axtens <dja@axtens.net>
|
|||||||
1 file changed, 33 insertions(+), 5 deletions(-)
|
1 file changed, 33 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c
|
diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c
|
||||||
index 0285e95a2bb..e809a5edec1 100644
|
index 0285e95a2b..e809a5edec 100644
|
||||||
--- a/grub-core/kern/main.c
|
--- a/grub-core/kern/main.c
|
||||||
+++ b/grub-core/kern/main.c
|
+++ b/grub-core/kern/main.c
|
||||||
@@ -216,13 +216,41 @@ grub_set_prefix_and_root (void)
|
@@ -216,13 +216,41 @@ grub_set_prefix_and_root (void)
|
@ -15,7 +15,7 @@ Signed-off-by: Daniel Axtens <dja@axtens.net>
|
|||||||
1 file changed, 13 insertions(+), 2 deletions(-)
|
1 file changed, 13 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c
|
diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c
|
||||||
index e809a5edec1..2d0d2bbd4cf 100644
|
index e809a5edec..2d0d2bbd4c 100644
|
||||||
--- a/grub-core/kern/main.c
|
--- a/grub-core/kern/main.c
|
||||||
+++ b/grub-core/kern/main.c
|
+++ b/grub-core/kern/main.c
|
||||||
@@ -236,9 +236,20 @@ grub_set_prefix_and_root (void)
|
@@ -236,9 +236,20 @@ grub_set_prefix_and_root (void)
|
@ -25,7 +25,7 @@ Signed-off-by: Peter Jones <pjones@redhat.com>
|
|||||||
3 files changed, 3 insertions(+), 1 deletion(-)
|
3 files changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c
|
diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c
|
||||||
index 4a252d5e7e9..f18d90bd749 100644
|
index 4a252d5e7e..f18d90bd74 100644
|
||||||
--- a/grub-core/loader/arm64/linux.c
|
--- a/grub-core/loader/arm64/linux.c
|
||||||
+++ b/grub-core/loader/arm64/linux.c
|
+++ b/grub-core/loader/arm64/linux.c
|
||||||
@@ -322,7 +322,7 @@ parse_pe_header (void *kernel, grub_uint64_t *total_size,
|
@@ -322,7 +322,7 @@ parse_pe_header (void *kernel, grub_uint64_t *total_size,
|
||||||
@ -38,7 +38,7 @@ index 4a252d5e7e9..f18d90bd749 100644
|
|||||||
|
|
||||||
*total_size = pe->opt.image_size;
|
*total_size = pe->opt.image_size;
|
||||||
diff --git a/include/grub/arm/linux.h b/include/grub/arm/linux.h
|
diff --git a/include/grub/arm/linux.h b/include/grub/arm/linux.h
|
||||||
index b582f67f661..966a5074f53 100644
|
index b582f67f66..966a5074f5 100644
|
||||||
--- a/include/grub/arm/linux.h
|
--- a/include/grub/arm/linux.h
|
||||||
+++ b/include/grub/arm/linux.h
|
+++ b/include/grub/arm/linux.h
|
||||||
@@ -44,6 +44,7 @@ struct grub_arm_linux_pe_header
|
@@ -44,6 +44,7 @@ struct grub_arm_linux_pe_header
|
||||||
@ -50,7 +50,7 @@ index b582f67f661..966a5074f53 100644
|
|||||||
# define grub_armxx_linux_pe_header grub_arm_linux_pe_header
|
# define grub_armxx_linux_pe_header grub_arm_linux_pe_header
|
||||||
#endif
|
#endif
|
||||||
diff --git a/include/grub/arm64/linux.h b/include/grub/arm64/linux.h
|
diff --git a/include/grub/arm64/linux.h b/include/grub/arm64/linux.h
|
||||||
index ea030312df3..422bf2bf24b 100644
|
index ea030312df..422bf2bf24 100644
|
||||||
--- a/include/grub/arm64/linux.h
|
--- a/include/grub/arm64/linux.h
|
||||||
+++ b/include/grub/arm64/linux.h
|
+++ b/include/grub/arm64/linux.h
|
||||||
@@ -48,6 +48,7 @@ struct grub_arm64_linux_pe_header
|
@@ -48,6 +48,7 @@ struct grub_arm64_linux_pe_header
|
@ -81,7 +81,7 @@ Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
|||||||
1 file changed, 10 insertions(+), 4 deletions(-)
|
1 file changed, 10 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c
|
diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c
|
||||||
index 0f524c3a8a6..e3816d1ec4a 100644
|
index 0f524c3a8a..e3816d1ec4 100644
|
||||||
--- a/grub-core/fs/xfs.c
|
--- a/grub-core/fs/xfs.c
|
||||||
+++ b/grub-core/fs/xfs.c
|
+++ b/grub-core/fs/xfs.c
|
||||||
@@ -192,6 +192,11 @@ struct grub_xfs_time_legacy
|
@@ -192,6 +192,11 @@ struct grub_xfs_time_legacy
|
@ -13,7 +13,7 @@ Signed-off-by: Robbie Harwood <rharwood@redhat.com>
|
|||||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c
|
diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c
|
||||||
index 9557254035e..f3044945742 100644
|
index 9557254035..f304494574 100644
|
||||||
--- a/grub-core/kern/dl.c
|
--- a/grub-core/kern/dl.c
|
||||||
+++ b/grub-core/kern/dl.c
|
+++ b/grub-core/kern/dl.c
|
||||||
@@ -528,14 +528,16 @@ grub_dl_find_section_index (Elf_Ehdr *e, const char *name)
|
@@ -528,14 +528,16 @@ grub_dl_find_section_index (Elf_Ehdr *e, const char *name)
|
@ -79,7 +79,7 @@ Signed-off-by: Robbie Harwood <rharwood@redhat.com>
|
|||||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
|
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
|
||||||
index 3f3459b2c70..6b00eb55575 100644
|
index 3f3459b2c7..6b00eb5557 100644
|
||||||
--- a/grub-core/Makefile.core.def
|
--- a/grub-core/Makefile.core.def
|
||||||
+++ b/grub-core/Makefile.core.def
|
+++ b/grub-core/Makefile.core.def
|
||||||
@@ -89,7 +89,7 @@ kernel = {
|
@@ -89,7 +89,7 @@ kernel = {
|
||||||
@ -92,7 +92,7 @@ index 3f3459b2c70..6b00eb55575 100644
|
|||||||
mips_arc_ldflags = '-Wl,-Ttext,$(TARGET_LINK_ADDR)';
|
mips_arc_ldflags = '-Wl,-Ttext,$(TARGET_LINK_ADDR)';
|
||||||
mips_qemu_mips_ldflags = '-Wl,-Ttext,0x80200000';
|
mips_qemu_mips_ldflags = '-Wl,-Ttext,0x80200000';
|
||||||
diff --git a/include/grub/offsets.h b/include/grub/offsets.h
|
diff --git a/include/grub/offsets.h b/include/grub/offsets.h
|
||||||
index 871e1cd4c38..69211aa798b 100644
|
index 871e1cd4c3..69211aa798 100644
|
||||||
--- a/include/grub/offsets.h
|
--- a/include/grub/offsets.h
|
||||||
+++ b/include/grub/offsets.h
|
+++ b/include/grub/offsets.h
|
||||||
@@ -63,7 +63,7 @@
|
@@ -63,7 +63,7 @@
|
@ -26,7 +26,7 @@ Signed-off-by: Michael Chang <mchang@suse.com>
|
|||||||
1 file changed, 2 insertions(+)
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
|
diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
|
||||||
index f55339a3f64..520a672cd2c 100644
|
index f55339a3f6..520a672cd2 100644
|
||||||
--- a/util/grub-mkconfig.in
|
--- a/util/grub-mkconfig.in
|
||||||
+++ b/util/grub-mkconfig.in
|
+++ b/util/grub-mkconfig.in
|
||||||
@@ -311,7 +311,9 @@ and /etc/grub.d/* files or please file a bug report with
|
@@ -311,7 +311,9 @@ and /etc/grub.d/* files or please file a bug report with
|
@ -20,7 +20,7 @@ Signed-off-by: Robbie Harwood <rharwood@redhat.com>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/grub-core/commands/search.c b/grub-core/commands/search.c
|
diff --git a/grub-core/commands/search.c b/grub-core/commands/search.c
|
||||||
index ed090b3af8b..51656e361cc 100644
|
index ed090b3af8..51656e361c 100644
|
||||||
--- a/grub-core/commands/search.c
|
--- a/grub-core/commands/search.c
|
||||||
+++ b/grub-core/commands/search.c
|
+++ b/grub-core/commands/search.c
|
||||||
@@ -64,7 +64,7 @@ iterate_device (const char *name, void *data)
|
@@ -64,7 +64,7 @@ iterate_device (const char *name, void *data)
|
@ -27,7 +27,7 @@ Signed-off-by: Robbie Harwood <rharwood@redhat.com>
|
|||||||
3 files changed, 47 insertions(+), 13 deletions(-)
|
3 files changed, 47 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
diff --git a/grub-core/commands/search.c b/grub-core/commands/search.c
|
diff --git a/grub-core/commands/search.c b/grub-core/commands/search.c
|
||||||
index 51656e361cc..57d26ced8a8 100644
|
index 51656e361c..57d26ced8a 100644
|
||||||
--- a/grub-core/commands/search.c
|
--- a/grub-core/commands/search.c
|
||||||
+++ b/grub-core/commands/search.c
|
+++ b/grub-core/commands/search.c
|
||||||
@@ -47,7 +47,7 @@ struct search_ctx
|
@@ -47,7 +47,7 @@ struct search_ctx
|
||||||
@ -87,7 +87,7 @@ index 51656e361cc..57d26ced8a8 100644
|
|||||||
.nhints = nhints,
|
.nhints = nhints,
|
||||||
.count = 0,
|
.count = 0,
|
||||||
diff --git a/grub-core/commands/search_wrap.c b/grub-core/commands/search_wrap.c
|
diff --git a/grub-core/commands/search_wrap.c b/grub-core/commands/search_wrap.c
|
||||||
index 47fc8eb9966..0b62acf8535 100644
|
index 47fc8eb996..0b62acf853 100644
|
||||||
--- a/grub-core/commands/search_wrap.c
|
--- a/grub-core/commands/search_wrap.c
|
||||||
+++ b/grub-core/commands/search_wrap.c
|
+++ b/grub-core/commands/search_wrap.c
|
||||||
@@ -40,6 +40,7 @@ static const struct grub_arg_option options[] =
|
@@ -40,6 +40,7 @@ static const struct grub_arg_option options[] =
|
||||||
@ -140,7 +140,7 @@ index 47fc8eb9966..0b62acf8535 100644
|
|||||||
grub_error (GRUB_ERR_INVALID_COMMAND, "unspecified search type");
|
grub_error (GRUB_ERR_INVALID_COMMAND, "unspecified search type");
|
||||||
|
|
||||||
diff --git a/include/grub/search.h b/include/grub/search.h
|
diff --git a/include/grub/search.h b/include/grub/search.h
|
||||||
index d80347df34b..4190aeb2cbf 100644
|
index d80347df34..4190aeb2cb 100644
|
||||||
--- a/include/grub/search.h
|
--- a/include/grub/search.h
|
||||||
+++ b/include/grub/search.h
|
+++ b/include/grub/search.h
|
||||||
@@ -19,11 +19,20 @@
|
@@ -19,11 +19,20 @@
|
@ -65,7 +65,7 @@ Signed-off-by: Robbie Harwood <rharwood@redhat.com>
|
|||||||
create mode 100644 grub-core/commands/efi/connectefi.c
|
create mode 100644 grub-core/commands/efi/connectefi.c
|
||||||
|
|
||||||
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
|
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
|
||||||
index 6b00eb55575..97abc01f064 100644
|
index 6b00eb5557..97abc01f06 100644
|
||||||
--- a/grub-core/Makefile.core.def
|
--- a/grub-core/Makefile.core.def
|
||||||
+++ b/grub-core/Makefile.core.def
|
+++ b/grub-core/Makefile.core.def
|
||||||
@@ -833,6 +833,12 @@ module = {
|
@@ -833,6 +833,12 @@ module = {
|
||||||
@ -83,7 +83,7 @@ index 6b00eb55575..97abc01f064 100644
|
|||||||
common = commands/blocklist.c;
|
common = commands/blocklist.c;
|
||||||
diff --git a/grub-core/commands/efi/connectefi.c b/grub-core/commands/efi/connectefi.c
|
diff --git a/grub-core/commands/efi/connectefi.c b/grub-core/commands/efi/connectefi.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 00000000000..8ab75bd51be
|
index 0000000000..8ab75bd51b
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/grub-core/commands/efi/connectefi.c
|
+++ b/grub-core/commands/efi/connectefi.c
|
||||||
@@ -0,0 +1,205 @@
|
@@ -0,0 +1,205 @@
|
||||||
@ -293,7 +293,7 @@ index 00000000000..8ab75bd51be
|
|||||||
+ grub_unregister_command (cmd);
|
+ grub_unregister_command (cmd);
|
||||||
+}
|
+}
|
||||||
diff --git a/grub-core/commands/efi/lsefi.c b/grub-core/commands/efi/lsefi.c
|
diff --git a/grub-core/commands/efi/lsefi.c b/grub-core/commands/efi/lsefi.c
|
||||||
index d1ce99af438..f2d2430e666 100644
|
index d1ce99af43..f2d2430e66 100644
|
||||||
--- a/grub-core/commands/efi/lsefi.c
|
--- a/grub-core/commands/efi/lsefi.c
|
||||||
+++ b/grub-core/commands/efi/lsefi.c
|
+++ b/grub-core/commands/efi/lsefi.c
|
||||||
@@ -19,6 +19,7 @@
|
@@ -19,6 +19,7 @@
|
||||||
@ -305,7 +305,7 @@ index d1ce99af438..f2d2430e666 100644
|
|||||||
#include <grub/efi/pci.h>
|
#include <grub/efi/pci.h>
|
||||||
#include <grub/efi/efi.h>
|
#include <grub/efi/efi.h>
|
||||||
diff --git a/grub-core/disk/efi/efidisk.c b/grub-core/disk/efi/efidisk.c
|
diff --git a/grub-core/disk/efi/efidisk.c b/grub-core/disk/efi/efidisk.c
|
||||||
index fe8ba6e6c93..062143dfffd 100644
|
index fe8ba6e6c9..062143dfff 100644
|
||||||
--- a/grub-core/disk/efi/efidisk.c
|
--- a/grub-core/disk/efi/efidisk.c
|
||||||
+++ b/grub-core/disk/efi/efidisk.c
|
+++ b/grub-core/disk/efi/efidisk.c
|
||||||
@@ -396,6 +396,19 @@ enumerate_disks (void)
|
@@ -396,6 +396,19 @@ enumerate_disks (void)
|
||||||
@ -329,7 +329,7 @@ index fe8ba6e6c93..062143dfffd 100644
|
|||||||
grub_efidisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
|
grub_efidisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
|
||||||
grub_disk_pull_t pull)
|
grub_disk_pull_t pull)
|
||||||
diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c
|
diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c
|
||||||
index 14bc10eb564..7fcca69c17b 100644
|
index 14bc10eb56..7fcca69c17 100644
|
||||||
--- a/grub-core/kern/efi/efi.c
|
--- a/grub-core/kern/efi/efi.c
|
||||||
+++ b/grub-core/kern/efi/efi.c
|
+++ b/grub-core/kern/efi/efi.c
|
||||||
@@ -95,6 +95,19 @@ grub_efi_locate_handle (grub_efi_locate_search_type_t search_type,
|
@@ -95,6 +95,19 @@ grub_efi_locate_handle (grub_efi_locate_search_type_t search_type,
|
||||||
@ -353,7 +353,7 @@ index 14bc10eb564..7fcca69c17b 100644
|
|||||||
grub_efi_open_protocol (grub_efi_handle_t handle,
|
grub_efi_open_protocol (grub_efi_handle_t handle,
|
||||||
grub_efi_guid_t *protocol,
|
grub_efi_guid_t *protocol,
|
||||||
diff --git a/include/grub/efi/disk.h b/include/grub/efi/disk.h
|
diff --git a/include/grub/efi/disk.h b/include/grub/efi/disk.h
|
||||||
index 254475c8428..6845c2f1fd8 100644
|
index 254475c842..6845c2f1fd 100644
|
||||||
--- a/include/grub/efi/disk.h
|
--- a/include/grub/efi/disk.h
|
||||||
+++ b/include/grub/efi/disk.h
|
+++ b/include/grub/efi/disk.h
|
||||||
@@ -27,6 +27,8 @@ grub_efi_handle_t
|
@@ -27,6 +27,8 @@ grub_efi_handle_t
|
||||||
@ -366,7 +366,7 @@ index 254475c8428..6845c2f1fd8 100644
|
|||||||
void grub_efidisk_fini (void);
|
void grub_efidisk_fini (void);
|
||||||
|
|
||||||
diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h
|
diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h
|
||||||
index 8dfc89a33b9..ec52083c49f 100644
|
index 8dfc89a33b..ec52083c49 100644
|
||||||
--- a/include/grub/efi/efi.h
|
--- a/include/grub/efi/efi.h
|
||||||
+++ b/include/grub/efi/efi.h
|
+++ b/include/grub/efi/efi.h
|
||||||
@@ -41,6 +41,11 @@ EXPORT_FUNC(grub_efi_locate_handle) (grub_efi_locate_search_type_t search_type,
|
@@ -41,6 +41,11 @@ EXPORT_FUNC(grub_efi_locate_handle) (grub_efi_locate_search_type_t search_type,
|
||||||
@ -382,7 +382,7 @@ index 8dfc89a33b9..ec52083c49f 100644
|
|||||||
grub_efi_guid_t *protocol,
|
grub_efi_guid_t *protocol,
|
||||||
grub_efi_uint32_t attributes);
|
grub_efi_uint32_t attributes);
|
||||||
diff --git a/NEWS b/NEWS
|
diff --git a/NEWS b/NEWS
|
||||||
index 73b8492bc42..d7c1d23aed7 100644
|
index 73b8492bc4..d7c1d23aed 100644
|
||||||
--- a/NEWS
|
--- a/NEWS
|
||||||
+++ b/NEWS
|
+++ b/NEWS
|
||||||
@@ -98,7 +98,7 @@ New in 2.02:
|
@@ -98,7 +98,7 @@ New in 2.02:
|
@ -1,111 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Daniel Axtens <dja@axtens.net>
|
|
||||||
Date: Fri, 8 Apr 2022 12:35:28 +1000
|
|
||||||
Subject: [PATCH] powerpc: do CAS in a more compatible way
|
|
||||||
|
|
||||||
I wrongly assumed that the most compatible way to perform CAS
|
|
||||||
negotiation was to only set the minimum number of vectors required
|
|
||||||
to ask for more memory. It turns out that this messes up booting
|
|
||||||
if the minimum VP capacity would be less than the default 10% in
|
|
||||||
vector 4.
|
|
||||||
|
|
||||||
Linux configures the minimum capacity to be 1%, so copy it for that
|
|
||||||
and for vector 3 which we now need to specify as well.
|
|
||||||
|
|
||||||
Signed-off-by: Daniel Axtens <dja@axtens.net>
|
|
||||||
(cherry picked from commit e6f02ad4e75cd995a8ee2954d28949c415b6cbfe)
|
|
||||||
---
|
|
||||||
grub-core/kern/ieee1275/init.c | 54 ++++++++++++++++++++++++------------------
|
|
||||||
1 file changed, 31 insertions(+), 23 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c
|
|
||||||
index 9704715c83..ef55107467 100644
|
|
||||||
--- a/grub-core/kern/ieee1275/init.c
|
|
||||||
+++ b/grub-core/kern/ieee1275/init.c
|
|
||||||
@@ -298,33 +298,37 @@ grub_ieee1275_total_mem (grub_uint64_t *total)
|
|
||||||
|
|
||||||
/* Based on linux - arch/powerpc/kernel/prom_init.c */
|
|
||||||
struct option_vector2 {
|
|
||||||
- grub_uint8_t byte1;
|
|
||||||
- grub_uint16_t reserved;
|
|
||||||
- grub_uint32_t real_base;
|
|
||||||
- grub_uint32_t real_size;
|
|
||||||
- grub_uint32_t virt_base;
|
|
||||||
- grub_uint32_t virt_size;
|
|
||||||
- grub_uint32_t load_base;
|
|
||||||
- grub_uint32_t min_rma;
|
|
||||||
- grub_uint32_t min_load;
|
|
||||||
- grub_uint8_t min_rma_percent;
|
|
||||||
- grub_uint8_t max_pft_size;
|
|
||||||
+ grub_uint8_t byte1;
|
|
||||||
+ grub_uint16_t reserved;
|
|
||||||
+ grub_uint32_t real_base;
|
|
||||||
+ grub_uint32_t real_size;
|
|
||||||
+ grub_uint32_t virt_base;
|
|
||||||
+ grub_uint32_t virt_size;
|
|
||||||
+ grub_uint32_t load_base;
|
|
||||||
+ grub_uint32_t min_rma;
|
|
||||||
+ grub_uint32_t min_load;
|
|
||||||
+ grub_uint8_t min_rma_percent;
|
|
||||||
+ grub_uint8_t max_pft_size;
|
|
||||||
} __attribute__((packed));
|
|
||||||
|
|
||||||
struct pvr_entry {
|
|
||||||
- grub_uint32_t mask;
|
|
||||||
- grub_uint32_t entry;
|
|
||||||
+ grub_uint32_t mask;
|
|
||||||
+ grub_uint32_t entry;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct cas_vector {
|
|
||||||
- struct {
|
|
||||||
- struct pvr_entry terminal;
|
|
||||||
- } pvr_list;
|
|
||||||
- grub_uint8_t num_vecs;
|
|
||||||
- grub_uint8_t vec1_size;
|
|
||||||
- grub_uint8_t vec1;
|
|
||||||
- grub_uint8_t vec2_size;
|
|
||||||
- struct option_vector2 vec2;
|
|
||||||
+ struct {
|
|
||||||
+ struct pvr_entry terminal;
|
|
||||||
+ } pvr_list;
|
|
||||||
+ grub_uint8_t num_vecs;
|
|
||||||
+ grub_uint8_t vec1_size;
|
|
||||||
+ grub_uint8_t vec1;
|
|
||||||
+ grub_uint8_t vec2_size;
|
|
||||||
+ struct option_vector2 vec2;
|
|
||||||
+ grub_uint8_t vec3_size;
|
|
||||||
+ grub_uint16_t vec3;
|
|
||||||
+ grub_uint8_t vec4_size;
|
|
||||||
+ grub_uint16_t vec4;
|
|
||||||
} __attribute__((packed));
|
|
||||||
|
|
||||||
/* Call ibm,client-architecture-support to try to get more RMA.
|
|
||||||
@@ -345,13 +349,17 @@ grub_ieee1275_ibm_cas (void)
|
|
||||||
} args;
|
|
||||||
struct cas_vector vector = {
|
|
||||||
.pvr_list = { { 0x00000000, 0xffffffff } }, /* any processor */
|
|
||||||
- .num_vecs = 2 - 1,
|
|
||||||
+ .num_vecs = 4 - 1,
|
|
||||||
.vec1_size = 0,
|
|
||||||
.vec1 = 0x80, /* ignore */
|
|
||||||
.vec2_size = 1 + sizeof(struct option_vector2) - 2,
|
|
||||||
.vec2 = {
|
|
||||||
0, 0, -1, -1, -1, -1, -1, 512, -1, 0, 48
|
|
||||||
},
|
|
||||||
+ .vec3_size = 2 - 1,
|
|
||||||
+ .vec3 = 0x00e0, // ask for FP + VMX + DFP but don't halt if unsatisfied
|
|
||||||
+ .vec4_size = 2 - 1,
|
|
||||||
+ .vec4 = 0x0001, // set required minimum capacity % to the lowest value
|
|
||||||
};
|
|
||||||
|
|
||||||
INIT_IEEE1275_COMMON (&args.common, "call-method", 3, 2);
|
|
||||||
@@ -364,7 +372,7 @@ grub_ieee1275_ibm_cas (void)
|
|
||||||
args.ihandle = root;
|
|
||||||
args.cas_addr = (grub_ieee1275_cell_t)&vector;
|
|
||||||
|
|
||||||
- grub_printf("Calling ibm,client-architecture-support...");
|
|
||||||
+ grub_printf("Calling ibm,client-architecture-support from grub...");
|
|
||||||
IEEE1275_CALL_ENTRY_FN (&args);
|
|
||||||
grub_printf("done\n");
|
|
||||||
|
|
@ -361,7 +361,7 @@ index 618ae6f474..f36ed5cb17 100644
|
|||||||
|
|
||||||
#if defined (_mips)
|
#if defined (_mips)
|
||||||
diff --git a/docs/grub-dev.texi b/docs/grub-dev.texi
|
diff --git a/docs/grub-dev.texi b/docs/grub-dev.texi
|
||||||
index 90083772c8..c23ba313dc 100644
|
index 19f708ee66..7b2455a8fe 100644
|
||||||
--- a/docs/grub-dev.texi
|
--- a/docs/grub-dev.texi
|
||||||
+++ b/docs/grub-dev.texi
|
+++ b/docs/grub-dev.texi
|
||||||
@@ -755,9 +755,9 @@ declare startup asm file ($cpu_$platform_startup) as well as any other files
|
@@ -755,9 +755,9 @@ declare startup asm file ($cpu_$platform_startup) as well as any other files
|
@ -1,71 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Diego Domingos <diegodo@linux.vnet.ibm.com>
|
|
||||||
Date: Thu, 25 Aug 2022 11:37:56 -0400
|
|
||||||
Subject: [PATCH] ieee1275: implement vec5 for cas negotiation
|
|
||||||
|
|
||||||
As a legacy support, if the vector 5 is not implemented, Power
|
|
||||||
Hypervisor will consider the max CPUs as 64 instead 256 currently
|
|
||||||
supported during client-architecture-support negotiation.
|
|
||||||
|
|
||||||
This patch implements the vector 5 and set the MAX CPUs to 256 while
|
|
||||||
setting the others values to 0 (default).
|
|
||||||
|
|
||||||
Signed-off-by: Diego Domingos <diegodo@linux.vnet.ibm.com>
|
|
||||||
Signed-off-by: Robbie Harwood <rharwood@redhat.com>
|
|
||||||
(cherry picked from commit f735c65b6da8a9d4251242b37774e1a517511253)
|
|
||||||
---
|
|
||||||
grub-core/kern/ieee1275/init.c | 20 +++++++++++++++++++-
|
|
||||||
1 file changed, 19 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c
|
|
||||||
index ef55107467..6a51c9efab 100644
|
|
||||||
--- a/grub-core/kern/ieee1275/init.c
|
|
||||||
+++ b/grub-core/kern/ieee1275/init.c
|
|
||||||
@@ -311,6 +311,18 @@ struct option_vector2 {
|
|
||||||
grub_uint8_t max_pft_size;
|
|
||||||
} __attribute__((packed));
|
|
||||||
|
|
||||||
+struct option_vector5 {
|
|
||||||
+ grub_uint8_t byte1;
|
|
||||||
+ grub_uint8_t byte2;
|
|
||||||
+ grub_uint8_t byte3;
|
|
||||||
+ grub_uint8_t cmo;
|
|
||||||
+ grub_uint8_t associativity;
|
|
||||||
+ grub_uint8_t bin_opts;
|
|
||||||
+ grub_uint8_t micro_checkpoint;
|
|
||||||
+ grub_uint8_t reserved0;
|
|
||||||
+ grub_uint32_t max_cpus;
|
|
||||||
+} __attribute__((packed));
|
|
||||||
+
|
|
||||||
struct pvr_entry {
|
|
||||||
grub_uint32_t mask;
|
|
||||||
grub_uint32_t entry;
|
|
||||||
@@ -329,6 +341,8 @@ struct cas_vector {
|
|
||||||
grub_uint16_t vec3;
|
|
||||||
grub_uint8_t vec4_size;
|
|
||||||
grub_uint16_t vec4;
|
|
||||||
+ grub_uint8_t vec5_size;
|
|
||||||
+ struct option_vector5 vec5;
|
|
||||||
} __attribute__((packed));
|
|
||||||
|
|
||||||
/* Call ibm,client-architecture-support to try to get more RMA.
|
|
||||||
@@ -349,7 +363,7 @@ grub_ieee1275_ibm_cas (void)
|
|
||||||
} args;
|
|
||||||
struct cas_vector vector = {
|
|
||||||
.pvr_list = { { 0x00000000, 0xffffffff } }, /* any processor */
|
|
||||||
- .num_vecs = 4 - 1,
|
|
||||||
+ .num_vecs = 5 - 1,
|
|
||||||
.vec1_size = 0,
|
|
||||||
.vec1 = 0x80, /* ignore */
|
|
||||||
.vec2_size = 1 + sizeof(struct option_vector2) - 2,
|
|
||||||
@@ -360,6 +374,10 @@ grub_ieee1275_ibm_cas (void)
|
|
||||||
.vec3 = 0x00e0, // ask for FP + VMX + DFP but don't halt if unsatisfied
|
|
||||||
.vec4_size = 2 - 1,
|
|
||||||
.vec4 = 0x0001, // set required minimum capacity % to the lowest value
|
|
||||||
+ .vec5_size = 1 + sizeof(struct option_vector5) - 2,
|
|
||||||
+ .vec5 = {
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0, 0, 256
|
|
||||||
+ }
|
|
||||||
};
|
|
||||||
|
|
||||||
INIT_IEEE1275_COMMON (&args.common, "call-method", 3, 2);
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user