]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/xen.git/commitdiff
stubdoms: generate stubdom config file
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 23 Apr 2009 09:08:04 +0000 (10:08 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 23 Apr 2009 09:08:04 +0000 (10:08 +0100)
This patch removes the need for a second configuration file for
stubdoms: it is going to be automatically generated by the script
stubdom-dm using command line options and xenstore to find any needed
information.
The configuration script will be placed under /etc/xen/stubdoms and
automatically removed when the domain is destroyed.
The only change needed in xend is not to write on xenstore sdl,
opengl and serial command line options for qemu, because stubdoms do
not support them.
It is safe to remove those two options from xenstore because qemu does
not use xenstore to read commans line options.
Finally this patch fixes blkfront disconnections from backends and
display and xauthority variables for pv guests.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
extras/mini-os/blkfront.c
stubdom/stubdom-dm
tools/python/xen/xend/image.py

index 75add45fb48e0d1b93a54395c11b89b98605e81e..d869715beacfd3fb3d5dbc9bb02c85c470f9847a 100644 (file)
@@ -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);
 
index f471e82b366e14b70601c6b0f8cc92f6e140a0e0..f431d4f69bec8f5802ec4b6b187144cd5ff4115e 100644 (file)
@@ -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" &
index dc53e4a34c1eedde90c91a1952db94fcec1416d6..9e978b97aa00bc492f72fb2d815e66b21750ad29 100644 (file)
@@ -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 } )