diff mbox

[Xen-devel] enable QEMU for ARM builds

Message ID alpine.DEB.2.02.1407091947340.29039@kaball.uk.xensource.com
State Superseded
Headers show

Commit Message

Stefano Stabellini July 10, 2014, 11:18 a.m. UTC
Build qemu-xen on ARM and ARM64: it is used to provide the PV backends,
disk and framebuffer in particular.

Ideally we would also modify the configure options to only build what is
necessary: a machine just for PV backends. However that is a work in
progress and not yet available in QEMU (see
http://marc.info/?l=qemu-devel&m=139082425718379&w=2). So we just build
the usual i386 target, even though no i386 emulation is going to be done
by qemu-xen on ARM.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

Comments

Ian Campbell July 10, 2014, 1:50 p.m. UTC | #1
On Thu, 2014-07-10 at 12:18 +0100, Stefano Stabellini wrote:
> Build qemu-xen on ARM and ARM64: it is used to provide the PV backends,
> disk and framebuffer in particular.
> 
> Ideally we would also modify the configure options to only build what is
> necessary: a machine just for PV backends. However that is a work in
> progress and not yet available in QEMU (see
> http://marc.info/?l=qemu-devel&m=139082425718379&w=2). So we just build
> the usual i386 target, even though no i386 emulation is going to be done
> by qemu-xen on ARM.

As I mentioned IRL we need to confirm that this doesn't end up exposing
a protocol property in the xenstore backend dir of
XEN_IO_PROTO_ABI_X86_* instead of XEN_IO_PROTO_ABI_ARM.

Likewise we need to be sure that the code actually implements the ARM
protocol, not one of the x86 ones.

Ian.
> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> 
> diff --git a/tools/configure b/tools/configure
> index 20f1aa9..b39012b 100755
> --- a/tools/configure
> +++ b/tools/configure
> @@ -3869,6 +3869,8 @@ else
>      case "$host_cpu" in
>          i[3456]86|x86_64)
>             qemu_xen=y;;
> +        arm*|aarch64)
> +           qemu_xen=y;;
>          *) qemu_xen=n;;
>      esac
>  
> diff --git a/tools/configure.ac b/tools/configure.ac
> index 6d70f04..d1c8e5e 100644
> --- a/tools/configure.ac
> +++ b/tools/configure.ac
> @@ -126,6 +126,8 @@ AC_ARG_WITH([system-qemu],
>      case "$host_cpu" in
>          i[[3456]]86|x86_64)
>             qemu_xen=y;;
> +        arm*|aarch64)
> +           qemu_xen=y;;
>          *) qemu_xen=n;;
>      esac
>  ])
>
Stefano Stabellini July 10, 2014, 2:04 p.m. UTC | #2
On Thu, 10 Jul 2014, Ian Campbell wrote:
> On Thu, 2014-07-10 at 12:18 +0100, Stefano Stabellini wrote:
> > Build qemu-xen on ARM and ARM64: it is used to provide the PV backends,
> > disk and framebuffer in particular.
> > 
> > Ideally we would also modify the configure options to only build what is
> > necessary: a machine just for PV backends. However that is a work in
> > progress and not yet available in QEMU (see
> > http://marc.info/?l=qemu-devel&m=139082425718379&w=2). So we just build
> > the usual i386 target, even though no i386 emulation is going to be done
> > by qemu-xen on ARM.
> 
> As I mentioned IRL we need to confirm that this doesn't end up exposing
> a protocol property in the xenstore backend dir of
> XEN_IO_PROTO_ABI_X86_* instead of XEN_IO_PROTO_ABI_ARM.

QEMU doesn't write the protocol to xenstore. In fact the protocol is
written to xenstore by the frontend so this shouldn't be a problem. 


> Likewise we need to be sure that the code actually implements the ARM
> protocol, not one of the x86 ones.

Sure. No matter the QEMU target architecture,  qdisk and xenfb implement
NATIVE as well as x86 protocols.



> Ian.
> > 
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > 
> > diff --git a/tools/configure b/tools/configure
> > index 20f1aa9..b39012b 100755
> > --- a/tools/configure
> > +++ b/tools/configure
> > @@ -3869,6 +3869,8 @@ else
> >      case "$host_cpu" in
> >          i[3456]86|x86_64)
> >             qemu_xen=y;;
> > +        arm*|aarch64)
> > +           qemu_xen=y;;
> >          *) qemu_xen=n;;
> >      esac
> >  
> > diff --git a/tools/configure.ac b/tools/configure.ac
> > index 6d70f04..d1c8e5e 100644
> > --- a/tools/configure.ac
> > +++ b/tools/configure.ac
> > @@ -126,6 +126,8 @@ AC_ARG_WITH([system-qemu],
> >      case "$host_cpu" in
> >          i[[3456]]86|x86_64)
> >             qemu_xen=y;;
> > +        arm*|aarch64)
> > +           qemu_xen=y;;
> >          *) qemu_xen=n;;
> >      esac
> >  ])
> > 
> 
>
Ian Campbell July 10, 2014, 2:33 p.m. UTC | #3
On Thu, 2014-07-10 at 15:04 +0100, Stefano Stabellini wrote:
> On Thu, 10 Jul 2014, Ian Campbell wrote:
> > On Thu, 2014-07-10 at 12:18 +0100, Stefano Stabellini wrote:
> > > Build qemu-xen on ARM and ARM64: it is used to provide the PV backends,
> > > disk and framebuffer in particular.
> > > 
> > > Ideally we would also modify the configure options to only build what is
> > > necessary: a machine just for PV backends. However that is a work in
> > > progress and not yet available in QEMU (see
> > > http://marc.info/?l=qemu-devel&m=139082425718379&w=2). So we just build
> > > the usual i386 target, even though no i386 emulation is going to be done
> > > by qemu-xen on ARM.
> > 
> > As I mentioned IRL we need to confirm that this doesn't end up exposing
> > a protocol property in the xenstore backend dir of
> > XEN_IO_PROTO_ABI_X86_* instead of XEN_IO_PROTO_ABI_ARM.
> 
> QEMU doesn't write the protocol to xenstore. In fact the protocol is
> written to xenstore by the frontend so this shouldn't be a problem. 

Oh good, I was misremembering which way round it was.

> > Likewise we need to be sure that the code actually implements the ARM
> > protocol, not one of the x86 ones.
> 
> Sure. No matter the QEMU target architecture,  qdisk and xenfb implement
> NATIVE as well as x86 protocols.

When built as an ARM binary with x86 as the target architecture what
does it consider to be the NATIVE protocol?

You didn't mention the ARM protocol, hopefully just an oversight?

Ian
Stefan Bader July 10, 2014, 2:59 p.m. UTC | #4
On 10.07.2014 13:18, Stefano Stabellini wrote:
> Build qemu-xen on ARM and ARM64: it is used to provide the PV backends,
> disk and framebuffer in particular.

In the Ubuntu packaging I moved to not build qemu from Xen to just depend on the 
qemu package (which should be the same) at least for x86.
Since I have no Arm hw on my own, all the arm builds are more of a theoretical 
exercise (no feedback from anyone actually trying).
This sounds like I should (again) depend on a qemu-system-x86, even for the Arm 
packages. Is that right?

-Stefan
>
> Ideally we would also modify the configure options to only build what is
> necessary: a machine just for PV backends. However that is a work in
> progress and not yet available in QEMU (see
> http://marc.info/?l=qemu-devel&m=139082425718379&w=2). So we just build
> the usual i386 target, even though no i386 emulation is going to be done
> by qemu-xen on ARM.
>
> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
>
> diff --git a/tools/configure b/tools/configure
> index 20f1aa9..b39012b 100755
> --- a/tools/configure
> +++ b/tools/configure
> @@ -3869,6 +3869,8 @@ else
>       case "$host_cpu" in
>           i[3456]86|x86_64)
>              qemu_xen=y;;
> +        arm*|aarch64)
> +           qemu_xen=y;;
>           *) qemu_xen=n;;
>       esac
>
> diff --git a/tools/configure.ac b/tools/configure.ac
> index 6d70f04..d1c8e5e 100644
> --- a/tools/configure.ac
> +++ b/tools/configure.ac
> @@ -126,6 +126,8 @@ AC_ARG_WITH([system-qemu],
>       case "$host_cpu" in
>           i[[3456]]86|x86_64)
>              qemu_xen=y;;
> +        arm*|aarch64)
> +           qemu_xen=y;;
>           *) qemu_xen=n;;
>       esac
>   ])
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
>
Stefano Stabellini July 10, 2014, 4:20 p.m. UTC | #5
On Thu, 10 Jul 2014, Stefan Bader wrote:
> On 10.07.2014 13:18, Stefano Stabellini wrote:
> > Build qemu-xen on ARM and ARM64: it is used to provide the PV backends,
> > disk and framebuffer in particular.
> 
> In the Ubuntu packaging I moved to not build qemu from Xen to just depend on
> the qemu package (which should be the same) at least for x86.
> Since I have no Arm hw on my own, all the arm builds are more of a theoretical
> exercise (no feedback from anyone actually trying).
> This sounds like I should (again) depend on a qemu-system-x86, even for the
> Arm packages. Is that right?

