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..."