commit:     3b835e6cab782647e122b0973aad4d910c789ad9
Author:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Tue Mar 26 03:52:30 2019 +0000
Commit:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Tue Mar 26 08:03:46 2019 +0000
URL:        https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=3b835e6c

config_kernel(): rewrite --virtio handling

Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>

 gen_configkernel.sh | 147 +++++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 118 insertions(+), 29 deletions(-)

diff --git a/gen_configkernel.sh b/gen_configkernel.sh
index 898bbdd..8d96838 100755
--- a/gen_configkernel.sh
+++ b/gen_configkernel.sh
@@ -405,39 +405,128 @@ config_kernel() {
                kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_FB_CON_DECOR" "y"
        fi
 
-       # VirtIO
+       # Make sure VirtIO modules are enabled in the kernel, if --virtio
        if isTrue "${CMD_VIRTIO}"
        then
-               for k in \
-                       CONFIG_VIRTIO \
-                       CONFIG_VIRTIO_BALLOON \
-                       CONFIG_VIRTIO_BLK \
-                       CONFIG_VIRTIO_BLK_SCSI \
-                       CONFIG_VIRTIO_CONSOLE \
-                       CONFIG_VIRTIO_INPUT \
-                       CONFIG_VIRTIO_MMIO \
-                       CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES \
-                       CONFIG_VIRTIO_NET \
-                       CONFIG_VIRTIO_PCI \
-                       CONFIG_VIRTIO_VSOCKETS \
-                       \
-                       CONFIG_BLK_MQ_VIRTIO \
-                       CONFIG_CRYPTO_DEV_VIRTIO \
-                       CONFIG_DRM_VIRTIO_GPU \
-                       CONFIG_HW_RANDOM_VIRTIO \
-                       CONFIG_PARAVIRT_GUEST \
-                       CONFIG_SCSI_VIRTIO \
-                       CONFIG_VHOST_NET \
-                       \
-                       CONFIG_FW_CFG_SYSFS \
-                       ; do
-                       cfg___virtio_opt=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}/.config" "$k")
-                       case "$cfg___virtio_opt" in
+               print_info 1 "$(getIndent 1)>> Ensure that required kernel 
options for VirtIO support are set..."
+               # VirtIO deps
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_BLOCK" "y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_CRYPTO" 
"y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_CRYPTO_HW" "y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_MMU" "y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_NET" "y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_PCI" "y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_NETDEVICES" "y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_NET_CORE" 
"y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_HAS_IOMEM" "y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_HAS_DMA" 
"y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_TTY" "y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_BLK_DEV" 
"y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_PARAVIRT_GUEST" "y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_SYSFS" "y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_HAS_IOPORT_MAP" "y"
+
+               cfg_CONFIG_SCSI=$(kconfig_get_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_SCSI")
+               case "${cfg_CONFIG_SCSI}" in
+                       y|m) ;; # Do nothing
+                       *) cfg_CONFIG_SCSI=${newcfg_setting}
+               esac
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_SCSI" 
"${cfg_CONFIG_SCSI}"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_SCSI_LOWLEVEL" "y"
+
+               cfg_CONFIG_DRM=$(kconfig_get_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_DRM")
+               case "${cfg_CONFIG_DRM}" in
+                       y|m) ;; # Do nothing
+                       *) cfg_CONFIG_DRM=${newcfg_setting}
+               esac
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_DRM" 
"${cfg_CONFIG_DRM}"
+
+               cfg_CONFIG_HW_RANDOM=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}/.config" "CONFIG_HW_RANDOM")
+               case "${cfg_CONFIG_HW_RANDOM}" in
+                       y|m) ;; # Do nothing
+                       *) cfg_CONFIG_HW_RANDOM=${newcfg_setting}
+               esac
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_HW_RANDOM" "${cfg_CONFIG_HW_RANDOM}"
+
+               cfg_CONFIG_INPUT=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}/.config" "CONFIG_INPUT")
+               case "${cfg_CONFIG_INPUT}" in
+                       y|m) ;; # Do nothing
+                       *) cfg_CONFIG_INPUT=${newcfg_setting}
+               esac
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_INPUT" 
"${cfg_CONFIG_INPUT}"
+
+               cfg_CONFIG_VHOST_NET=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}/.config" "CONFIG_VHOST_NET")
+               case "${cfg_CONFIG_VHOST_NET}" in
+                       y|m) ;; # Do nothing
+                       *) cfg_CONFIG_VHOST_NET=${newcfg_setting}
+               esac
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_VHOST_NET" "${cfg_CONFIG_VHOST_NET}"
+
+               if [ $(($KV_MAJOR * 1000 + ${KV_MINOR})) -ge 4006 ]
+               then
+                       cfg_CONFIG_FW_CFG_SYSFS=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}/.config" "CONFIG_FW_CFG_SYSFS")
+                       case "${cfg_CONFIG_FW_CFG_SYSFS}" in
                                y|m) ;; # Do nothing
-                               *) cfg___virtio_opt='y'
+                               *) cfg_CONFIG_FW_CFG_SYSFS=${newcfg_setting}
                        esac
-                       kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "$k" 
"${cfg___virtio_opt}"
-               done
+                       kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_FW_CFG_SYSFS" "${cfg_CONFIG_FW_CFG_SYSFS}"
+               fi
+
+               cfg_CONFIG_VIRTIO=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}/.config" "CONFIG_VIRTIO")
+               cfg_CONFIG_SCSI_VIRTIO=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}/.config" "CONFIG_SCSI_VIRTIO")
+               cfg_CONFIG_VIRTIO_BLK=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}/.config" "CONFIG_VIRTIO_BLK")
+               cfg_CONFIG_VIRTIO_NET=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}/.config" "CONFIG_VIRTIO_NET")
+               cfg_CONFIG_VIRTIO_PCI=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}/.config" "CONFIG_VIRTIO_PCI")
+               if \
+                       isTrue "${cfg_CONFIG_VIRTIO}" || \
+                       isTrue "${cfg_CONFIG_SCSI_VIRTIO}" || \
+                       isTrue "${cfg_CONFIG_VIRTIO_BLK}" || \
+                       isTrue "${cfg_CONFIG_VIRTIO_NET}" || \
+                       isTrue "${cfg_CONFIG_VIRTIO_PCI}"
+               then
+                       # If the user has configured VirtIO as built-in, we 
need to respect that.
+                       newvirtio_setting="y"
+               else
+                       newvirtio_setting=${newcfg_setting}
+               fi
+
+               # VirtIO modules, activate in order!
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_VIRTIO" 
"${newvirtio_setting}"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_VIRTIO_MENU" "y"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_SCSI_VIRTIO" "${newvirtio_setting}"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_VIRTIO_BLK" "${newvirtio_setting}"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_VIRTIO_NET" "${newvirtio_setting}"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_VIRTIO_PCI" "${newvirtio_setting}"
+
+               if [ $(($KV_MAJOR * 1000 + ${KV_MINOR})) -ge 4011 ]
+               then
+                       kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_VIRTIO_BLK_SCSI" "y"
+                       kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_BLK_MQ_VIRTIO" "y"
+               fi
+
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_VIRTIO_BALLOON" "${newvirtio_setting}"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_VIRTIO_CONSOLE" "${newvirtio_setting}"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_VIRTIO_INPUT" "${newvirtio_setting}"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_DRM_VIRTIO_GPU" "${newvirtio_setting}"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_HW_RANDOM_VIRTIO" "${newvirtio_setting}"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_VIRTIO_MMIO" "${newvirtio_setting}"
+               kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES" "y"
+
+               if [ $(($KV_MAJOR * 1000 + ${KV_MINOR})) -ge 4008 ]
+               then
+                       cfg_CONFIG_VSOCKETS=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}/.config" "CONFIG_VSOCKETS")
+                       case "${cfg_CONFIG_VSOCKETS}" in
+                               y|m) ;; # Do nothing
+                               *) cfg_CONFIG_VSOCKETS=${newcfg_setting}
+                       esac
+                       kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_VSOCKETS" "${cfg_CONFIG_VSOCKETS}"
+
+                       kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_VIRTIO_VSOCKETS" "${newvirtio_setting}"
+                       kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_VIRTIO_VSOCKETS_COMMON" "${newvirtio_setting}"
+               fi
+
+               [ $(($KV_MAJOR * 1000 + ${KV_MINOR})) -ge 4010 ] &&
+                       kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" 
"CONFIG_CRYPTO_DEV_VIRTIO" "${newvirtio_setting}"
        fi
 
        # Microcode setting, intended for early microcode loading

Reply via email to