WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] Paravirt framebuffer support in xend [3/5]

To: Jeremy Katz <katzj@xxxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] Paravirt framebuffer support in xend [3/5]
From: Steven Smith <sos22-xen@xxxxxxxxxxxxx>
Date: Mon, 4 Sep 2006 10:02:09 +0100
Cc: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>, Markus Armbruster <armbru@xxxxxxxxxx>, sos22@xxxxxxxxxxxxx
Delivery-date: Mon, 04 Sep 2006 02:04:42 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <1157227117.11059.43.camel@xxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <1157227117.11059.43.camel@xxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
> 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
Description: Digital signature

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel