commit:     c2eebda7f0e16390ab0dd45d604285fba403abb8
Author:     Robin H. Johnson <robbat2 <AT> gentoo <DOT> org>
AuthorDate: Mon Jan  2 22:57:12 2017 +0000
Commit:     Robin H. Johnson <robbat2 <AT> gentoo <DOT> org>
CommitDate: Mon Jan  2 22:57:12 2017 +0000
URL:        https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=c2eebda7

Make early microcode loading optional.

Nasty corner case with early microcode loading is that there are some
processors that hardlock when the new microcode is loaded.

Disable microcode loading by default to avoid crashing those systems.

Signed-off-by: Robin H. Johnson <robbat2 <AT> gentoo.org>

 gen_cmdline.sh       |  4 ++++
 gen_configkernel.sh  | 22 ++++++++++++++++++++++
 gen_determineargs.sh |  1 +
 gen_initramfs.sh     |  2 +-
 4 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/gen_cmdline.sh b/gen_cmdline.sh
index 57a8e1d..f4392f9 100755
--- a/gen_cmdline.sh
+++ b/gen_cmdline.sh
@@ -314,6 +314,10 @@ parse_cmdline() {
                        CMD_BUSYBOX=`parse_optbool "$*"`
                        print_info 2 "CMD_BUSYBOX: ${CMD_BUSYBOX}"
                        ;;
+               --microcode|--no-microcode)
+                       CMD_MICROCODE=`parse_optbool "$*"`
+                       print_info 2 "CMD_MICROCODE: ${CMD_MICROCODE}"
+                       ;;
                --nfs|--no-nfs)
                        CMD_NFS=`parse_optbool "$*"`
                        print_info 2 "CMD_NFS: ${CMD_NFS}"

diff --git a/gen_configkernel.sh b/gen_configkernel.sh
index 9c37649..74693f3 100755
--- a/gen_configkernel.sh
+++ b/gen_configkernel.sh
@@ -218,4 +218,26 @@ config_kernel() {
                        kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "$k" 
"${cfg___virtio_opt}"
                done
        fi
+
+       # Microcode setting, intended for early microcode loading
+       # needs to be compiled in.
+       if isTrue ${MICROCODE}
+       then
+               for k in \
+                       CONFIG_MICROCODE \
+                       CONFIG_MICROCODE_INTEL \
+                       CONFIG_MICROCODE_AMD \
+                       CONFIG_MICROCODE_OLD_INTERFACE \
+                       CONFIG_MICROCODE_INTEL_EARLY \
+                       CONFIG_MICROCODE_AMD_EARLY \
+                       CONFIG_MICROCODE_EARLY \
+                       ; do
+                       cfg=$(kconfig_get_opt "${KERNEL_OUTPUTDIR}/.config" 
"$k")
+                       case "$cfg" in
+                               y) ;; # Do nothing
+                               *) cfg='y'
+                       esac
+                       kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "$k" 
"${cfg}"
+               done
+       fi
 }

diff --git a/gen_determineargs.sh b/gen_determineargs.sh
index 0d908b6..2dbd958 100755
--- a/gen_determineargs.sh
+++ b/gen_determineargs.sh
@@ -117,6 +117,7 @@ determine_real_args() {
        set_config_with_override BOOL   ISCSI                CMD_ISCSI
        set_config_with_override BOOL   BUSYBOX              CMD_BUSYBOX        
      "yes"
        set_config_with_override BOOL   NFS                  CMD_NFS            
      "yes"
+       set_config_with_override BOOL   MICROCODE            CMD_MICROCODE
        set_config_with_override BOOL   UNIONFS              CMD_UNIONFS
        set_config_with_override BOOL   NETBOOT              CMD_NETBOOT
        set_config_with_override STRING REAL_ROOT            CMD_REAL_ROOT

diff --git a/gen_initramfs.sh b/gen_initramfs.sh
index e968719..afbef92 100755
--- a/gen_initramfs.sh
+++ b/gen_initramfs.sh
@@ -1056,7 +1056,7 @@ create_initramfs() {
                ## It only loads monolithic ucode from an uncompressed cpio, 
which MUST
                ## be before the other cpio archives in the stream.
                cfg_CONFIG_MICROCODE=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE)
-               if [ "${cfg_CONFIG_MICROCODE}" == "y" ]; then
+               if isTrue "${MICROCODE}" && [ "${cfg_CONFIG_MICROCODE}" == "y" 
]; then
                        cfg_CONFIG_MICROCODE_INTEL=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE_INTEL)
                        cfg_CONFIG_MICROCODE_AMD=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE_AMD)
                        print_info 1 "early-microcode: >> Preparing..."

Reply via email to