Merged update from upstream sources
This is an automated DistroBaker update from upstream sources. If you do not know what this is about or would like to opt out, contact the OSCI team. Source: https://src.fedoraproject.org/rpms/grub2.git#f9736ec08517869c0e2d4e3491da8abe09ab1d60
This commit is contained in:
parent
9c56a74842
commit
1d842d2b55
@ -44,7 +44,7 @@ Replace a bunch of machine generated ones with ones that look nicer.
|
||||
util/grub-file.1 | 165 ++++++++++++++++++++++++++++++++++++++
|
||||
util/grub-fstest.1 | 99 +++++++++++++++++++++++
|
||||
util/grub-glue-efi.1 | 31 +++++++
|
||||
util/grub-install.8 | 129 +++++++++++++++++++++++++++++
|
||||
util/grub-install.8 | 128 +++++++++++++++++++++++++++++
|
||||
util/grub-kbdcomp.1 | 19 +++++
|
||||
util/grub-macbless.1 | 22 +++++
|
||||
util/grub-menulst2cfg.1 | 12 +++
|
||||
@ -64,7 +64,7 @@ Replace a bunch of machine generated ones with ones that look nicer.
|
||||
util/grub-script-check.1 | 21 +++++
|
||||
util/grub-set-default.8 | 21 +++++
|
||||
util/grub-sparc64-setup.8 | 12 +++
|
||||
59 files changed, 1319 insertions(+), 147 deletions(-)
|
||||
59 files changed, 1318 insertions(+), 147 deletions(-)
|
||||
delete mode 100644 docs/man/grub-bios-setup.h2m
|
||||
delete mode 100644 docs/man/grub-editenv.h2m
|
||||
delete mode 100644 docs/man/grub-emu.h2m
|
||||
@ -940,10 +940,10 @@ index 00000000000..72bd555d577
|
||||
+.BR "info grub"
|
||||
diff --git a/util/grub-install.8 b/util/grub-install.8
|
||||
new file mode 100644
|
||||
index 00000000000..76272a39d2e
|
||||
index 00000000000..1db89e94b3b
|
||||
--- /dev/null
|
||||
+++ b/util/grub-install.8
|
||||
@@ -0,0 +1,129 @@
|
||||
@@ -0,0 +1,128 @@
|
||||
+.TH GRUB-INSTALL 1 "Wed Feb 26 2014"
|
||||
+.SH NAME
|
||||
+\fBgrub-install\fR \(em Install GRUB on a device.
|
||||
@ -1060,12 +1060,11 @@ index 00000000000..76272a39d2e
|
||||
+
|
||||
+.TP
|
||||
+\fB--bootloader-id\fR=\fIID\fR
|
||||
+Use \fIID\fR as the bootloader ID. This opption is only available on the EFI target platform.
|
||||
+Use \fIID\fR as the bootloader ID. This option is only available on the EFI target platform.
|
||||
+
|
||||
+.TP
|
||||
+\fB--efi-directory\fR=\fIDIR\fR
|
||||
+Use \fIDIR\fR as the EFI System Partition root. This opption is only available on the EFI ta
|
||||
+rget platform.
|
||||
+Use \fIDIR\fR as the EFI System Partition root. This option is only available on the EFI target platform.
|
||||
+
|
||||
+.TP
|
||||
+\fIINSTALL_DEVICE\fR
|
||||
|
@ -265,7 +265,7 @@ index 00000000000..5d8fcba21aa
|
||||
+OnActiveSec=2min
|
||||
diff --git a/util/grub-set-bootflag.1 b/util/grub-set-bootflag.1
|
||||
new file mode 100644
|
||||
index 00000000000..57801da22a0
|
||||
index 00000000000..f121226b416
|
||||
--- /dev/null
|
||||
+++ b/util/grub-set-bootflag.1
|
||||
@@ -0,0 +1,20 @@
|
||||
@ -284,7 +284,7 @@ index 00000000000..57801da22a0
|
||||
+.TP
|
||||
+\fBBOOTFLAG\fR
|
||||
+.RS 7
|
||||
+Bootflag to set, one of \fIboot_success\fR or \fIshow_menu_once\fR.
|
||||
+Bootflag to set, one of \fIboot_success\fR or \fImenu_show_once\fR.
|
||||
+.RE
|
||||
+
|
||||
+.SH SEE ALSO
|
||||
|
120
0269-grub-install-disable-support-for-EFI-platforms.patch
Normal file
120
0269-grub-install-disable-support-for-EFI-platforms.patch
Normal file
@ -0,0 +1,120 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jan Hlavac <jhlavac@redhat.com>
|
||||
Date: Fri, 20 Nov 2020 23:51:47 +0100
|
||||
Subject: [PATCH] grub-install: disable support for EFI platforms
|
||||
|
||||
For each platform, GRUB is shipped as a kernel image and a set of
|
||||
modules. These files are then used by the grub-install utility to
|
||||
install GRUB on a specific device. However, in order to support UEFI
|
||||
Secure Boot, the resulting EFI binary must be signed by a recognized
|
||||
private key. For this reason, for EFI platforms, most distributions also
|
||||
ship prebuilt EFI binaries signed by a distribution-specific private
|
||||
key. In this case, however, the grub-install utility should not be used
|
||||
because it would overwrite the signed EFI binary.
|
||||
|
||||
The current fix is suboptimal because it preserves all EFI-related code.
|
||||
A better solution could be to modularize the code and provide a
|
||||
build-time option.
|
||||
|
||||
Resolves: rhbz#1737444
|
||||
|
||||
Signed-off-by: Jan Hlavac <jhlavac@redhat.com>
|
||||
---
|
||||
util/grub-install.c | 37 ++++++++++++++++---------------------
|
||||
docs/grub.texi | 7 +++++++
|
||||
util/grub-install.8 | 4 +++-
|
||||
3 files changed, 26 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/util/grub-install.c b/util/grub-install.c
|
||||
index dddb7576c97..b3f5e414052 100644
|
||||
--- a/util/grub-install.c
|
||||
+++ b/util/grub-install.c
|
||||
@@ -899,6 +899,22 @@ main (int argc, char *argv[])
|
||||
|
||||
platform = grub_install_get_target (grub_install_source_directory);
|
||||
|
||||
+ switch (platform)
|
||||
+ {
|
||||
+ case GRUB_INSTALL_PLATFORM_ARM_EFI:
|
||||
+ case GRUB_INSTALL_PLATFORM_ARM64_EFI:
|
||||
+ case GRUB_INSTALL_PLATFORM_I386_EFI:
|
||||
+ case GRUB_INSTALL_PLATFORM_IA64_EFI:
|
||||
+ case GRUB_INSTALL_PLATFORM_X86_64_EFI:
|
||||
+ is_efi = 1;
|
||||
+ grub_util_error (_("this utility cannot be used for EFI platforms"
|
||||
+ " because it does not support UEFI Secure Boot"));
|
||||
+ break;
|
||||
+ default:
|
||||
+ is_efi = 0;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
{
|
||||
char *platname = grub_install_get_platform_name (platform);
|
||||
fprintf (stderr, _("Installing for %s platform.\n"), platname);
|
||||
@@ -1011,28 +1027,7 @@ main (int argc, char *argv[])
|
||||
grub_hostfs_init ();
|
||||
grub_host_init ();
|
||||
|
||||
- switch (platform)
|
||||
- {
|
||||
- case GRUB_INSTALL_PLATFORM_I386_EFI:
|
||||
- case GRUB_INSTALL_PLATFORM_X86_64_EFI:
|
||||
- case GRUB_INSTALL_PLATFORM_ARM_EFI:
|
||||
- case GRUB_INSTALL_PLATFORM_ARM64_EFI:
|
||||
- case GRUB_INSTALL_PLATFORM_RISCV32_EFI:
|
||||
- case GRUB_INSTALL_PLATFORM_RISCV64_EFI:
|
||||
- case GRUB_INSTALL_PLATFORM_IA64_EFI:
|
||||
- is_efi = 1;
|
||||
- break;
|
||||
- default:
|
||||
- is_efi = 0;
|
||||
- break;
|
||||
-
|
||||
- /* pacify warning. */
|
||||
- case GRUB_INSTALL_PLATFORM_MAX:
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
/* Find the EFI System Partition. */
|
||||
-
|
||||
if (is_efi)
|
||||
{
|
||||
grub_fs_t fs;
|
||||
diff --git a/docs/grub.texi b/docs/grub.texi
|
||||
index 495462b8e48..085b9974cc5 100644
|
||||
--- a/docs/grub.texi
|
||||
+++ b/docs/grub.texi
|
||||
@@ -6293,6 +6293,13 @@ grub2-install @var{install_device}
|
||||
The device name @var{install_device} is an OS device name or a GRUB
|
||||
device name.
|
||||
|
||||
+In order to support UEFI Secure Boot, the resulting GRUB EFI binary must
|
||||
+be signed by a recognized private key. For this reason, for EFI
|
||||
+platforms, most distributions also ship prebuilt GRUB EFI binaries
|
||||
+signed by a distribution-specific private key. In this case, however,
|
||||
+@command{grub2-install} should not be used because it would overwrite
|
||||
+the signed EFI binary.
|
||||
+
|
||||
@command{grub2-install} accepts the following options:
|
||||
|
||||
@table @option
|
||||
diff --git a/util/grub-install.8 b/util/grub-install.8
|
||||
index 1db89e94b3b..811d441b16c 100644
|
||||
--- a/util/grub-install.8
|
||||
+++ b/util/grub-install.8
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH GRUB-INSTALL 1 "Wed Feb 26 2014"
|
||||
+.TH GRUB-INSTALL 1 "Fri Nov 20 2020"
|
||||
.SH NAME
|
||||
\fBgrub-install\fR \(em Install GRUB on a device.
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
.SH DESCRIPTION
|
||||
\fBgrub-install\fR installs GRUB onto a device. This includes copying GRUB images into the target directory (generally \fI/boot/grub\fR), and on some platforms may also include installing GRUB onto a boot sector.
|
||||
|
||||
+In order to support UEFI Secure Boot, the resulting GRUB EFI binary must be signed by a recognized private key. For this reason, for EFI platforms, most distributions also ship prebuilt GRUB EFI binaries signed by a distribution-specific private key. In this case, however, the \fBgrub-install\fR utility should not be used because it would overwrite the signed EFI binary.
|
||||
+
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
\fB--modules\fR=\fIMODULES\fR\!
|
112
0270-New-with-debug-timestamps-configure-flag-to-prepend-.patch
Normal file
112
0270-New-with-debug-timestamps-configure-flag-to-prepend-.patch
Normal file
@ -0,0 +1,112 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Renaud=20M=C3=A9trich?= <rmetrich@redhat.com>
|
||||
Date: Sat, 23 Nov 2019 14:57:41 +0100
|
||||
Subject: [PATCH] New --with-debug-timestamps configure flag to prepend debug
|
||||
traces with absolute and relative timestamp
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Renaud Métrich <rmetrich@redhat.com>
|
||||
---
|
||||
configure.ac | 18 ++++++++++++++++++
|
||||
grub-core/kern/misc.c | 20 ++++++++++++++++++++
|
||||
config.h.in | 1 +
|
||||
3 files changed, 39 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 5d3316185da..d150a2e4a9c 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1555,6 +1555,17 @@ else
|
||||
fi
|
||||
AC_SUBST([BOOT_TIME_STATS])
|
||||
|
||||
+AC_ARG_WITH([debug-timestamps],
|
||||
+ AS_HELP_STRING([--with-debug-timestamps],
|
||||
+ [prepend debug traces with absolute and relative timestamps]))
|
||||
+
|
||||
+if test x$with_debug_timestamps = xyes; then
|
||||
+ DEBUG_WITH_TIMESTAMPS=1
|
||||
+else
|
||||
+ DEBUG_WITH_TIMESTAMPS=0
|
||||
+fi
|
||||
+AC_SUBST([DEBUG_WITH_TIMESTAMPS])
|
||||
+
|
||||
AC_ARG_ENABLE([grub-emu-sdl],
|
||||
[AS_HELP_STRING([--enable-grub-emu-sdl],
|
||||
[build and install the `grub-emu' debugging utility with SDL support (default=guessed)])])
|
||||
@@ -2142,6 +2153,7 @@ AM_CONDITIONAL([COND_APPLE_LINKER], [test x$TARGET_APPLE_LINKER = x1])
|
||||
AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes])
|
||||
AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1])
|
||||
AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1])
|
||||
+AM_CONDITIONAL([COND_DEBUG_WITH_TIMESTAMPS], [test x$DEBUG_WITH_TIMESTAMPS = x1])
|
||||
|
||||
AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes])
|
||||
|
||||
@@ -2237,6 +2249,12 @@ else
|
||||
echo With boot time statistics: No
|
||||
fi
|
||||
|
||||
+if [ x"$with_debug_timestamps" = xyes ]; then
|
||||
+echo Debug traces with timestamps: Yes
|
||||
+else
|
||||
+echo Debug traces with timestamps: No
|
||||
+fi
|
||||
+
|
||||
if [ x"$efiemu_excuse" = x ]; then
|
||||
echo efiemu runtime: Yes
|
||||
else
|
||||
diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c
|
||||
index dc5e10b651a..bc23945a3c2 100644
|
||||
--- a/grub-core/kern/misc.c
|
||||
+++ b/grub-core/kern/misc.c
|
||||
@@ -25,6 +25,9 @@
|
||||
#include <grub/env.h>
|
||||
#include <grub/i18n.h>
|
||||
#include <grub/backtrace.h>
|
||||
+#if DEBUG_WITH_TIMESTAMPS
|
||||
+#include <grub/time.h>
|
||||
+#endif
|
||||
|
||||
union printf_arg
|
||||
{
|
||||
@@ -191,9 +194,26 @@ grub_real_dprintf (const char *file, const int line, const char *condition,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
+#if DEBUG_WITH_TIMESTAMPS
|
||||
+ static long unsigned int last_time = 0;
|
||||
+ static int last_had_cr = 1;
|
||||
+#endif
|
||||
|
||||
if (grub_debug_enabled (condition))
|
||||
{
|
||||
+#if DEBUG_WITH_TIMESTAMPS
|
||||
+ /* Don't print timestamp if last printed message isn't terminated yet */
|
||||
+ if (last_had_cr) {
|
||||
+ long unsigned int tmabs = (long unsigned int) grub_get_time_ms();
|
||||
+ long unsigned int tmrel = tmabs - last_time;
|
||||
+ last_time = tmabs;
|
||||
+ grub_printf ("%3lu.%03lus +%2lu.%03lus ", tmabs / 1000, tmabs % 1000, tmrel / 1000, tmrel % 1000);
|
||||
+ }
|
||||
+ if (fmt[grub_strlen(fmt)-1] == '\n')
|
||||
+ last_had_cr = 1;
|
||||
+ else
|
||||
+ last_had_cr = 0;
|
||||
+#endif
|
||||
grub_printf ("%s:%d: ", file, line);
|
||||
va_start (args, fmt);
|
||||
grub_vprintf (fmt, args);
|
||||
diff --git a/config.h.in b/config.h.in
|
||||
index c7e316f0f1f..c80e3e0aba3 100644
|
||||
--- a/config.h.in
|
||||
+++ b/config.h.in
|
||||
@@ -12,6 +12,7 @@
|
||||
/* Define to 1 to enable disk cache statistics. */
|
||||
#define DISK_CACHE_STATS @DISK_CACHE_STATS@
|
||||
#define BOOT_TIME_STATS @BOOT_TIME_STATS@
|
||||
+#define DEBUG_WITH_TIMESTAMPS @DEBUG_WITH_TIMESTAMPS@
|
||||
|
||||
/* We don't need those. */
|
||||
#define MINILZO_CFG_SKIP_LZO_PTR 1
|
@ -0,0 +1,47 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Renaud=20M=C3=A9trich?= <rmetrich@redhat.com>
|
||||
Date: Sat, 23 Nov 2019 15:22:16 +0100
|
||||
Subject: [PATCH] Added debug statements to grub_disk_open() and
|
||||
grub_disk_close() on success
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Renaud Métrich <rmetrich@redhat.com>
|
||||
---
|
||||
grub-core/kern/disk.c | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grub-core/kern/disk.c b/grub-core/kern/disk.c
|
||||
index ffb09c8eefb..141b40de473 100644
|
||||
--- a/grub-core/kern/disk.c
|
||||
+++ b/grub-core/kern/disk.c
|
||||
@@ -285,6 +285,8 @@ grub_disk_open (const char *name)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ grub_dprintf ("disk", "Opening `%s' succeeded.\n", name);
|
||||
+
|
||||
return disk;
|
||||
}
|
||||
|
||||
@@ -292,7 +294,7 @@ void
|
||||
grub_disk_close (grub_disk_t disk)
|
||||
{
|
||||
grub_partition_t part;
|
||||
- grub_dprintf ("disk", "Closing `%s'.\n", disk->name);
|
||||
+ grub_dprintf ("disk", "Closing `%s'...\n", disk->name);
|
||||
|
||||
if (disk->dev && disk->dev->disk_close)
|
||||
(disk->dev->disk_close) (disk);
|
||||
@@ -306,8 +308,10 @@ grub_disk_close (grub_disk_t disk)
|
||||
grub_free (disk->partition);
|
||||
disk->partition = part;
|
||||
}
|
||||
+ grub_dprintf ("disk", "Closing `%s' succeeded.\n", disk->name);
|
||||
grub_free ((void *) disk->name);
|
||||
grub_free (disk);
|
||||
+
|
||||
}
|
||||
|
||||
/* Small read (less than cache size and not pass across cache unit boundaries).
|
@ -0,0 +1,51 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Renaud=20M=C3=A9trich?= <rmetrich@redhat.com>
|
||||
Date: Mon, 25 Nov 2019 09:29:53 +0100
|
||||
Subject: [PATCH] Introduce function grub_debug_is_enabled(void) returning 1 if
|
||||
'debug' is in the environment and not empty
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Renaud Métrich <rmetrich@redhat.com>
|
||||
---
|
||||
grub-core/kern/misc.c | 13 +++++++++++++
|
||||
include/grub/misc.h | 1 +
|
||||
2 files changed, 14 insertions(+)
|
||||
|
||||
diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c
|
||||
index bc23945a3c2..d729b439072 100644
|
||||
--- a/grub-core/kern/misc.c
|
||||
+++ b/grub-core/kern/misc.c
|
||||
@@ -162,6 +162,19 @@ int grub_err_printf (const char *fmt, ...)
|
||||
__attribute__ ((alias("grub_printf")));
|
||||
#endif
|
||||
|
||||
+/* Return 1 if 'debug' is set and not empty */
|
||||
+int
|
||||
+grub_debug_is_enabled (void)
|
||||
+{
|
||||
+ const char *debug;
|
||||
+
|
||||
+ debug = grub_env_get ("debug");
|
||||
+ if (!debug || debug[0] == '\0')
|
||||
+ return 0;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
int
|
||||
grub_debug_enabled (const char * condition)
|
||||
{
|
||||
diff --git a/include/grub/misc.h b/include/grub/misc.h
|
||||
index 998e47e0ccf..f05e1947c4a 100644
|
||||
--- a/include/grub/misc.h
|
||||
+++ b/include/grub/misc.h
|
||||
@@ -385,6 +385,7 @@ grub_puts (const char *s)
|
||||
}
|
||||
|
||||
int EXPORT_FUNC(grub_puts_) (const char *s);
|
||||
+int EXPORT_FUNC(grub_debug_is_enabled) (void);
|
||||
int EXPORT_FUNC(grub_debug_enabled) (const char *condition);
|
||||
void EXPORT_FUNC(grub_real_dprintf) (const char *file,
|
||||
const int line,
|
27
0273-Don-t-clear-screen-when-debugging-is-enabled.patch
Normal file
27
0273-Don-t-clear-screen-when-debugging-is-enabled.patch
Normal file
@ -0,0 +1,27 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Renaud=20M=C3=A9trich?= <rmetrich@redhat.com>
|
||||
Date: Sat, 23 Nov 2019 16:23:54 +0100
|
||||
Subject: [PATCH] Don't clear screen when debugging is enabled
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Renaud Métrich <rmetrich@redhat.com>
|
||||
---
|
||||
grub-core/normal/main.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c
|
||||
index f7ee912e715..abdccc86a59 100644
|
||||
--- a/grub-core/normal/main.c
|
||||
+++ b/grub-core/normal/main.c
|
||||
@@ -210,7 +210,8 @@ void
|
||||
grub_normal_init_page (struct grub_term_output *term,
|
||||
int y __attribute__((__unused__)))
|
||||
{
|
||||
- grub_term_cls (term);
|
||||
+ if (! grub_debug_is_enabled ())
|
||||
+ grub_term_cls (term);
|
||||
|
||||
#if 0
|
||||
grub_ssize_t msg_len;
|
71
0274-grub_file_-instrumentation-new-file-debug-tag.patch
Normal file
71
0274-grub_file_-instrumentation-new-file-debug-tag.patch
Normal file
@ -0,0 +1,71 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Renaud=20M=C3=A9trich?= <rmetrich@redhat.com>
|
||||
Date: Fri, 29 Nov 2019 11:02:00 +0100
|
||||
Subject: [PATCH] grub_file_* instrumentation (new 'file' debug tag)
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Renaud Métrich <rmetrich@redhat.com>
|
||||
---
|
||||
grub-core/kern/file.c | 14 ++++++++++++++
|
||||
1 file changed, 14 insertions(+)
|
||||
|
||||
diff --git a/grub-core/kern/file.c b/grub-core/kern/file.c
|
||||
index 58454458c47..e19aea3e514 100644
|
||||
--- a/grub-core/kern/file.c
|
||||
+++ b/grub-core/kern/file.c
|
||||
@@ -66,6 +66,8 @@ grub_file_open (const char *name, enum grub_file_type type)
|
||||
const char *file_name;
|
||||
grub_file_filter_id_t filter;
|
||||
|
||||
+ grub_dprintf ("file", "Opening `%s' ...\n", name);
|
||||
+
|
||||
device_name = grub_file_get_device_name (name);
|
||||
if (grub_errno)
|
||||
goto fail;
|
||||
@@ -128,6 +130,8 @@ grub_file_open (const char *name, enum grub_file_type type)
|
||||
if (!file)
|
||||
grub_file_close (last_file);
|
||||
|
||||
+ grub_dprintf ("file", "Opening `%s' succeeded.\n", name);
|
||||
+
|
||||
return file;
|
||||
|
||||
fail:
|
||||
@@ -138,6 +142,8 @@ grub_file_open (const char *name, enum grub_file_type type)
|
||||
|
||||
grub_free (file);
|
||||
|
||||
+ grub_dprintf ("file", "Opening `%s' failed.\n", name);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -169,6 +175,7 @@ grub_file_read (grub_file_t file, void *buf, grub_size_t len)
|
||||
|
||||
if (len == 0)
|
||||
return 0;
|
||||
+
|
||||
read_hook = file->read_hook;
|
||||
read_hook_data = file->read_hook_data;
|
||||
if (!file->read_hook)
|
||||
@@ -189,11 +196,18 @@ grub_file_read (grub_file_t file, void *buf, grub_size_t len)
|
||||
grub_err_t
|
||||
grub_file_close (grub_file_t file)
|
||||
{
|
||||
+ grub_dprintf ("file", "Closing `%s' ...\n", file->name);
|
||||
if (file->fs->fs_close)
|
||||
(file->fs->fs_close) (file);
|
||||
|
||||
if (file->device)
|
||||
grub_device_close (file->device);
|
||||
+
|
||||
+ if (grub_errno == GRUB_ERR_NONE)
|
||||
+ grub_dprintf ("file", "Closing `%s' succeeded.\n", file->name);
|
||||
+ else
|
||||
+ grub_dprintf ("file", "Closing `%s' failed with %d.\n", file->name, grub_errno);
|
||||
+
|
||||
grub_free (file->name);
|
||||
grub_free (file);
|
||||
return grub_errno;
|
136
0275-ieee1275-Avoiding-many-unecessary-open-close.patch
Normal file
136
0275-ieee1275-Avoiding-many-unecessary-open-close.patch
Normal file
@ -0,0 +1,136 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Diego Domingos <diegodo@br.ibm.com>
|
||||
Date: Mon, 14 Dec 2020 17:42:45 +0100
|
||||
Subject: [PATCH] ieee1275: Avoiding many unecessary open/close
|
||||
|
||||
Signed-off-by: Diego Domingos <diegodo@br.ibm.com>
|
||||
---
|
||||
grub-core/disk/ieee1275/ofdisk.c | 64 ++++++++++++++++++++++------------------
|
||||
1 file changed, 35 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/grub-core/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/ofdisk.c
|
||||
index 03674cb477e..ea7f78ac7d8 100644
|
||||
--- a/grub-core/disk/ieee1275/ofdisk.c
|
||||
+++ b/grub-core/disk/ieee1275/ofdisk.c
|
||||
@@ -44,7 +44,7 @@ struct ofdisk_hash_ent
|
||||
};
|
||||
|
||||
static grub_err_t
|
||||
-grub_ofdisk_get_block_size (const char *device, grub_uint32_t *block_size,
|
||||
+grub_ofdisk_get_block_size (grub_uint32_t *block_size,
|
||||
struct ofdisk_hash_ent *op);
|
||||
|
||||
#define OFDISK_HASH_SZ 8
|
||||
@@ -461,6 +461,7 @@ grub_ofdisk_open (const char *name, grub_disk_t disk)
|
||||
grub_ssize_t actual;
|
||||
grub_uint32_t block_size = 0;
|
||||
grub_err_t err;
|
||||
+ struct ofdisk_hash_ent *op;
|
||||
|
||||
if (grub_strncmp (name, "ieee1275/", sizeof ("ieee1275/") - 1) != 0)
|
||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
||||
@@ -471,6 +472,35 @@ grub_ofdisk_open (const char *name, grub_disk_t disk)
|
||||
|
||||
grub_dprintf ("disk", "Opening `%s'.\n", devpath);
|
||||
|
||||
+ op = ofdisk_hash_find (devpath);
|
||||
+ if (!op)
|
||||
+ op = ofdisk_hash_add (devpath, NULL);
|
||||
+ if (!op)
|
||||
+ {
|
||||
+ grub_free (devpath);
|
||||
+ return grub_errno;
|
||||
+ }
|
||||
+
|
||||
+ /* Check if the call to open is the same to the last disk already opened */
|
||||
+ if (last_devpath && !grub_strcmp(op->open_path,last_devpath))
|
||||
+ {
|
||||
+ goto finish;
|
||||
+ }
|
||||
+
|
||||
+ /* If not, we need to close the previous disk and open the new one */
|
||||
+ else {
|
||||
+ if (last_ihandle){
|
||||
+ grub_ieee1275_close (last_ihandle);
|
||||
+ }
|
||||
+ last_ihandle = 0;
|
||||
+ last_devpath = NULL;
|
||||
+
|
||||
+ grub_ieee1275_open (op->open_path, &last_ihandle);
|
||||
+ if (! last_ihandle)
|
||||
+ return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device");
|
||||
+ last_devpath = op->open_path;
|
||||
+ }
|
||||
+
|
||||
if (grub_ieee1275_finddevice (devpath, &dev))
|
||||
{
|
||||
grub_free (devpath);
|
||||
@@ -491,25 +521,18 @@ grub_ofdisk_open (const char *name, grub_disk_t disk)
|
||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a block device");
|
||||
}
|
||||
|
||||
+
|
||||
+ finish:
|
||||
/* XXX: There is no property to read the number of blocks. There
|
||||
should be a property `#blocks', but it is not there. Perhaps it
|
||||
is possible to use seek for this. */
|
||||
disk->total_sectors = GRUB_DISK_SIZE_UNKNOWN;
|
||||
|
||||
{
|
||||
- struct ofdisk_hash_ent *op;
|
||||
- op = ofdisk_hash_find (devpath);
|
||||
- if (!op)
|
||||
- op = ofdisk_hash_add (devpath, NULL);
|
||||
- if (!op)
|
||||
- {
|
||||
- grub_free (devpath);
|
||||
- return grub_errno;
|
||||
- }
|
||||
disk->id = (unsigned long) op;
|
||||
disk->data = op->open_path;
|
||||
|
||||
- err = grub_ofdisk_get_block_size (devpath, &block_size, op);
|
||||
+ err = grub_ofdisk_get_block_size (&block_size, op);
|
||||
if (err)
|
||||
{
|
||||
grub_free (devpath);
|
||||
@@ -532,13 +555,6 @@ grub_ofdisk_open (const char *name, grub_disk_t disk)
|
||||
static void
|
||||
grub_ofdisk_close (grub_disk_t disk)
|
||||
{
|
||||
- if (disk->data == last_devpath)
|
||||
- {
|
||||
- if (last_ihandle)
|
||||
- grub_ieee1275_close (last_ihandle);
|
||||
- last_ihandle = 0;
|
||||
- last_devpath = NULL;
|
||||
- }
|
||||
disk->data = 0;
|
||||
}
|
||||
|
||||
@@ -685,7 +701,7 @@ grub_ofdisk_init (void)
|
||||
}
|
||||
|
||||
static grub_err_t
|
||||
-grub_ofdisk_get_block_size (const char *device, grub_uint32_t *block_size,
|
||||
+grub_ofdisk_get_block_size (grub_uint32_t *block_size,
|
||||
struct ofdisk_hash_ent *op)
|
||||
{
|
||||
struct size_args_ieee1275
|
||||
@@ -698,16 +714,6 @@ grub_ofdisk_get_block_size (const char *device, grub_uint32_t *block_size,
|
||||
grub_ieee1275_cell_t size2;
|
||||
} args_ieee1275;
|
||||
|
||||
- if (last_ihandle)
|
||||
- grub_ieee1275_close (last_ihandle);
|
||||
-
|
||||
- last_ihandle = 0;
|
||||
- last_devpath = NULL;
|
||||
-
|
||||
- grub_ieee1275_open (device, &last_ihandle);
|
||||
- if (! last_ihandle)
|
||||
- return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device");
|
||||
-
|
||||
*block_size = 0;
|
||||
|
||||
if (op->block_size_fails >= 2)
|
@ -0,0 +1,90 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Diego Domingos <diegodo@br.ibm.com>
|
||||
Date: Mon, 14 Dec 2020 17:45:28 +0100
|
||||
Subject: [PATCH] ieee1275/powerpc: implements fibre channel discovery for
|
||||
ofpathname
|
||||
|
||||
grub-ofpathname doesn't work with fibre channel because there is no
|
||||
function currently implemented for it.
|
||||
This patch enables it by prividing a function that looks for the port
|
||||
name, building the entire path for OF devices.
|
||||
|
||||
Signed-off-by: Diego Domingos <diegodo@br.ibm.com>
|
||||
---
|
||||
grub-core/osdep/linux/ofpath.c | 49 ++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 49 insertions(+)
|
||||
|
||||
diff --git a/grub-core/osdep/linux/ofpath.c b/grub-core/osdep/linux/ofpath.c
|
||||
index a6153d35954..0f5d54e9f2d 100644
|
||||
--- a/grub-core/osdep/linux/ofpath.c
|
||||
+++ b/grub-core/osdep/linux/ofpath.c
|
||||
@@ -350,6 +350,38 @@ of_path_of_ide(const char *sys_devname __attribute__((unused)), const char *devi
|
||||
return ret;
|
||||
}
|
||||
|
||||
+
|
||||
+static void
|
||||
+of_fc_port_name(const char *path, const char *subpath, char *port_name)
|
||||
+{
|
||||
+ char *bname, *basepath, *p;
|
||||
+ int fd;
|
||||
+
|
||||
+ bname = xmalloc(sizeof(char)*150);
|
||||
+ basepath = xmalloc(strlen(path));
|
||||
+
|
||||
+ /* Generate the path to get port name information from the drive */
|
||||
+ strncpy(basepath,path,subpath-path);
|
||||
+ basepath[subpath-path-1] = '\0';
|
||||
+ p = get_basename(basepath);
|
||||
+ snprintf(bname,sizeof(char)*150,"%s/fc_transport/%s/port_name",basepath,p);
|
||||
+
|
||||
+ /* Read the information from the port name */
|
||||
+ fd = open (bname, O_RDONLY);
|
||||
+ if (fd < 0)
|
||||
+ grub_util_error (_("cannot open `%s': %s"), bname, strerror (errno));
|
||||
+
|
||||
+ if (read(fd,port_name,sizeof(char)*19) < 0)
|
||||
+ grub_util_error (_("cannot read `%s': %s"), bname, strerror (errno));
|
||||
+
|
||||
+ sscanf(port_name,"0x%s",port_name);
|
||||
+
|
||||
+ close(fd);
|
||||
+
|
||||
+ free(bname);
|
||||
+ free(basepath);
|
||||
+}
|
||||
+
|
||||
#ifdef __sparc__
|
||||
static char *
|
||||
of_path_of_nvme(const char *sys_devname __attribute__((unused)),
|
||||
@@ -577,6 +609,16 @@ of_path_of_scsi(const char *sys_devname __attribute__((unused)), const char *dev
|
||||
digit_string = trailing_digits (device);
|
||||
if (strncmp (of_path, "/vdevice/", sizeof ("/vdevice/") - 1) == 0)
|
||||
{
|
||||
+ if(strstr(of_path,"vfc-client"))
|
||||
+ {
|
||||
+ char * port_name = xmalloc(sizeof(char)*17);
|
||||
+ of_fc_port_name(sysfs_path, p, port_name);
|
||||
+
|
||||
+ snprintf(disk,sizeof(disk),"/%s@%s", disk_name, port_name);
|
||||
+ free(port_name);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
unsigned long id = 0x8000 | (tgt << 8) | (bus << 5) | lun;
|
||||
if (*digit_string == '\0')
|
||||
{
|
||||
@@ -590,6 +632,13 @@ of_path_of_scsi(const char *sys_devname __attribute__((unused)), const char *dev
|
||||
snprintf(disk, sizeof (disk),
|
||||
"/%s@%04lx000000000000:%c", disk_name, id, 'a' + (part - 1));
|
||||
}
|
||||
+ }
|
||||
+ } else if (strstr(of_path,"fibre-channel")||(strstr(of_path,"vfc-client"))){
|
||||
+ char * port_name = xmalloc(sizeof(char)*17);
|
||||
+ of_fc_port_name(sysfs_path, p, port_name);
|
||||
+
|
||||
+ snprintf(disk,sizeof(disk),"/%s@%s", disk_name, port_name);
|
||||
+ free(port_name);
|
||||
}
|
||||
else
|
||||
{
|
106
0277-ieee1275-powerpc-enables-device-mapper-discovery.patch
Normal file
106
0277-ieee1275-powerpc-enables-device-mapper-discovery.patch
Normal file
@ -0,0 +1,106 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Diego Domingos <diegodo@br.ibm.com>
|
||||
Date: Mon, 14 Dec 2020 17:47:16 +0100
|
||||
Subject: [PATCH] ieee1275/powerpc: enables device mapper discovery
|
||||
|
||||
this patch enables the device mapper discovery on ofpath.c. Currently,
|
||||
when we are dealing with a device like /dev/dm-* the ofpath returns null
|
||||
since there is no function implemented to handle this case.
|
||||
|
||||
This patch implements a function that will look into /sys/block/dm-*
|
||||
devices and search recursively inside slaves directory to find the root
|
||||
disk.
|
||||
|
||||
Signed-off-by: Diego Domingos <diegodo@br.ibm.com>
|
||||
---
|
||||
grub-core/osdep/linux/ofpath.c | 64 +++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 63 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grub-core/osdep/linux/ofpath.c b/grub-core/osdep/linux/ofpath.c
|
||||
index 0f5d54e9f2d..cc849d9c94c 100644
|
||||
--- a/grub-core/osdep/linux/ofpath.c
|
||||
+++ b/grub-core/osdep/linux/ofpath.c
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <ctype.h>
|
||||
+#include <dirent.h>
|
||||
|
||||
#ifdef __sparc__
|
||||
typedef enum
|
||||
@@ -755,13 +756,74 @@ strip_trailing_digits (const char *p)
|
||||
return new;
|
||||
}
|
||||
|
||||
+static char *
|
||||
+get_slave_from_dm(const char * device){
|
||||
+ char *curr_device, *tmp;
|
||||
+ char *directory;
|
||||
+ char *ret = NULL;
|
||||
+
|
||||
+ directory = grub_strdup (device);
|
||||
+ tmp = get_basename(directory);
|
||||
+ curr_device = grub_strdup (tmp);
|
||||
+ *tmp = '\0';
|
||||
+
|
||||
+ /* Recursively check for slaves devices so we can find the root device */
|
||||
+ while ((curr_device[0] == 'd') && (curr_device[1] == 'm') && (curr_device[2] == '-')){
|
||||
+ DIR *dp;
|
||||
+ struct dirent *ep;
|
||||
+ char* device_path;
|
||||
+
|
||||
+ device_path = grub_xasprintf ("/sys/block/%s/slaves", curr_device);
|
||||
+ dp = opendir(device_path);
|
||||
+ free(device_path);
|
||||
+
|
||||
+ if (dp != NULL)
|
||||
+ {
|
||||
+ ep = readdir (dp);
|
||||
+ while (ep != NULL){
|
||||
+
|
||||
+ /* avoid some system directories */
|
||||
+ if (!strcmp(ep->d_name,"."))
|
||||
+ goto next_dir;
|
||||
+ if (!strcmp(ep->d_name,".."))
|
||||
+ goto next_dir;
|
||||
+
|
||||
+ free (curr_device);
|
||||
+ free (ret);
|
||||
+ curr_device = grub_strdup (ep->d_name);
|
||||
+ ret = grub_xasprintf ("%s%s", directory, curr_device);
|
||||
+ break;
|
||||
+
|
||||
+ next_dir:
|
||||
+ ep = readdir (dp);
|
||||
+ continue;
|
||||
+ }
|
||||
+ closedir (dp);
|
||||
+ }
|
||||
+ else
|
||||
+ grub_util_warn (_("cannot open directory `%s'"), device_path);
|
||||
+ }
|
||||
+
|
||||
+ free (directory);
|
||||
+ free (curr_device);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
char *
|
||||
grub_util_devname_to_ofpath (const char *sys_devname)
|
||||
{
|
||||
- char *name_buf, *device, *devnode, *devicenode, *ofpath;
|
||||
+ char *name_buf, *device, *devnode, *devicenode, *ofpath, *realname;
|
||||
|
||||
name_buf = xrealpath (sys_devname);
|
||||
|
||||
+ realname = get_slave_from_dm (name_buf);
|
||||
+ if (realname)
|
||||
+ {
|
||||
+ free (name_buf);
|
||||
+ name_buf = realname;
|
||||
+ }
|
||||
+
|
||||
device = get_basename (name_buf);
|
||||
devnode = strip_trailing_digits (name_buf);
|
||||
devicenode = strip_trailing_digits (device);
|
51
0278-btrfs-Add-support-for-new-RAID1C34-profiles.patch
Normal file
51
0278-btrfs-Add-support-for-new-RAID1C34-profiles.patch
Normal file
@ -0,0 +1,51 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: David Sterba <dave@jikos.cz>
|
||||
Date: Mon, 4 Nov 2019 17:23:22 +0100
|
||||
Subject: [PATCH] btrfs: Add support for new RAID1C34 profiles
|
||||
|
||||
New 3- and 4-copy variants of RAID1 were merged into Linux kernel 5.5.
|
||||
Add the two new profiles to the list of recognized ones. As this builds
|
||||
on the same code as RAID1, only the redundancy level needs to be
|
||||
adjusted, the rest is done by the existing code.
|
||||
|
||||
Signed-off-by: David Sterba <dsterba@suse.com>
|
||||
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
||||
---
|
||||
grub-core/fs/btrfs.c | 11 +++++++++--
|
||||
1 file changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c
|
||||
index 0d8c666aea1..78f5de37b27 100644
|
||||
--- a/grub-core/fs/btrfs.c
|
||||
+++ b/grub-core/fs/btrfs.c
|
||||
@@ -144,6 +144,8 @@ struct grub_btrfs_chunk_item
|
||||
#define GRUB_BTRFS_CHUNK_TYPE_RAID10 0x40
|
||||
#define GRUB_BTRFS_CHUNK_TYPE_RAID5 0x80
|
||||
#define GRUB_BTRFS_CHUNK_TYPE_RAID6 0x100
|
||||
+#define GRUB_BTRFS_CHUNK_TYPE_RAID1C3 0x200
|
||||
+#define GRUB_BTRFS_CHUNK_TYPE_RAID1C4 0x400
|
||||
grub_uint8_t dummy2[0xc];
|
||||
grub_uint16_t nstripes;
|
||||
grub_uint16_t nsubstripes;
|
||||
@@ -1003,14 +1005,19 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr,
|
||||
csize = (stripen + 1) * stripe_length - off;
|
||||
break;
|
||||
}
|
||||
+ case GRUB_BTRFS_CHUNK_TYPE_RAID1C4:
|
||||
+ redundancy++;
|
||||
+ /* fall through */
|
||||
+ case GRUB_BTRFS_CHUNK_TYPE_RAID1C3:
|
||||
+ redundancy++;
|
||||
+ /* fall through */
|
||||
case GRUB_BTRFS_CHUNK_TYPE_DUPLICATED:
|
||||
case GRUB_BTRFS_CHUNK_TYPE_RAID1:
|
||||
{
|
||||
- grub_dprintf ("btrfs", "RAID1\n");
|
||||
+ grub_dprintf ("btrfs", "RAID1 (copies: %d)\n", ++redundancy);
|
||||
stripen = 0;
|
||||
stripe_offset = off;
|
||||
csize = grub_le_to_cpu64 (chunk->size) - off;
|
||||
- redundancy = 2;
|
||||
break;
|
||||
}
|
||||
case GRUB_BTRFS_CHUNK_TYPE_RAID0:
|
121
0279-at_keyboard-use-set-1-when-keyboard-is-in-Translate-.patch
Normal file
121
0279-at_keyboard-use-set-1-when-keyboard-is-in-Translate-.patch
Normal file
@ -0,0 +1,121 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Renaud=20M=C3=A9trich?= <rmetrich@redhat.com>
|
||||
Date: Thu, 3 Dec 2020 09:13:24 +0100
|
||||
Subject: [PATCH] at_keyboard: use set 1 when keyboard is in Translate mode
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
When keyboard controller acts in Translate mode (0x40 mask), then use
|
||||
set 1 since translation is done.
|
||||
Otherwise use the mode queried from the controller (usually set 2).
|
||||
|
||||
Added "atkeyb" debugging messages in at_keyboard module as well.
|
||||
|
||||
Resolves: rhbz#1897587
|
||||
|
||||
Tested on:
|
||||
- Asus N53SN (set 1 used)
|
||||
- Dell Precision (set 1 used)
|
||||
- HP Elitebook (set 2 used)
|
||||
- HP G5430 (set 1 used, keyboard in XT mode!)
|
||||
- Lenovo P71 & Lenovo T460s (set 2 used)
|
||||
- QEMU/KVM (set 1 used)
|
||||
|
||||
Signed-off-by: Renaud Métrich <rmetrich@redhat.com>
|
||||
---
|
||||
grub-core/term/at_keyboard.c | 29 ++++++++++++++++++++++++-----
|
||||
include/grub/at_keyboard.h | 4 ++++
|
||||
2 files changed, 28 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/grub-core/term/at_keyboard.c b/grub-core/term/at_keyboard.c
|
||||
index f0a986eb176..69d99b61df5 100644
|
||||
--- a/grub-core/term/at_keyboard.c
|
||||
+++ b/grub-core/term/at_keyboard.c
|
||||
@@ -135,20 +135,28 @@ query_mode (void)
|
||||
int e;
|
||||
|
||||
e = write_mode (0);
|
||||
- if (!e)
|
||||
+ if (!e) {
|
||||
+ grub_dprintf("atkeyb", "query_mode: write_mode(0) failed\n");
|
||||
return 0;
|
||||
+ }
|
||||
|
||||
do {
|
||||
keyboard_controller_wait_until_ready ();
|
||||
ret = grub_inb (KEYBOARD_REG_DATA);
|
||||
} while (ret == GRUB_AT_ACK);
|
||||
/* QEMU translates the set even in no-translate mode. */
|
||||
- if (ret == 0x43 || ret == 1)
|
||||
+ if (ret == 0x43 || ret == 1) {
|
||||
+ grub_dprintf("atkeyb", "query_mode: returning 1 (ret=0x%x)\n", ret);
|
||||
return 1;
|
||||
- if (ret == 0x41 || ret == 2)
|
||||
+ }
|
||||
+ if (ret == 0x41 || ret == 2) {
|
||||
+ grub_dprintf("atkeyb", "query_mode: returning 2 (ret=0x%x)\n", ret);
|
||||
return 2;
|
||||
- if (ret == 0x3f || ret == 3)
|
||||
+ }
|
||||
+ if (ret == 0x3f || ret == 3) {
|
||||
+ grub_dprintf("atkeyb", "query_mode: returning 3 (ret=0x%x)\n", ret);
|
||||
return 3;
|
||||
+ }
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -165,7 +173,13 @@ set_scancodes (void)
|
||||
}
|
||||
|
||||
#if !USE_SCANCODE_SET
|
||||
- ps2_state.current_set = 1;
|
||||
+ if ((grub_keyboard_controller_orig & KEYBOARD_AT_TRANSLATE) == KEYBOARD_AT_TRANSLATE) {
|
||||
+ grub_dprintf ("atkeyb", "queried set is %d but keyboard in Translate mode, so actually in set 1\n", grub_keyboard_orig_set);
|
||||
+ ps2_state.current_set = 1;
|
||||
+ } else {
|
||||
+ grub_dprintf ("atkeyb", "using queried set %d\n", grub_keyboard_orig_set);
|
||||
+ ps2_state.current_set = grub_keyboard_orig_set;
|
||||
+ }
|
||||
return;
|
||||
#else
|
||||
|
||||
@@ -266,6 +280,7 @@ grub_keyboard_controller_init (void)
|
||||
grub_keyboard_orig_set = 2;
|
||||
#else
|
||||
grub_keyboard_controller_orig = grub_keyboard_controller_read ();
|
||||
+ grub_dprintf ("atkeyb", "grub_keyboard_controller_orig = 0x%x\n", grub_keyboard_controller_orig);
|
||||
grub_keyboard_orig_set = query_mode ();
|
||||
#endif
|
||||
set_scancodes ();
|
||||
@@ -275,11 +290,15 @@ grub_keyboard_controller_init (void)
|
||||
static grub_err_t
|
||||
grub_keyboard_controller_fini (struct grub_term_input *term __attribute__ ((unused)))
|
||||
{
|
||||
+/* In !USE_SCANCODE_SET mode, we didn't change anything, so nothing to restore */
|
||||
+#if USE_SCANCODE_SET
|
||||
if (ps2_state.current_set == 0)
|
||||
return GRUB_ERR_NONE;
|
||||
+ grub_dprintf ("atkeyb", "restoring set %d, controller 0x%x\n", grub_keyboard_orig_set, grub_keyboard_controller_orig);
|
||||
if (grub_keyboard_orig_set)
|
||||
write_mode (grub_keyboard_orig_set);
|
||||
grub_keyboard_controller_write (grub_keyboard_controller_orig);
|
||||
+#endif
|
||||
return GRUB_ERR_NONE;
|
||||
}
|
||||
|
||||
diff --git a/include/grub/at_keyboard.h b/include/grub/at_keyboard.h
|
||||
index bcb4d9ba78f..9414dc1b996 100644
|
||||
--- a/include/grub/at_keyboard.h
|
||||
+++ b/include/grub/at_keyboard.h
|
||||
@@ -19,6 +19,10 @@
|
||||
#ifndef GRUB_AT_KEYBOARD_HEADER
|
||||
#define GRUB_AT_KEYBOARD_HEADER 1
|
||||
|
||||
+/*
|
||||
+ * Refer to https://wiki.osdev.org/%228042%22_PS/2_Controller for details.
|
||||
+ */
|
||||
+
|
||||
/* Used for sending commands to the controller. */
|
||||
#define KEYBOARD_COMMAND_ISREADY(x) !((x) & 0x02)
|
||||
#define KEYBOARD_COMMAND_READ 0x20
|
17
grub.macros
17
grub.macros
@ -115,7 +115,7 @@
|
||||
%ifarch aarch64 %{arm} riscv64
|
||||
%global efi_modules " "
|
||||
%else
|
||||
%global efi_modules " backtrace chain tpm usb usbserial_common usbserial_pl2303 usbserial_ftdi usbserial_usbdebug "
|
||||
%global efi_modules " backtrace chain tpm usb usbserial_common usbserial_pl2303 usbserial_ftdi usbserial_usbdebug keylayouts at_keyboard "
|
||||
%endif
|
||||
|
||||
%ifarch aarch64 %{arm} riscv64
|
||||
@ -370,6 +370,14 @@ for x in grub-mkimage ; do \\\
|
||||
done \
|
||||
%{nil}
|
||||
|
||||
%define do_install_protected_file() \
|
||||
touch %{1}.conf \
|
||||
echo %{1} > %{1}.conf \
|
||||
install -d -m 755 ${RPM_BUILD_ROOT}/etc/dnf/protected.d/ \
|
||||
install -m 644 %{1}.conf ${RPM_BUILD_ROOT}/etc/dnf/protected.d/ \
|
||||
rm -f %{1}.conf \
|
||||
%{nil}
|
||||
|
||||
%ifarch x86_64 aarch64 %{arm} riscv64
|
||||
%define mkimage() \
|
||||
%{4}./grub-mkimage -O %{1} -o %{2}.orig \\\
|
||||
@ -483,6 +491,7 @@ find . '(' -iname gdb_grub \\\
|
||||
find $RPM_BUILD_ROOT -type f -iname "*.mod*" -exec chmod a-x {} '\;' \
|
||||
install -m 700 %{2} $RPM_BUILD_ROOT%{efi_esp_dir}/%{2} \
|
||||
install -m 700 %{3} $RPM_BUILD_ROOT%{efi_esp_dir}/%{3} \
|
||||
%{expand:%%do_install_protected_file %{name}-%{alt_package_arch}} \
|
||||
cd .. \
|
||||
%{nil}
|
||||
|
||||
@ -510,6 +519,7 @@ ${RPM_BUILD_ROOT}/%{_bindir}/%{name}-editenv \\\
|
||||
${RPM_BUILD_ROOT}%{efi_esp_dir}/grubenv create \
|
||||
ln -sf ../efi/EFI/%{efi_vendor}/grubenv \\\
|
||||
$RPM_BUILD_ROOT/boot/grub2/grubenv \
|
||||
%{expand:%%do_install_protected_file %{name}-%{package_arch}} \
|
||||
cd .. \
|
||||
%{nil}
|
||||
|
||||
@ -532,6 +542,7 @@ if [ %{3} -eq 0 ]; then \
|
||||
${RPM_BUILD_ROOT}/%{_bindir}/%{name}-editenv \\\
|
||||
${RPM_BUILD_ROOT}/boot/%{name}/grubenv create \
|
||||
fi \
|
||||
%{expand:%%do_install_protected_file %{name}-%{legacy_package_arch}} \
|
||||
cd .. \
|
||||
%{nil}
|
||||
|
||||
@ -579,6 +590,7 @@ touch ${RPM_BUILD_ROOT}/boot/%{name}/grub.cfg \
|
||||
%config(noreplace) %{_sysconfdir}/%{name}.cfg \
|
||||
%ghost %config(noreplace) /boot/%{name}/grub.cfg \
|
||||
%dir %attr(0700,root,root)/boot/loader/entries \
|
||||
%attr(0644,root,root) %config(noreplace) /etc/dnf/protected.d/%{name}-%{1}.conf \
|
||||
\
|
||||
%{expand:%if 0%{?with_legacy_modules} \
|
||||
%{expand:%%files %{1}-modules} \
|
||||
@ -604,8 +616,9 @@ touch ${RPM_BUILD_ROOT}/boot/%{name}/grub.cfg \
|
||||
%dir %attr(0700,root,root)%{efi_esp_dir}/fonts \
|
||||
%dir %attr(0700,root,root)/boot/loader/entries \
|
||||
%ghost %config(noreplace) %attr(0700,root,root)%{efi_esp_dir}/grub.cfg \
|
||||
%config(noreplace) /boot/grub2/grubenv \
|
||||
%config(noreplace) %verify(not size mode md5 mtime) /boot/grub2/grubenv \
|
||||
%ghost %config(noreplace) %attr(0700,root,root)%{efi_esp_dir}/grubenv \
|
||||
%attr(0644,root,root) %config(noreplace) /etc/dnf/protected.d/%{name}-%{1}.conf \
|
||||
%{expand:%if 0%{?without_efi_modules} \
|
||||
%exclude %{_libdir}/grub/%{6} \
|
||||
%exclude %{_libdir}/grub/%{6}/* \
|
||||
|
11
grub.patches
11
grub.patches
@ -266,3 +266,14 @@ Patch0265: 0265-Fix-const-char-pointers-in-grub-core-net-url.c.patch
|
||||
Patch0266: 0266-Add-systemd-integration-scripts-to-make-systemctl-re.patch
|
||||
Patch0267: 0267-systemd-integration.sh-Also-set-old-menu_show_once-g.patch
|
||||
Patch0268: 0268-tftp-roll-over-block-counter-to-prevent-timeouts-wit.patch
|
||||
Patch0269: 0269-grub-install-disable-support-for-EFI-platforms.patch
|
||||
Patch0270: 0270-New-with-debug-timestamps-configure-flag-to-prepend-.patch
|
||||
Patch0271: 0271-Added-debug-statements-to-grub_disk_open-and-grub_di.patch
|
||||
Patch0272: 0272-Introduce-function-grub_debug_is_enabled-void-return.patch
|
||||
Patch0273: 0273-Don-t-clear-screen-when-debugging-is-enabled.patch
|
||||
Patch0274: 0274-grub_file_-instrumentation-new-file-debug-tag.patch
|
||||
Patch0275: 0275-ieee1275-Avoiding-many-unecessary-open-close.patch
|
||||
Patch0276: 0276-ieee1275-powerpc-implements-fibre-channel-discovery-.patch
|
||||
Patch0277: 0277-ieee1275-powerpc-enables-device-mapper-discovery.patch
|
||||
Patch0278: 0278-btrfs-Add-support-for-new-RAID1C34-profiles.patch
|
||||
Patch0279: 0279-at_keyboard-use-set-1-when-keyboard-is-in-Translate-.patch
|
||||
|
23
grub2.spec
23
grub2.spec
@ -14,7 +14,7 @@
|
||||
Name: grub2
|
||||
Epoch: 1
|
||||
Version: 2.04
|
||||
Release: 31%{?dist}.2
|
||||
Release: 34%{?dist}
|
||||
Summary: Bootloader with support for Linux, Multiboot and more
|
||||
License: GPLv3+
|
||||
URL: http://www.gnu.org/software/grub/
|
||||
@ -40,7 +40,7 @@ BuildRequires: ncurses-devel xz-devel bzip2-devel
|
||||
BuildRequires: freetype-devel libusb-devel
|
||||
BuildRequires: fuse-devel
|
||||
BuildRequires: rpm-devel rpm-libs
|
||||
BuildRequires: autoconf automake autogen device-mapper-devel
|
||||
BuildRequires: autoconf automake device-mapper-devel
|
||||
BuildRequires: freetype-devel gettext-devel git
|
||||
BuildRequires: texinfo
|
||||
BuildRequires: dejavu-sans-fonts
|
||||
@ -233,6 +233,7 @@ rm -vf ${RPM_BUILD_ROOT}/%{_bindir}/%{name}-render-label
|
||||
rm -vf ${RPM_BUILD_ROOT}/%{_sbindir}/%{name}-bios-setup
|
||||
rm -vf ${RPM_BUILD_ROOT}/%{_sbindir}/%{name}-macbless
|
||||
%endif
|
||||
%{expand:%%do_install_protected_file %{name}-tools-minimal}
|
||||
|
||||
%find_lang grub
|
||||
|
||||
@ -358,7 +359,7 @@ rm -r /boot/grub2.tmp/ || :
|
||||
%exclude /boot/grub2/*
|
||||
%dir %attr(0700,root,root) %{efi_esp_dir}
|
||||
%exclude %{efi_esp_dir}/*
|
||||
%ghost %config(noreplace) /boot/grub2/grubenv
|
||||
%ghost %config(noreplace) %verify(not size mode md5 mtime) /boot/grub2/grubenv
|
||||
%license COPYING
|
||||
%doc THANKS
|
||||
%doc docs/grub.html
|
||||
@ -375,6 +376,7 @@ rm -r /boot/grub2.tmp/ || :
|
||||
%{_bindir}/%{name}-editenv
|
||||
%{_bindir}/%{name}-mkpasswd-pbkdf2
|
||||
%{_bindir}/%{name}-mount
|
||||
%attr(0644,root,root) %config(noreplace) /etc/dnf/protected.d/%{name}-tools-minimal.conf
|
||||
|
||||
%{_datadir}/man/man3/%{name}-get-kernel-settings*
|
||||
%{_datadir}/man/man8/%{name}-set-default*
|
||||
@ -516,6 +518,21 @@ rm -r /boot/grub2.tmp/ || :
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Tue Jan 12 2021 Javier Martinez Canillas <javierm@redhat.com> - 2.04-34
|
||||
- at_keyboard: use set 1 when keyboard is in Translate mode (rmetrich)
|
||||
|
||||
* Thu Dec 31 2020 Javier Martinez Canillas <javierm@redhat.com> - 2.04-33
|
||||
- Add DNF protected.d fragments for GRUB packages
|
||||
Resolves: rhbz#1874541
|
||||
- Include keylayouts and at_keyboard modules in EFI builds
|
||||
- Add GRUB enhanced debugging features
|
||||
- ieee1275: Avoiding many unecessary open/close
|
||||
- ieee1275: device mapper and fibre channel discovery support
|
||||
- Fix tps-rpmtest failing due /boot/grub2/grubenv attributes mismatch
|
||||
|
||||
* Thu Nov 12 2020 Peter Hazenberg <fedoraproject@haas-en-berg.nl> - 2.04-32
|
||||
- Fixed some typos in grub-install.8 man page
|
||||
|
||||
* Mon Aug 31 2020 Javier Martinez Canillas <javierm@redhat.com> - 2.04-31
|
||||
- Roll over TFTP block counter to prevent timeouts with data packets
|
||||
Resolves: rhbz#1869335
|
||||
|
Loading…
Reference in New Issue
Block a user