Right.

If you have Xen installed on an ARM box and you build QEMU with
--target-list=i386-softmmu, it should pick up Xen support automatically.



> -Stefan
> > 
> > Ideally we would also modify the configure options to only build what is
> > necessary: a machine just for PV backends. However that is a work in
> > progress and not yet available in QEMU (see
> > http://marc.info/?l=qemu-devel&m=139082425718379&w=2). So we just build
> > the usual i386 target, even though no i386 emulation is going to be done
> > by qemu-xen on ARM.
> > 
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > 
> > diff --git a/tools/configure b/tools/configure
> > index 20f1aa9..b39012b 100755
> > --- a/tools/configure
> > +++ b/tools/configure
> > @@ -3869,6 +3869,8 @@ else
> >       case "$host_cpu" in
> >           i[3456]86|x86_64)
> >              qemu_xen=y;;
> > +        arm*|aarch64)
> > +           qemu_xen=y;;
> >           *) qemu_xen=n;;
> >       esac
> > 
> > diff --git a/tools/configure.ac b/tools/configure.ac
> > index 6d70f04..d1c8e5e 100644
> > --- a/tools/configure.ac
> > +++ b/tools/configure.ac
> > @@ -126,6 +126,8 @@ AC_ARG_WITH([system-qemu],
> >       case "$host_cpu" in
> >           i[[3456]]86|x86_64)
> >              qemu_xen=y;;
> > +        arm*|aarch64)
> > +           qemu_xen=y;;
> >           *) qemu_xen=n;;
> >       esac
> >   ])
> > 
> > 
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xen.org
> > http://lists.xen.org/xen-devel
> > 
>
Stefano Stabellini July 10, 2014, 4:26 p.m. UTC | #6
On Thu, 10 Jul 2014, Ian Campbell wrote:
> On Thu, 2014-07-10 at 15:04 +0100, Stefano Stabellini wrote:
> > On Thu, 10 Jul 2014, Ian Campbell wrote:
> > > On Thu, 2014-07-10 at 12:18 +0100, Stefano Stabellini wrote:
> > > > Build qemu-xen on ARM and ARM64: it is used to provide the PV backends,
> > > > disk and framebuffer in particular.
> > > > 
> > > > Ideally we would also modify the configure options to only build what is
> > > > necessary: a machine just for PV backends. However that is a work in
> > > > progress and not yet available in QEMU (see
> > > > http://marc.info/?l=qemu-devel&m=139082425718379&w=2). So we just build
> > > > the usual i386 target, even though no i386 emulation is going to be done
> > > > by qemu-xen on ARM.
> > > 
> > > As I mentioned IRL we need to confirm that this doesn't end up exposing
> > > a protocol property in the xenstore backend dir of
> > > XEN_IO_PROTO_ABI_X86_* instead of XEN_IO_PROTO_ABI_ARM.
> > 
> > QEMU doesn't write the protocol to xenstore. In fact the protocol is
> > written to xenstore by the frontend so this shouldn't be a problem. 
> 
> Oh good, I was misremembering which way round it was.
> 
> > > Likewise we need to be sure that the code actually implements the ARM
> > > protocol, not one of the x86 ones.
> > 
> > Sure. No matter the QEMU target architecture,  qdisk and xenfb implement
> > NATIVE as well as x86 protocols.
> 
> When built as an ARM binary with x86 as the target architecture what
> does it consider to be the NATIVE protocol?

ARM

 
> You didn't mention the ARM protocol, hopefully just an oversight?

NATIVE is defined as ARM when building on arm:

xen/include/public/io/protocols.h

and because aarch64 and arm use the same protocol qemu don't need to
special case them.
Ian Campbell July 16, 2014, 2:24 p.m. UTC | #7
On Thu, 2014-07-10 at 17:26 +0100, Stefano Stabellini wrote:
> On Thu, 10 Jul 2014, Ian Campbell wrote:
> > On Thu, 2014-07-10 at 15:04 +0100, Stefano Stabellini wrote:
> > > On Thu, 10 Jul 2014, Ian Campbell wrote:
> > > > On Thu, 2014-07-10 at 12:18 +0100, Stefano Stabellini wrote:
> > > > > Build qemu-xen on ARM and ARM64: it is used to provide the PV backends,
> > > > > disk and framebuffer in particular.
> > > > > 
> > > > > Ideally we would also modify the configure options to only build what is
> > > > > necessary: a machine just for PV backends. However that is a work in
> > > > > progress and not yet available in QEMU (see
> > > > > http://marc.info/?l=qemu-devel&m=139082425718379&w=2). So we just build
> > > > > the usual i386 target, even though no i386 emulation is going to be done
> > > > > by qemu-xen on ARM.
> > > > 
> > > > As I mentioned IRL we need to confirm that this doesn't end up exposing
> > > > a protocol property in the xenstore backend dir of
> > > > XEN_IO_PROTO_ABI_X86_* instead of XEN_IO_PROTO_ABI_ARM.
> > > 
> > > QEMU doesn't write the protocol to xenstore. In fact the protocol is
> > > written to xenstore by the frontend so this shouldn't be a problem. 
> > 
> > Oh good, I was misremembering which way round it was.
> > 
> > > > Likewise we need to be sure that the code actually implements the ARM
> > > > protocol, not one of the x86 ones.
> > > 
> > > Sure. No matter the QEMU target architecture,  qdisk and xenfb implement
> > > NATIVE as well as x86 protocols.
> > 
> > When built as an ARM binary with x86 as the target architecture what
> > does it consider to be the NATIVE protocol?
> 
> ARM
> 
>  
> > You didn't mention the ARM protocol, hopefully just an oversight?
> 
> NATIVE is defined as ARM when building on arm:
> 
> xen/include/public/io/protocols.h
> 
> and because aarch64 and arm use the same protocol qemu don't need to
> special case them.

Arguably that's a bug in Qemu when building for target!=arm, but I
suppose it works in our favour right now, but bear it in mind for when
you review the patch to "fix" this bug ;-)

Acked-by: Ian Campbell <ian.campbell@citrix.com>

I think application of this patch is dependent on the headers movement
one, right?

Ian.
Stefano Stabellini July 18, 2014, 5:42 p.m. UTC | #8
On Wed, 16 Jul 2014, Ian Campbell wrote:
> On Thu, 2014-07-10 at 17:26 +0100, Stefano Stabellini wrote:
> > On Thu, 10 Jul 2014, Ian Campbell wrote:
> > > On Thu, 2014-07-10 at 15:04 +0100, Stefano Stabellini wrote:
> > > > On Thu, 10 Jul 2014, Ian Campbell wrote:
> > > > > On Thu, 2014-07-10 at 12:18 +0100, Stefano Stabellini wrote:
> > > > > > Build qemu-xen on ARM and ARM64: it is used to provide the PV backends,
> > > > > > disk and framebuffer in particular.
> > > > > > 
> > > > > > Ideally we would also modify the configure options to only build what is
> > > > > > necessary: a machine just for PV backends. However that is a work in
> > > > > > progress and not yet available in QEMU (see
> > > > > > http://marc.info/?l=qemu-devel&m=139082425718379&w=2). So we just build
> > > > > > the usual i386 target, even though no i386 emulation is going to be done
> > > > > > by qemu-xen on ARM.
> > > > > 
> > > > > As I mentioned IRL we need to confirm that this doesn't end up exposing
> > > > > a protocol property in the xenstore backend dir of
> > > > > XEN_IO_PROTO_ABI_X86_* instead of XEN_IO_PROTO_ABI_ARM.
> > > > 
> > > > QEMU doesn't write the protocol to xenstore. In fact the protocol is
> > > > written to xenstore by the frontend so this shouldn't be a problem. 
> > > 
> > > Oh good, I was misremembering which way round it was.
> > > 
> > > > > Likewise we need to be sure that the code actually implements the ARM
> > > > > protocol, not one of the x86 ones.
> > > > 
> > > > Sure. No matter the QEMU target architecture,  qdisk and xenfb implement
> > > > NATIVE as well as x86 protocols.
> > > 
> > > When built as an ARM binary with x86 as the target architecture what
> > > does it consider to be the NATIVE protocol?
> > 
> > ARM
> > 
> >  
> > > You didn't mention the ARM protocol, hopefully just an oversight?
> > 
> > NATIVE is defined as ARM when building on arm:
> > 
> > xen/include/public/io/protocols.h
> > 
> > and because aarch64 and arm use the same protocol qemu don't need to
> > special case them.
> 
> Arguably that's a bug in Qemu when building for target!=arm, but I
> suppose it works in our favour right now, but bear it in mind for when
> you review the patch to "fix" this bug ;-)
> 
> Acked-by: Ian Campbell <ian.campbell@citrix.com>
> 
> I think application of this patch is dependent on the headers movement
> one, right?

Yep. Once the following series is applied, it can go in:

<alpine.DEB.2.02.1407181831070.2295@kaball.uk.xensource.com>
diff mbox

Patch

diff --git a/tools/configure b/tools/configure
index 20f1aa9..b39012b 100755
--- a/tools/configure
+++ b/tools/configure
@@ -3869,6 +3869,8 @@  else
     case "$host_cpu" in
         i[3456]86|x86_64)
            qemu_xen=y;;
+        arm*|aarch64)
+           qemu_xen=y;;
         *) qemu_xen=n;;
     esac
 
diff --git a/tools/configure.ac b/tools/configure.ac
index 6d70f04..d1c8e5e 100644
--- a/tools/configure.ac
+++ b/tools/configure.ac
@@ -126,6 +126,8 @@  AC_ARG_WITH([system-qemu],
     case "$host_cpu" in
         i[[3456]]86|x86_64)
            qemu_xen=y;;
+        arm*|aarch64)
+           qemu_xen=y;;
         *) qemu_xen=n;;
     esac
 ])