Hi,

based on Bastian's comments here and a clarification on IRC (thanks!), I
would like to propose the attached patch.
It implements the following behaviour
CONFIG_XEN + CONFIG_XEN_PRIVILEGED_GUEST
 --> added to xen0Kernels
CONFIG_XEN + CONFIG_PARAVIRT
 --> kept in kernel list
CONFIG_XEN + no CONFIG_PARAVIRT
 --> removed from kernel list
     (domU capable, but not bootable standalone)
no CONFIG_XEN
 --> kept in kernel list

For the Debian (most of etch and lenny for i386 and amd64) kernels,
the valid config flags are

config-2.6.18-6-486
config-2.6.18-6-686
config-2.6.18-6-686-bigmem
config-2.6.18-6-amd64
config-2.6.18-6-k7
config-2.6.18-6-vserver-686
config-2.6.18-6-vserver-amd64
config-2.6.18-6-vserver-k7
config-2.6.18-6-xen-686 CONFIG_XEN CONFIG_XEN_PRIVILEGED_GUEST
config-2.6.18-6-xen-amd64 CONFIG_XEN CONFIG_XEN_PRIVILEGED_GUEST
config-2.6.18-6-xen-vserver-686 CONFIG_XEN CONFIG_XEN_PRIVILEGED_GUEST
config-2.6.18-6-xen-vserver-amd64 CONFIG_XEN CONFIG_XEN_PRIVILEGED_GUEST
config-2.6.26-1-486 CONFIG_PARAVIRT
config-2.6.26-1-686 CONFIG_PARAVIRT
config-2.6.26-1-686-bigmem CONFIG_XEN CONFIG_PARAVIRT
config-2.6.26-1-amd64 CONFIG_PARAVIRT
config-2.6.26-1-openvz-686 CONFIG_XEN CONFIG_PARAVIRT
config-2.6.26-1-openvz-amd64 CONFIG_PARAVIRT
config-2.6.26-1-vserver-686 CONFIG_PARAVIRT
config-2.6.26-1-vserver-686-bigmem CONFIG_XEN CONFIG_PARAVIRT
config-2.6.26-1-vserver-amd64 CONFIG_PARAVIRT
config-2.6.26-1-xen-686 CONFIG_XEN CONFIG_XEN_PRIVILEGED_GUEST
config-2.6.26-1-xen-amd64 CONFIG_XEN CONFIG_XEN_PRIVILEGED_GUEST

so we end up with:

bootable with xen kernel
 - 2.6.26-1-xen-amd64
 - 2.6.26-1-xen-686
 - 2.6.18-6-xen-vserver-amd64
 - 2.6.18-6-xen-vserver-686
 - 2.6.18-6-xen-amd64
 - 2.6.18-6-xen-686
bootable standalone
 - 2.6.26-1-vserver-686-bigmem
 - 2.6.26-1-vserver-amd64
 - 2.6.26-1-vserver-686
 - 2.6.26-1-openvz-amd64
 - 2.6.26-1-openvz-686
 - 2.6.26-1-686-bigmem
 - 2.6.26-1-amd64
 - 2.6.26-1-686
 - 2.6.26-1-486
 - 2.6.18-6-vserver-k7
 - 2.6.18-6-vserver-amd64
 - 2.6.18-6-vserver-686
 - 2.6.18-6-686-bigmem
 - 2.6.18-6-k7
 - 2.6.18-6-amd64
 - 2.6.18-6-686
 - 2.6.18-6-486

I have also consolidated the detection and stuff to make use of the
sorted kernel list and postprocess that.
Even though the diff contains a changelog snippet, I would prefer to
have Bastian OK it and also happily leave uploading to the grub
maintainers, even though I could also NMU (e.g. when I get bored waiting
or it actually helps...).

Kind regards

T.
-- 
Thomas Viehmann, http://thomas.viehmann.net/
diff -u grub-0.97/debian/update-grub grub-0.97/debian/update-grub
--- grub-0.97/debian/update-grub
+++ grub-0.97/debian/update-grub
@@ -748,58 +748,6 @@
        echo "none found, skipping ..." >&2
 fi
 
