There are two types of xen enabled kernel in linux, one is called xenlinux which is older and can only boot on xen domain but not on any real hardware without xen hypervisor. The other is called pvops which can boot on xen domain as well as real hardware.
This patch is to prevent booting xenlinux kernel on real hardware by filtering it out from boot menu. If not the error will show up when attempting to boot it. "Loading Linux xen ..." error: invalid magic number Loading initial ramdisk error: you need to load the kernel first" This patch achieves it by checking the host type, then disable xenlinux kernel from booting on hosts that is not xen pv domU, and meanwhile allow xen pvops kernel to boot. --- util/grub.d/10_linux.in | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-) diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in index d2e2a8f..b055ccc 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -207,6 +207,30 @@ while [ "x$list" != "x" ] ; do fi done + # check if host is xen pv domU + if [ ! -e /proc/xen/xsd_port -a -e /proc/xen ]; then + dmi=/sys/class/dmi/id + if [ -r "${dmi}/product_name" -a -r "${dmi}/sys_vendor" ]; then + product_name=`cat ${dmi}/product_name` + sys_vendor=`cat ${dmi}/sys_vendor` + if test "${sys_vendor}" = "Xen" -a "${product_name}" = "HVM domU"; then + # host is xen HVM guest + xen_pv_domU=false + fi + fi + else + xen_pv_domU=false + fi + + if test "$xen_pv_domU" = "false" ; then + # prevent xen kernel without pv_opt support from booting + if (grep -qx "CONFIG_XEN=y" "${config}" 2> /dev/null && ! grep -qx "CONFIG_PARAVIRT=y" "${config}" 2> /dev/null); then + echo "Skip xenlinux kernel $linux" >&2 + list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '` + continue + fi + fi + initramfs= if test -n "${config}" ; then initramfs=`grep CONFIG_INITRAMFS_SOURCE= "${config}" | cut -f2 -d= | tr -d \"` -- 1.7.3.4 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel