From 92a7e8ec4639be5c0d6988353c649949d7e17f83 Mon Sep 17 00:00:00 2001 From: Bruce Ashfield Date: Tue, 7 Nov 2023 00:34:18 +0000 Subject: [PATCH] kernel: allow configuration to be skipped .. but warn Allow the kernel include file to be skipped, even if a kernel is capable of merging and using the fragments in the layer and kernel-cache. Setting SKIP_META_VIRT_KERNEL_INCLUDE="t" in a kernel bbappend, or in a configuration file will inhibit the generated / detected include file. BUT If that opt-out is done, we warn, as the user has explicitly disabled safeguards that help ensure that subtle runtime issues aren't introduced. BUT If someone really knows what they are doing, they don't want the warning to be present in each build. So setting META_VIRT_KERNEL_CHECK_WARNING_INHIBIT="t" will inhibit the message. At that point, you have jumped through all the hoops and you are free to ensure your kernel configuration is correct using other means. Signed-off-by: Bruce Ashfield --- recipes-kernel/linux/linux-%.bbappend | 32 +++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/recipes-kernel/linux/linux-%.bbappend b/recipes-kernel/linux/linux-%.bbappend index 5f315787..dbae9b14 100644 --- a/recipes-kernel/linux/linux-%.bbappend +++ b/recipes-kernel/linux/linux-%.bbappend @@ -4,7 +4,35 @@ LINUX_MAJOR = "${@(d.getVar('LINUX_VERSION') or "x.y").split('.')[0]}" LINUX_MINOR = "${@(d.getVar('LINUX_VERSION') or "x.y").split('.')[1]}" - -KERNEL_META_TYPE = "${@'yocto' if d.getVar('SRC_URI').find('type=kmeta') > 0 else 'none'}" +KERNEL_META_TYPE = "${@'yocto' if d.getVar('SRC_URI').find('type=kmeta') > 0 and d.getVar('SKIP_META_VIRT_KERNEL_INCLUDE') == None else 'none'}" include ${@bb.utils.contains('DISTRO_FEATURES', 'virtualization', 'linux-${KERNEL_META_TYPE}_${LINUX_MAJOR}.${LINUX_MINOR}_virtualization.inc', '', d)} + +python __anonymous () { + # Gather the variables + virt_enabled = bb.utils.contains('DISTRO_FEATURES', 'virtualization', 'True', '', d ) + skip_kernel_include_enabled = d.getVar('SKIP_META_VIRT_KERNEL_INCLUDE') + kmeta_type = d.getVar('SRC_URI').find('type=kmeta') + inhibit_skip_kernel_check_warning = d.getVar('META_VIRT_KERNEL_CHECK_WARNING_INHIBIT') + + # + # We warn if: + # - the kernel has the capability of merging fragments + # - virtualiation is enabled + # - and the user has decided to force skip the include + # + # .. because they have knowingly opted-out of our tested + # kernel configurations, and need to be warned. + # + # BUT, it can also be annoying to get a warning when you + # have explcitly opted out. So we have one more warning + # that indicates that the impacts are understood and this + # really is on purpse. If META_VIRT_KERNEL_CHECK_WARNING_INHIBIT + # is set, we won't do the warning. + # + if virt_enabled and kmeta_type > 0 and skip_kernel_include_enabled: + if not inhibit_skip_kernel_check_warning: + bb.warn( "You have a kernel-yocto enabled kernel, but have inhibited \ +virtualization kernel features. Some runtime issues may be present in \ +your final image" ) +}