-xen0Kernels=""
-# First old style non-CONFIG_PARAVIRT kernels with xen0 support.
-for ver in `grep -l CONFIG_XEN=y /boot/config* | sed -e s%/boot/config-%%`; do
-  if ! grep -q CONFIG_XEN_PRIVILEGED_GUEST=y /boot/config-$ver ; then
-      continue
-  fi
-  # ver is a kernel version
-  kern="/boot/vmlinuz-$ver"
-  if [ -r $kern ] ; then
-       newerKernels=""
-       for i in $xen0Kernels ; do
-                res=$(CompareVersions "$kern" "$i")
-                if [ "$kern" != "" ] && [ "$res" -gt 0 ] ; then
-                        newerKernels="$newerKernels $kern $i"
-                        kern=""
-                else
-                        newerKernels="$newerKernels $i"
-                fi
-        done
-        if [ "$kern" != "" ] ; then
-                newerKernels="$newerKernels $kern"
-        fi
-        xen0Kernels="$newerKernels"
-    fi
-done
-
-# Second new style CONFIG_PARAVIRT kernels with xen support. There is
-# no distinction between xen0 and xenU in these kernels.
-for ver in `grep -l CONFIG_PARAVIRT=y /boot/config* | sed -e s%/boot/config-%%`; do
-  if ! grep -q CONFIG_XEN=y /boot/config-$ver ; then
-      continue
-  fi
-  # ver is a kernel version
-  kern="/boot/vmlinuz-$ver"
-  if [ -r $kern ] ; then
-       newerKernels=""
-       for i in $xen0Kernels ; do
-                res=$(CompareVersions "$kern" "$i")
-                if [ "$kern" != "" ] && [ "$res" -gt 0 ] ; then
-                        newerKernels="$newerKernels $kern $i"
-                        kern=""
-                else
-                        newerKernels="$newerKernels $i"
-                fi
-        done
-        if [ "$kern" != "" ] ; then
-                newerKernels="$newerKernels $kern"
-        fi
-        xen0Kernels="$newerKernels"
-    fi
-done
-
 sortedKernels=""
 for kern in $(/bin/ls -1vr /boot | grep -v "dpkg-*" | grep "^vmlinuz-") ; do
         kern="/boot/$kern"
@@ -819,6 +767,39 @@
 	sortedKernels="$newerKernels"
 done
 
+# Check the sorted kernels for Xen-capable images
+# Bastian Blank explains in #500336:
+# - CONFIG_XEN is set for any Xen capable image.
+# - CONFIG_PARAVIRT is set for the images which can do both.
+# - CONFIG_XEN_PRIVILEGED_GUEST is currently set for anything which can be
+#   booted via a hypervisor.  
+# So images with CONFIG_XEN and no CONFIG_PARAVIRT must not show up as
+# normal bootable.
+#
+# So: CONFIG_XEN + CONFIG_XEN_PRIVILEGED_GUEST
+#     --> dom0-capable
+#     CONFIG_XEN + CONFIG_PARAVIRT
+#     --> domU capabable that can be booted without Xen as well
+#     CONFIG_XEN + NO CONFIG_PARAVIRT
+#     --> domU capable, but must not show up in grub
+newSortedKernels=""
+xen0Kernels=""
+for kern in $sortedKernels ; do
+	kernCfg=$(echo "$kern" | sed 's,/vmlinuz-,/config-,')
+	if grep -q CONFIG_XEN=y "$kernCfg" ; then
+		if grep -q CONFIG_PARAVIRT=y "$kernCfg" ; then
+			newSortedKernels="$newSortedKernels $kern"
+		fi
+		if grep -q CONFIG_XEN_PRIVILEGED_GUEST=y "$kernCfg" ; then
+			xen0Kernels="$xen0Kernels $kern"
+		fi
+	else
+		newSortedKernels="$newSortedKernels $kern"
+	fi
+	
+done
+sortedKernels="$newSortedKernels"
+
 if test -f "/boot/vmlinuz.old" ; then
 	sortedKernels="/boot/vmlinuz.old $sortedKernels"
 fi
diff -u grub-0.97/debian/changelog grub-0.97/debian/changelog
--- grub-0.97/debian/changelog
+++ grub-0.97/debian/changelog
@@ -1,3 +1,10 @@
+grub (0.97-47.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Fix xen-capability detection. Closes: #500336
+
+ -- Thomas Viehmann <[EMAIL PROTECTED]>  Fri, 17 Oct 2008 23:27:55 +0200
+
 grub (0.97-47) unstable; urgency=high
 
   * update-grub: Send grub-probe stderr output to /dev/null.  (Closes: #495909)

Reply via email to