[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [Xen-users] XEN/arm XENFB support



On Tue, 17 Dec 2013, peter wrote:
> Thank you for the info/patch Ian.
> With some modifications to Qemu, I managed to cross compile
> qemu-system-arm with XEN support.
> Based on version: 1c514a7734b7f98625a0d18d5e8ee7581f26e50c (Merge remote
> branch 'perard/cpu-hotplug-port-v2' into xen-staging-master-7).
> And got my Qemu backend working.

Nice! Could you please post your patch?


> I can see that INPUT_XEN_KBDDEV_FRONTEND is working
> (d9) 6input: Xen Virtual Keyboard as /devices/virtual/input/input0
> (d9) 6input: Xen Virtual Pointer as /devices/virtual/input/input1
> 
> And that XEN bus is prompting for VFB
> (d9) 6xenbus_probe_frontend: Device with no driver: device/vfb/0
> 
> But it seems that the xen-fbfront only supports PV and not PVH. (Linux
> kernel 3.12-RC5)
> Because the init code is returning on:
> 
>       if (!xen_pv_domain())
>               return -ENODEV;
> 
> When I comment this code out.

Yeah, it should be turned into:

if (!xen_domain())
    return -ENODEV;


> I do get these errors:
> 
> [ 1698.899496] Failed to unmap pfn:5c081 rc:-2

These ones should be unrelated and not fatal, and Julien is working to
fix the underlying issue.


> (XEN) dom10 IPA 0x0000000000000000
> (XEN) P2M @ 021b8300 mfn:0x4dc18
> (XEN) 1ST[0x0] = 0x000000004da276ff
> (XEN) 2ND[0x0] = 0x000000006b6856ff
> (XEN) 3RD[0x0] = 0x0000000000000000
> [ 1698.933034] Failed to map pfn to mfn rc:0:-22 pfn:5c349 mfn:0
> 
> (XEN) dom10 IPA 0x000000002777c000
> (XEN) P2M @ 021b8300 mfn:0x4dc18
> (XEN) 1ST[0x0] = 0x000000004da276ff
> (XEN) 2ND[0x13b] = 0x0000000000000000
> [ 1698.951353] Failed to map pfn to mfn rc:0:-22 pfn:5c348 mfn:b6b2777c
> 
> Yes lots of them, and my VFB is not working tough.

I suspect these are the actual symptoms of the problem.
Looking around the frontend and the backend I couldn't find the issue.
If you post your patch I might give it a try.


 
> So I've searched on the internet if someone got VFB on PVH working.
> But I couldn't find anything about, so is there someone who got VFB
> working on PVH (x86) ?
> 
> 
> -----Original Message-----
> From: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
> To: peter <peter@xxxxxxxxxx>
> Cc: "xen-users@xxxxxxxxxxxxx" <xen-users@xxxxxxxxxxxxx>,
> "xen-devel@xxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxx>, Lars Kurth
> <lars.kurth.xen@xxxxxxxxx>
> Date: Mon, 16 Dec 2013 09:59:09 +0000
> Subject: Re: [Xen-devel] [Xen-users] XEN/arm XENFB support
> 
> > On Mon, 2013-12-16 at 08:45 +0000, Lars Kurth wrote:
> > 
> > > On Mon, Dec 16, 2013 at 8:16 AM, peter <peter@xxxxxxxxxx> wrote:
> > >         I'm currently playing with XEN/arm on my Allwinner A20
> > (cubieboard2)
> > >         I would like to get the XENFB driver working on domU.
> > >         But currently in xen/arm there's no support for VFB, atleast
> > qemu is not
> > >         supported.
> > >         But this video http://www.youtube.com/watch?v=po1IeElg8tg and
> > this one
> > >         http://www.youtube.com/watch?v=Km6gBnIqaWo is showing a
> > working framebuffer.
> > >         So there are people which got a framebuffer working on domU.
> > >         But still i couldn't find anything on the internet how to do
> > this.
> > >         Is there anyone with experience with VFB on xen/arm ?
> > 
> > I'm not sure what the first link used but the second was using a form
> > of
> > hybrid GPU passthrough/paravirtualisation for which the code has not
> > been reeleased and AFAIK has nothing to do with VFB.
> > 
> > I've not tried VFB on ARM yet (busy with other things) but I suspect
> > that if you were to build upstream qemu on ARM with Xen support enabled
> > then it would just work. I would recommend giving that a go -- please
> > let us know how you get on.
> > 
> > Below is a patch which I wrote ages ago that I have just rebased onto
> > current xen staging *without retesting*. It is supposed to DTWT and
> > enable the qemu build for ARM (as well as providing a mechanism to
> > start
> > the correct dom0 qemu, which you don't need for vfb).
> > 
> > As I say I haven't tested, or even built, and in particular I never
> > tried PVFB with it even what I wrote it, so YMMV.
> > 
> > Ian.
> > 
> > 
> > commit 7b5d54c9a5d09c4138bec905c9accea34173ba77
> > Author: Ian Campbell <ian.campbell@xxxxxxxxxx>
> > Date:   Wed May 15 16:34:55 2013 +0100
> > 
> >     tools: build and launch correct qemu for architecture
> >     
> >     xl now provides a launch-dom0-qemu command which avoids the need to
> > have the
> >     initscripts be aware of the specific qermu binary name, which
> > differs by
> >     architecture and which also may have been specified by the user via
> > the
> >     --with-system-qemu=PATH option to configure.
> >     
> >     Perhaps this should be a separate binary hidden in libexec?
> >     
> >     Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> > 
> > diff --git a/config/arm32.mk b/config/arm32.mk
> > index aa79d22..f3599a3 100644
> > --- a/config/arm32.mk
> > +++ b/config/arm32.mk
> > @@ -3,6 +3,8 @@ CONFIG_ARM_32 := y
> >  CONFIG_ARM_$(XEN_OS) := y
> >  
> >  CONFIG_XEN_INSTALL_SUFFIX :=
> > +CONFIG_QEMU_ARCH := arm
> > +CONFIG_QEMU_TARGET := arm-softmmu
> >  
> >  # -march= -mcpu=
> >  
> > diff --git a/config/arm64.mk b/config/arm64.mk
> > index 15b57a4..4ff15e0 100644
> > --- a/config/arm64.mk
> > +++ b/config/arm64.mk
> > @@ -3,6 +3,8 @@ CONFIG_ARM_64 := y
> >  CONFIG_ARM_$(XEN_OS) := y
> >  
> >  CONFIG_XEN_INSTALL_SUFFIX :=
> > +CONFIG_QEMU_ARCH := aarch64
> > +CONFIG_QEMU_TARGET := arm-softmmu
> >  
> >  CFLAGS += #-marm -march= -mcpu= etc
> >  
> > diff --git a/config/x86_32.mk b/config/x86_32.mk
> > index 7f76b25..da3111d 100644
> > --- a/config/x86_32.mk
> > +++ b/config/x86_32.mk
> > @@ -2,6 +2,9 @@ CONFIG_X86 := y
> >  CONFIG_X86_32 := y
> >  CONFIG_X86_$(XEN_OS) := y
> >  
> > +CONFIG_QEMU_ARCH := i386
> > +CONFIG_QEMU_TARGET := i386-softmmu
> > +
> >  CONFIG_HVM := y
> >  CONFIG_MIGRATE := y
> >  CONFIG_XCUTILS := y
> > diff --git a/config/x86_64.mk b/config/x86_64.mk
> > index 11104bd..f59e36d 100644
> > --- a/config/x86_64.mk
> > +++ b/config/x86_64.mk
> > @@ -2,6 +2,9 @@ CONFIG_X86 := y
> >  CONFIG_X86_64 := y
> >  CONFIG_X86_$(XEN_OS) := y
> >  
> > +CONFIG_QEMU_ARCH := x86_64
> > +CONFIG_QEMU_ARCH := i386-softmmu
> > +
> >  CONFIG_COMPAT := y
> >  CONFIG_HVM := y
> >  CONFIG_MIGRATE := y
> > diff --git a/tools/Makefile b/tools/Makefile
> > index 00c69ee..250b931 100644
> > --- a/tools/Makefile
> > +++ b/tools/Makefile
> > @@ -107,7 +107,7 @@ distclean: subdirs-distclean
> >             config.cache autom4te.cache
> >  
> >  ifneq ($(XEN_COMPILE_ARCH),$(XEN_TARGET_ARCH))
> > -IOEMU_CONFIGURE_CROSS ?= --cpu=$(XEN_TARGET_ARCH) \
> > +IOEMU_CONFIGURE_CROSS ?= --cpu=$(CONFIG_QEMU_ARCH) \
> >                      --cross-prefix=$(CROSS_COMPILE) \
> >                      --interp-prefix=$(CROSS_SYS_ROOT)
> >  endif
> > @@ -186,8 +186,7 @@ subdir-all-qemu-xen-dir: qemu-xen-dir-find
> >             source=.; \
> >     fi; \
> >     cd qemu-xen-dir; \
> > -   $$source/configure --enable-xen --target-list=i386-softmmu \
> > -           $(QEMU_XEN_ENABLE_DEBUG) \
> > +   $$source/configure --enable-xen --target-list=$(CONFIG_QEMU_TARGET) \
> >             --prefix=$(PREFIX) \
> >             --source-path=$$source \
> >             --extra-cflags="-I$(XEN_ROOT)/tools/include \
> > diff --git a/tools/hotplug/Linux/init.d/xencommons
> > b/tools/hotplug/Linux/init.d/xencommons
> > index 4ebd636..f568085 100644
> > --- a/tools/hotplug/Linux/init.d/xencommons
> > +++ b/tools/hotplug/Linux/init.d/xencommons
> > @@ -116,11 +116,7 @@ do_start () {
> >     echo Starting xenconsoled...
> >     test -z "$XENCONSOLED_TRACE" || XENCONSOLED_ARGS="
> > --log=$XENCONSOLED_TRACE"
> >     ${SBINDIR}/xenconsoled --pid-file=$XENCONSOLED_PIDFILE
> > $XENCONSOLED_ARGS
> > -   echo Starting QEMU as disk backend for dom0
> > -   test -z "$QEMU_XEN" && QEMU_XEN="${LIBEXEC}/qemu-system-i386"
> > -   $QEMU_XEN -xen-domid 0 -xen-attach -name dom0 -nographic -M xenpv
> > -daemonize \
> > -           -monitor /dev/null -serial /dev/null -parallel /dev/null \
> > -           -pidfile $QEMU_PIDFILE
> > +   xl launch-dom0-qemu $QEMU_XEN
> >  }
> >  do_stop () {
> >          echo Stopping xenconsoled
> > diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile
> > index d8495bb..d8b6a5c 100644
> > --- a/tools/libxl/Makefile
> > +++ b/tools/libxl/Makefile
> > @@ -27,6 +27,7 @@ CFLAGS_LIBXL += $(CFLAGS_libxenguest)
> >  CFLAGS_LIBXL += $(CFLAGS_libxenstore)
> >  CFLAGS_LIBXL += $(CFLAGS_libblktapctl) 
> >  CFLAGS_LIBXL += -Wshadow
> > +CFLAGS_LIBXL += -DCONFIG_QEMU_ARCH=\"$(CONFIG_QEMU_ARCH)\"
> >  
> >  LIBXL_LIBS-$(CONFIG_ARM) += -lfdt
> >  
> > diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> > index 12d6c31..0287a35 100644
> > --- a/tools/libxl/libxl.h
> > +++ b/tools/libxl/libxl.h
> > @@ -605,6 +605,9 @@ int libxl_ctx_alloc(libxl_ctx **pctx, int version,
> >                      xentoollog_logger *lg);
> >  int libxl_ctx_free(libxl_ctx *ctx /* 0 is OK */);
> >  
> > +/* exec's device model for dom0 and does not return. */
> > +void libxl_launch_dom0_qemu(libxl_ctx *ctx, const char *qemu_path,
> > const char *pidfile);
> > +
> >  /* domain related functions */
> >  
> >  int libxl_domain_create_new(libxl_ctx *ctx, libxl_domain_config
> > *d_config,
> > diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
> > index f6f7bbd..f0b13a9 100644
> > --- a/tools/libxl/libxl_dm.c
> > +++ b/tools/libxl/libxl_dm.c
> > @@ -38,7 +38,7 @@ static const char *qemu_xen_path(libxl__gc *gc)
> >  #ifdef QEMU_XEN_PATH
> >      return QEMU_XEN_PATH;
> >  #else
> > -    return libxl__abs_path(gc, "qemu-system-i386",
> > libxl__libexec_path());
> > +    return libxl__abs_path(gc, "qemu-system-" CONFIG_QEMU_ARCH,
> > libxl__libexec_path());
> >  #endif
> >  }
> >  
> > @@ -1560,6 +1560,37 @@ out:
> >      return ret;
> >  }
> >  
> > +void libxl_launch_dom0_qemu(libxl_ctx *ctx, const char *qemu_path,
> > const char *pidfile)
> > +{
> > +    GC_INIT(ctx);
> > +
> > +    flexarray_t *dm_args = flexarray_make(gc, 16, 1);
> > +
> > +    if (qemu_path == NULL)
> > +        qemu_path = qemu_xen_path(gc);
> > +
> > +    flexarray_vappend(dm_args,
> > +                      "-xen-domid", "0",
> > +                      "-xen-attach",
> > +                      "-name", "dom0",
> > +                      "-nographic",
> > +                      "-M" "xenpv",
> > +                      "-daemonize",
> > +                      "-monitor", "/dev/null",
> > +                      "-serial", "/dev/null",
> > +                      "-parallel", "/dev/null",
> > +                      NULL);
> > +    if (pidfile)
> > +        flexarray_append_pair(dm_args, "-pidfile", libxl__strdup(gc,
> > pidfile));
> > +
> > +    libxl__exec(gc, -1, -1, -1,
> > +                qemu_path, (char **)flexarray_contents(dm_args),
> > NULL);
> > +
> > +    /* Shouldn't return */
> > +    LOG(CRITICAL, "Failed to exec dom0 device model");
> > +    GC_FREE;
> > +}
> > +
> >  /*
> >   * Local variables:
> >   * mode: C
> > diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h
> > index c876a33..1d7602c 100644
> > --- a/tools/libxl/xl.h
> > +++ b/tools/libxl/xl.h
> > @@ -106,6 +106,7 @@ int main_setenforce(int argc, char **argv);
> >  int main_loadpolicy(int argc, char **argv);
> >  int main_remus(int argc, char **argv);
> >  int main_devd(int argc, char **argv);
> > +int main_launch_dom0_qemu(int argc, char **argv);
> >  
> >  void help(const char *command);
> >  
> > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> > index bd26bcc..108dfac 100644
> > --- a/tools/libxl/xl_cmdimpl.c
> > +++ b/tools/libxl/xl_cmdimpl.c
> > @@ -7313,6 +7313,31 @@ out:
> >      return ret;
> >  }
> >  
> > +int main_launch_dom0_qemu(int argc, char **argv)
> > +{
> > +    int opt;
> > +    const char *qemu = NULL;
> > +    const char *pidfile = NULL;
> > +
> > +    SWITCH_FOREACH_OPT(opt, "p:", NULL, "launch-dom-qemu", 0) {
> > +    case 'p':
> > +        pidfile = optarg;
> > +        break;
> > +        /* No options */
> > +    }
> > +    if (optind < argc)
> > +        qemu = argv[optind];
> > +
> > +    fprintf(stderr, "argc %d\n", argc);
> > +    fprintf(stderr, "qemu = %s", qemu ? : "<default>");
> > +
> > +    fprintf(stdout, "Starting QEMU as disk backend for dom0");
> > +
> > +    libxl_launch_dom0_qemu(ctx, qemu, pidfile);
> > +
> > +    return 0;
> > +}
> > +
> >  /*
> >   * Local variables:
> >   * mode: C
> > diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c
> > index ebe0220..ab4d56c 100644
> > --- a/tools/libxl/xl_cmdtable.c
> > +++ b/tools/libxl/xl_cmdtable.c
> > @@ -494,6 +494,12 @@ struct cmd_spec cmd_table[] = {
> >        "[options]",
> >        "-F                      Run in the foreground",
> >      },
> > +    { "launch-dom0-qemu",
> > +      &main_launch_dom0_qemu, 0, 1,
> > +      "Start qemu process to service dom0 disk backends",
> > +      "[options] [QEMU_PATH]",
> > +      "-p PIDFILE              Write a PIDFILE\n",
> > +    },
> >  };
> >  
> >  int cmdtable_len = sizeof(cmd_table)/sizeof(struct cmd_spec);
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.