diff --git a/0001-net-drivers-ieee1275-ofnet-Remove-200-ms-timeout-in-.patch b/0001-net-drivers-ieee1275-ofnet-Remove-200-ms-timeout-in-.patch new file mode 100644 index 0000000..2b72d15 --- /dev/null +++ b/0001-net-drivers-ieee1275-ofnet-Remove-200-ms-timeout-in-.patch @@ -0,0 +1,60 @@ +From d35ff22516b161f6d472f7f5371a89597b072d04 Mon Sep 17 00:00:00 2001 +From: Michael Chang +Date: Mon, 6 May 2024 10:34:22 +0800 +Subject: [PATCH] net/drivers/ieee1275/ofnet: Remove 200 ms timeout in + get_card_packet() to reduce input latency + +When GRUB image is netbooted on ppc64le, the keyboard input exhibits +significant latency, reports even say that characters are processed +about once per second. This issue makes interactively trying to debug +a ppc64le config very difficult. + +It seems that the latency is largely caused by a 200 ms timeout in the +idle event loop, during which the network card interface is consistently +polled for incoming packets. Often, no packets arrive during this +period, so the timeout nearly always expires, which blocks the response +to key inputs. + +Furthermore, this 200 ms timeout might not need to be enforced at this +basic layer, considering that GRUB performs synchronous reads and its +timeout management is actually handled by higher layers, not directly in +the card instance. Additionally, the idle polling, which reacts to +unsolicited packets like ICMP and SLAAC, would be fine at a less frequent +polling interval, rather than needing a timeout for receiving a response. + +For these reasons, we believe the timeout in get_card_packet() should be +effectively removed. According to test results, the delay has disappeared, +and it is now much easier to use interactively. + +Signed-Off-by: Michael Chang +Tested-by: Tony Jones +Reviewed-by: Daniel Kiper +--- + grub-core/net/drivers/ieee1275/ofnet.c | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/grub-core/net/drivers/ieee1275/ofnet.c b/grub-core/net/drivers/ieee1275/ofnet.c +index 78f03df8e..3bf48b3f0 100644 +--- a/grub-core/net/drivers/ieee1275/ofnet.c ++++ b/grub-core/net/drivers/ieee1275/ofnet.c +@@ -82,15 +82,11 @@ get_card_packet (struct grub_net_card *dev) + grub_ssize_t actual; + int rc; + struct grub_ofnetcard_data *data = dev->data; +- grub_uint64_t start_time; + struct grub_net_buff *nb; + +- start_time = grub_get_time_ms (); +- do +- rc = grub_ieee1275_read (data->handle, dev->rcvbuf, dev->rcvbufsize, &actual); +- while ((actual <= 0 || rc < 0) && (grub_get_time_ms () - start_time < 200)); ++ rc = grub_ieee1275_read (data->handle, dev->rcvbuf, dev->rcvbufsize, &actual); + +- if (actual <= 0) ++ if (actual <= 0 || rc < 0) + return NULL; + + nb = grub_netbuff_alloc (actual + 2); +-- +2.45.2 + diff --git a/0007-grub-switch-to-blscfg-adapt-to-openSUSE.patch b/0007-grub-switch-to-blscfg-adapt-to-openSUSE.patch index e8b23ab..a2ed343 100644 --- a/0007-grub-switch-to-blscfg-adapt-to-openSUSE.patch +++ b/0007-grub-switch-to-blscfg-adapt-to-openSUSE.patch @@ -1,4 +1,4 @@ -From 855b3e5cd4d672e961a366ff0f53e3a09a1ad0cc Mon Sep 17 00:00:00 2001 +From 96e5a28d120856057fe7fc9b281f11f8933063b7 Mon Sep 17 00:00:00 2001 From: Michael Chang Date: Fri, 30 Jun 2023 14:37:41 +0800 Subject: [PATCH 7/9] grub-switch-to-blscfg: adapt to openSUSE @@ -12,17 +12,26 @@ A few tweaks to make it 'just works' for openSUSE: - remove RHEL specific $GRUB_LINUX_MAKE_DEBUG and all related code - remove ostree specific hack - ignore increment.mod +- fix error in dash shell script +- fix kernel flavor parsing in openSUSE Signed-off-by: Michael Chang --- - util/grub-switch-to-blscfg.in | 144 ++++++++++++++++++++-------------- - 1 file changed, 87 insertions(+), 57 deletions(-) + util/grub-switch-to-blscfg.in | 156 ++++++++++++++++++++-------------- + 1 file changed, 94 insertions(+), 62 deletions(-) diff --git a/util/grub-switch-to-blscfg.in b/util/grub-switch-to-blscfg.in -index a851424be..66ecc0cae 100644 +index a851424be..145c22add 100644 --- a/util/grub-switch-to-blscfg.in +++ b/util/grub-switch-to-blscfg.in -@@ -34,21 +34,18 @@ fi +@@ -28,27 +28,24 @@ PACKAGE_NAME=@PACKAGE_NAME@ + PACKAGE_VERSION=@PACKAGE_VERSION@ + datarootdir="@datarootdir@" + datadir="@datadir@" +-if [ ! -v pkgdatadir ]; then ++if [ -z "${pkgdatadir+x}" ]; then + pkgdatadir="${datadir}/@PACKAGE@" + fi self=`basename $0` @@ -162,7 +171,7 @@ index a851424be..66ecc0cae 100644 gettext_printf "Couldn't find config file\n" 1>&2 exit 1 fi -@@ -190,27 +252,22 @@ fi +@@ -190,27 +252,24 @@ fi mkbls() { local kernelver=$1 && shift local datetime=$1 && shift @@ -173,15 +182,21 @@ index a851424be..66ecc0cae 100644 - local debugid="" local flavor="" - if [ "$kernelver" == *\+* ] ; then - local flavor=-"${kernelver##*+}" +- if [ "$kernelver" == *\+* ] ; then +- local flavor=-"${kernelver##*+}" - if [ "${flavor}" == "-debug" ]; then - local debugname=" with debugging" - local debugid="-debug" - fi - fi +- fi ++ case "$kernelver" in ++ *-*-*) ++ flavor=-"${kernelver##*-}" ++ ;; ++ esac ( - source /etc/os-release +- source /etc/os-release ++ . /etc/os-release cat < Date: Wed, 13 Mar 2024 15:26:42 +0800 Subject: [PATCH 9/9] 10_linux: Some refinement for BLS @@ -8,13 +8,16 @@ kernelopts assignment in the grub boot config itself to fully delegate the responsibility of generating kernel options to a functioning BLS generator. +Additionally, removing unused dead code, which is often blamed for +causing errors in the dash shell script. + Signed-off-by: Michael Chang --- - util/grub.d/10_linux.in | 29 ----------------------------- - 1 file changed, 29 deletions(-) + util/grub.d/10_linux.in | 194 ---------------------------------------- + 1 file changed, 194 deletions(-) diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index edf0fca55..7cbff7466 100644 +index edf0fca55..666eae995 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -93,11 +93,7 @@ fi @@ -29,20 +32,138 @@ index edf0fca55..7cbff7466 100644 cat </dev/null | tac)) || : +- +- echo "${files[@]}" +-} +- +-update_bls_cmdline() +-{ +- local cmdline="root=${LINUX_ROOT_DEVICE} ro ${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" +- local -a files=($(get_sorted_bls)) +- +- for bls in "${files[@]}"; do +- local options="${cmdline}" +- if [ -z "${bls##*debug*}" ]; then +- options="${options} ${GRUB_CMDLINE_LINUX_DEBUG}" +- fi +- options="$(echo "${options}" | sed -e 's/\//\\\//g')" +- sed -i -e "s/^options.*/options ${options}/" "${blsdir}/${bls}.conf" +- done +-} +- +-populate_menu() +-{ +- local -a files=($(get_sorted_bls)) +- +- gettext_printf "Generating boot entries from BLS files...\n" >&2 +- +- for bls in "${files[@]}"; do +- read_config "${blsdir}/${bls}.conf" +- +- menu="${menu}menuentry '${title}' ${grub_arg} --id=${bls} {\n" +- menu="${menu}\t linux ${linux} ${options}\n" +- if [ -n "${initrd}" ] ; then +- menu="${menu}\t initrd ${boot_prefix}${initrd}\n" +- fi +- menu="${menu}}\n\n" +- done +- # The printf command seems to be more reliable across shells for special character (\n, \t) evaluation +- printf "$menu" +-} +- -# Make BLS the default if GRUB_ENABLE_BLSCFG was not set and grubby is not installed. -# FIXME: The test should be aligned to openSUSE, grubby is not our default tool -if [ -z "${GRUB_ENABLE_BLSCFG}" ] && ! command -v new-kernel-pkg >/dev/null && false; then - GRUB_ENABLE_BLSCFG="true" -fi - +- if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then if [ x$dirname = x/ ]; then -@@ -252,31 +243,11 @@ if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then + if [ -z "${prepare_root_cache}" ]; then +@@ -225,111 +125,17 @@ if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then + prepare_grub_to_access_device_with_variable boot ${boot_device} + fi +- arch="$(uname -m)" +- if [ "x${arch}" = "xppc64le" ] && [ -d /sys/firmware/opal ]; then +- +- BLS_POPULATE_MENU="true" +- petitboot_path="/sys/firmware/devicetree/base/ibm,firmware-versions/petitboot" +- +- if test -e ${petitboot_path}; then +- read -r -d '' petitboot_version < ${petitboot_path} +- petitboot_version="$(echo ${petitboot_version//v})" +- +- if test -n ${petitboot_version}; then +- major_version="$(echo ${petitboot_version} | cut -d . -f1)" +- minor_version="$(echo ${petitboot_version} | cut -d . -f2)" +- +- re='^[0-9]+$' +- if [[ $major_version =~ $re ]] && [[ $minor_version =~ $re ]] && +- ([[ ${major_version} -gt 1 ]] || +- [[ ${major_version} -eq 1 && +- ${minor_version} -ge 8 ]]); then +- BLS_POPULATE_MENU="false" +- fi +- fi +- fi +- fi +- populate_header_warn - cat << EOF @@ -69,10 +190,63 @@ index edf0fca55..7cbff7466 100644 insmod blscfg blscfg EOF +- fi +- +- if [ "x${GRUB_GRUBENV_UPDATE}" = "xyes" ]; then +- blsdir="/boot/loader/entries" +- [ -d "${blsdir}" ] && GRUB_BLS_FS="$(${grub_probe} --target=fs ${blsdir})" +- if [ "x${GRUB_BLS_FS}" = "xbtrfs" ] || [ "x${GRUB_BLS_FS}" = "xzfs" ]; then +- blsdir=$(make_system_path_relative_to_its_root "${blsdir}") +- if [ "x${blsdir}" != "x/loader/entries" ] && [ "x${blsdir}" != "x/boot/loader/entries" ]; then +- ${grub_editenv} - set blsdir="${blsdir}" +- fi +- fi +- +- if [ -n "${GRUB_EARLY_INITRD_LINUX_CUSTOM}" ]; then +- ${grub_editenv} - set early_initrd="${GRUB_EARLY_INITRD_LINUX_CUSTOM}" +- fi +- +- if [ -n "${GRUB_DEFAULT_DTB}" ]; then +- ${grub_editenv} - set devicetree="${GRUB_DEFAULT_DTB}" +- fi +- +- if [ -n "${GRUB_SAVEDEFAULT}" ]; then +- ${grub_editenv} - set save_default="${GRUB_SAVEDEFAULT}" +- fi - fi - if [ "x${GRUB_GRUBENV_UPDATE}" = "xyes" ]; then - blsdir="/boot/loader/entries" + exit 0 + fi + +-mktitle () +-{ +- local title_type +- local version +- local OS_NAME +- local OS_VERS +- +- title_type=$1 && shift +- version=$1 && shift +- +- OS_NAME="$(eval $(grep ^NAME= /etc/os-release) ; echo ${NAME})" +- OS_VERS="$(eval $(grep ^VERSION= /etc/os-release) ; echo ${VERSION})" +- +- case $title_type in +- recovery) +- title=$(printf '%s (%s) %s (recovery mode)' \ +- "${OS_NAME}" "${version}" "${OS_VERS}") +- ;; +- *) +- title=$(printf '%s (%s) %s' \ +- "${OS_NAME}" "${version}" "${OS_VERS}") +- ;; +- esac +- echo -n ${title} +-} +- + title_correction_code= + + hotkey=1 -- -2.44.0 +2.45.2 diff --git a/grub2.changes b/grub2.changes index f49ce8f..6d9c4c5 100644 --- a/grub2.changes +++ b/grub2.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Fri Jul 5 12:23:06 UTC 2024 - Michael Chang + +- Fix error if dash shell script is used (bsc#1226453) + * 0007-grub-switch-to-blscfg-adapt-to-openSUSE.patch + * 0009-10_linux-Some-refinement-for-BLS.patch +- Fix input handling in ppc64le grub2 has high latency (bsc#1223535) + * 0001-net-drivers-ieee1275-ofnet-Remove-200-ms-timeout-in-.patch + ------------------------------------------------------------------- Fri Jun 7 02:13:08 UTC 2024 - Michael Chang diff --git a/grub2.spec b/grub2.spec index ef3127a..c7f912c 100644 --- a/grub2.spec +++ b/grub2.spec @@ -404,6 +404,7 @@ Patch213: 0006-Follow-the-device-where-blscfg-is-discovered.patch Patch214: 0007-grub-switch-to-blscfg-adapt-to-openSUSE.patch Patch215: 0008-blscfg-reading-bls-fragments-if-boot-present.patch Patch216: 0009-10_linux-Some-refinement-for-BLS.patch +Patch217: 0001-net-drivers-ieee1275-ofnet-Remove-200-ms-timeout-in-.patch Requires: gettext-runtime %if 0%{?suse_version} >= 1140