aboutsummaryrefslogtreecommitdiffstats
path: root/tools/pygrub
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2010-04-12 07:21:44 +0100
committerKeir Fraser <keir.fraser@citrix.com>2010-04-12 07:21:44 +0100
commited85f602c4b242ce9d7ae33bfdc6b48674df2e69 (patch)
treed955fa64f14437f87271bbbea93e0c85581437bf /tools/pygrub
parentbf294945edf1e33cae1edbc4c20be5d311d2382d (diff)
downloadxen-ed85f602c4b242ce9d7ae33bfdc6b48674df2e69.tar.gz
xen-ed85f602c4b242ce9d7ae33bfdc6b48674df2e69.tar.bz2
xen-ed85f602c4b242ce9d7ae33bfdc6b48674df2e69.zip
pygrub: fix 64b Solaris PV guest boot on 32b Linux dom0 & 64b Xen
Signed-off-by: Mark Johnson <mark.r.johnson@oracle.com>
Diffstat (limited to 'tools/pygrub')
-rw-r--r--tools/pygrub/src/pygrub26
1 files changed, 14 insertions, 12 deletions
diff --git a/tools/pygrub/src/pygrub b/tools/pygrub/src/pygrub
index 07bbd6fb37..0973b8a971 100644
--- a/tools/pygrub/src/pygrub
+++ b/tools/pygrub/src/pygrub
@@ -17,6 +17,7 @@ import os, sys, string, struct, tempfile, re
import copy
import logging
import platform
+import xen.lowlevel.xc
import curses, _curses, curses.wrapper, curses.textpad, curses.ascii
import getopt
@@ -573,27 +574,28 @@ def run_grub(file, entry, fs, arg):
return grubcfg
+def supports64bitPVguest():
+ xc = xen.lowlevel.xc.xc()
+ caps = xc.xeninfo()['xen_caps'].split(" ")
+ for cap in caps:
+ if cap == "xen-3.0-x86_64":
+ return True
+ return False
+
# If nothing has been specified, look for a Solaris domU. If found, perform the
# necessary tweaks.
def sniff_solaris(fs, cfg):
if not fs.file_exists("/platform/i86xpv/kernel/unix"):
return cfg
-
- # darned python
- longmode = (sys.maxint != 2147483647L)
- if not longmode:
- longmode = os.uname()[4] == "x86_64"
- if not longmode:
- if (os.access("/usr/bin/isainfo", os.R_OK) and
- os.popen("/usr/bin/isainfo -b").read() == "64\n"):
- longmode = True
if not cfg["kernel"]:
- cfg["kernel"] = "/platform/i86xpv/kernel/unix"
- cfg["ramdisk"] = "/platform/i86pc/boot_archive"
- if longmode:
+ if supports64bitPVguest() and \
+ fs.file_exists("/platform/i86xpv/kernel/amd64/unix"):
cfg["kernel"] = "/platform/i86xpv/kernel/amd64/unix"
cfg["ramdisk"] = "/platform/i86pc/amd64/boot_archive"
+ else:
+ cfg["kernel"] = "/platform/i86xpv/kernel/unix"
+ cfg["ramdisk"] = "/platform/i86pc/boot_archive"
# Unpleasant. Typically we'll have 'root=foo -k' or 'root=foo /kernel -k',
# and we need to maintain Xen properties (root= and ip=) and the kernel