[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] Paravirt framebuffer support in xend [3/5]
> Add support in xend and xm to know about the vnc and sdl options for PV > domains. Launch xen-sdlfb or xen-vncfb if we're setting up a graphics > console. Also, if we're going to use a graphical console in the guest, > set /<dompath>/console/use_graphics to 1. > > (Note: this patch requires a tiny bit of obvious change to work with my > patch for vnclisten that I posted earlier today) > > Signed-off-by: Jeremy Katz <katzj@xxxxxxxxxx> > diff -r a2a8f1ed16ea -r 2b360c6b44fa tools/python/xen/xend/image.py > --- a/tools/python/xen/xend/image.py Sat Sep 02 15:22:19 2006 -0400 > +++ b/tools/python/xen/xend/image.py Sat Sep 02 15:23:32 2006 -0400 > @@ -20,8 +20,10 @@ import os, string > import os, string > import re > import math > +import signal Why? > > import xen.lowlevel.xc > +import xen.util.auxbin > from xen.xend import sxp > from xen.xend.XendError import VmError > from xen.xend.XendLogging import log > @@ -189,6 +191,68 @@ class LinuxImageHandler(ImageHandler): > cmdline = self.cmdline, > ramdisk = self.ramdisk, > features = self.vm.getFeatures()) > + > + def configure(self, imageConfig, deviceConfig): Does this really belong in class LinuxImageHandler? > + ImageHandler.configure(self, imageConfig, deviceConfig) > + > + self.pid = 0 > + log.info("configuring linux guest") > + > + # set up the graphics bits. > + # FIXME: this is much like what we do for HVM, should it be > + # for all image types now? > + self.display = sxp.child_value(imageConfig, 'display') > + self.xauthority = sxp.child_value(imageConfig, 'xauthority') > + self.vncconsole = sxp.child_value(imageConfig, 'vncconsole') > + self.vnc = sxp.child_value(imageConfig, 'vnc') > + self.sdl = sxp.child_value(imageConfig, 'sdl') > + if self.vnc: > + self.vncdisplay = sxp.child_value(imageConfig, 'vncdisplay', > + int(self.vm.getDomid())) > + self.vncunused = sxp.child_value(imageConfig, 'vncunused') > + self.vnclisten = sxp.child_value(imageConfig, 'vnclisten') > + if self.vnc or self.sdl: > + log.info("setting use_graphics") > + self.vm.writeDom("console/use_graphics", "1") > + else: > + self.vm.writeDom("console/use_graphics", "0") > + > + def createDeviceModel(self): Maybe call ImageHandler.createDeviceModel? > + if self.pid: > + return > + # Execute device model (for us, it's just the fb frontend) > + if not self.vnc and not self.sdl: > + return > + > + if self.vnc: > + args = [xen.util.auxbin.pathTo("xen-vncfb")] > + if self.vncunused: > + args += ['--unused'] > + elif self.vncdisplay: > + args += [ "--vncport", "%d" %(5900 + self.vncdisplay,) ] > + if self.vnclisten: > + args += [ "--listen", self.vnclisten ] > + if self.vncconsole: > + args += [ "--vncviewer" ] > + elif self.sdl: > + args = [xen.util.auxbin.pathTo("xen-sdlfb")] > + args = args + [ "--domid", "%d" % self.vm.getDomid(), > + "--title", self.vm.info['name'] ] > + env = dict(os.environ) > + if self.display: > + env['DISPLAY'] = self.display > + if self.xauthority: > + env['XAUTHORITY'] = self.xauthority > + log.info("spawning video: %s", args) > + self.pid = os.spawnve(os.P_NOWAIT, args[0], args, env) > + log.info("device model pid: %d", self.pid) > + > + def destroy(self): > + if not self.pid: > + return > + os.kill(self.pid, signal.SIGKILL) > + os.waitpid(self.pid, 0) > + self.pid = 0 > > class PPC_LinuxImageHandler(LinuxImageHandler): > > @@ -371,7 +435,6 @@ class HVMImageHandler(ImageHandler): > > def destroy(self): > self.unregister_shutdown_watch(); > - import signal Why? > if not self.pid: > return > os.kill(self.pid, signal.SIGKILL) > diff -r a2a8f1ed16ea -r 2b360c6b44fa tools/python/xen/xm/create.py > --- a/tools/python/xen/xm/create.py Sat Sep 02 15:22:19 2006 -0400 > +++ b/tools/python/xen/xm/create.py Sat Sep 02 15:23:32 2006 -0400 > @@ -483,6 +483,8 @@ def configure_image(vals): > > if vals.builder == 'hvm': > configure_hvm(config_image, vals) > + > + configure_graphics(config_image, vals) > > return config_image > > @@ -630,14 +632,21 @@ def configure_vifs(config_devs, vals): > map(f, d.keys()) > config_devs.append(['device', config_vif]) > > +def configure_graphics(config_image, vals): > + """Create the config for graphic consoles. > + """ > + args = [ 'vnc', 'vncdisplay', 'vncconsole', 'vncunused', > + 'sdl', 'display', 'xauthority' ] > + for a in args: > + if (vals.__dict__[a]): > + config_image.append([a, vals.__dict__[a]]) This looks very wrong. What is it trying to do? Why do these parameters need to be handled differently from the ones in configure_image? > > def configure_hvm(config_image, vals): > """Create the config for HVM devices. > """ > args = [ 'device_model', 'pae', 'vcpus', 'boot', 'fda', 'fdb', > 'localtime', 'serial', 'stdvga', 'isa', 'nographic', 'soundhw', > - 'vnc', 'vncdisplay', 'vncunused', 'vncconsole', 'sdl', > 'display', > - 'acpi', 'apic', 'xauthority', 'usb', 'usbdevice' ] > + 'acpi', 'apic', 'usb', 'usbdevice' ] > for a in args: > if (vals.__dict__[a]): > config_image.append([a, vals.__dict__[a]]) Steven. Attachment:
signature.asc _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |