diff options
-rw-r--r-- | extras/mini-os/blkfront.c | 4 | ||||
-rw-r--r-- | stubdom/stubdom-dm | 80 | ||||
-rw-r--r-- | tools/python/xen/xend/image.py | 7 |
3 files changed, 77 insertions, 14 deletions
diff --git a/extras/mini-os/blkfront.c b/extras/mini-os/blkfront.c index 75add45fb4..d869715bea 100644 --- a/extras/mini-os/blkfront.c +++ b/extras/mini-os/blkfront.c @@ -244,10 +244,6 @@ void shutdown_blkfront(struct blkfront_dev *dev) xenbus_wait_for_value(path, "5", &dev->events); err = xenbus_printf(XBT_NIL, nodename, "state", "%u", 6); - xenbus_wait_for_value(path, "6", &dev->events); - - err = xenbus_printf(XBT_NIL, nodename, "state", "%u", 1); - xenbus_wait_for_value(path, "2", &dev->events); xenbus_unwatch_path(XBT_NIL, path); diff --git a/stubdom/stubdom-dm b/stubdom/stubdom-dm index f471e82b36..f431d4f69b 100644 --- a/stubdom/stubdom-dm +++ b/stubdom/stubdom-dm @@ -15,7 +15,10 @@ domname= vncviewer=0 vncpid= extra= -videoram=4 +sdl=0 +opengl=1 +vnc=0 +vncunused=0 while [ "$#" -gt 0 ]; do if [ "$#" -ge 2 ]; @@ -31,22 +34,30 @@ do shift ;; -vnc) - ip=${2%:*}; - vnc_port=${2#*:}; + vnc=1 + op=${2%,*} + ip=${op%:*}; + vnc_port=${op#*:}; shift ;; + -vncunused) + vncunused=1 + shift + ;; -loadvm) extra="$extra -loadvm $2"; shift ;; - -videoram) - videoram="$2" - shift - ;; + -k) + keymap=$2 + shift + ;; esac fi case "$1" in -vncviewer) vncviewer=1 ;; + -sdl) sdl=1 ;; + -disable-opengl) opengl=0 ;; esac shift done @@ -61,7 +72,7 @@ term() { ( [ -n "$vncpid" ] && kill -9 $vncpid xm destroy $domname-dm - #xm destroy $domname + rm /etc/xen/stubdoms/$domname-dm ) & # We need to exit immediately so as to let xend do the commands above exit 0 @@ -77,7 +88,58 @@ do sleep 1 done -creation="xm create -c $domname-dm target=$domid memory=32 videoram=$videoram extra=\"$extra\"" +# Generate stubdom config file +mkdir -p /etc/xen/stubdoms &>/dev/null +echo "#This file is autogenerated, edit $domname instead!" > /etc/xen/stubdoms/$domname-dm +echo "kernel = '/usr/lib/xen/boot/ioemu-stubdom.gz'" >> /etc/xen/stubdoms/$domname-dm + +vfb="sdl=$sdl, opengl=$opengl" +test "$DISPLAY" && vfb="$vfb, display=$DISPLAY" +test "$XAUTHORITY" && vfb="$vfb, xauthority=$XAUTHORITY" +test $vnc != 0 && vfb="$vfb, vnc=$vnc, vncdisplay=$vnc_port, vnclisten=$ip, vncunused=$vncunused" +vncpasswd=`xenstore-read /local/domain/0/backend/vfb/$domid/0/vncpasswd 2>/dev/null` +test "$vncpasswd" && vfb="$vfb, vncpasswd=$vncpasswd" +test "$keymap" && vfb="$vfb, keymap=$keymap" +echo "vfb = ['$vfb']" >> /etc/xen/stubdoms/$domname-dm + +echo -n "disk = [ " >> /etc/xen/stubdoms/$domname-dm +j=0 +for i in `xenstore-ls /local/domain/$domid/device/vbd | grep 'backend =' | awk '{print $3}'` +do + i=${i%\"} + i=${i#\"} + vbd_mode=`xenstore-read $i/mode` + vbd_disk=`xenstore-read $i/params` + vbd_type=`xenstore-read $i/type` + vbd_dev=`xenstore-read $i/dev` + if [ $vbd_type = "file" ] + then + vbd_type="tap:aio" + fi + if [ $j -ne 0 ] + then + echo -n "," >> /etc/xen/stubdoms/$domname-dm + fi + echo -n "'$vbd_type:$vbd_disk,$vbd_dev,$vbd_mode'" >> /etc/xen/stubdoms/$domname-dm + j=$(( $j + 1 )) +done +echo " ] " >> /etc/xen/stubdoms/$domname-dm +echo -n "vif = [ " >> /etc/xen/stubdoms/$domname-dm +j=0 +for i in `xenstore-ls /local/domain/$domid/device/vif | grep 'backend =' | awk '{print $3}'` +do + i=${i%\"} + i=${i#\"} + vif_mac=`xenstore-read $i/mac` + if [ $j -ne 0 ] + then + echo -n "," >> /etc/xen/stubdoms/$domname-dm + fi + echo -n "'mac=$vif_mac'" >> /etc/xen/stubdoms/$domname-dm + j=$(( $j + 1 )) +done +echo " ] " >> /etc/xen/stubdoms/$domname-dm +creation="xm create -c /etc/xen/stubdoms/$domname-dm target=$domid memory=32 extra=\"$extra\"" (while true ; do sleep 60 ; done) | /bin/sh -c "$creation" & #xterm -geometry +0+0 -e /bin/sh -c "$creation ; echo ; echo press ENTER to shut down ; read" & diff --git a/tools/python/xen/xend/image.py b/tools/python/xen/xend/image.py index dc53e4a34c..9e978b97aa 100644 --- a/tools/python/xen/xend/image.py +++ b/tools/python/xen/xend/image.py @@ -729,7 +729,12 @@ class HVMImageHandler(ImageHandler): if not self.display : self.display = '' - self.vm.storeVm(("image/dmargs", " ".join(self.dmargs)), + # Do not store sdl, opengl and serial related qemu cli options + self.vm.storeVm(("image/dmargs", " ".join([ x for x in self.dmargs + if x != "-sdl" + and x != "-disable-opengl" + and x != "-serial" + and x != "pty" ])), ("image/device-model", self.device_model), ("image/display", self.display)) self.vm.permissionsVm("image/dmargs", { 'dom': self.vm.getDomid(), 'read': True } ) |