diff mbox

[v2,1/9] configure: change CONFIG_XEN_BACKEND to be a target property

Message ID 1489449360-14411-1-git-send-email-sstabellini@kernel.org (mailing list archive)
State New, archived
Headers show

Commit Message

Stefano Stabellini March 13, 2017, 11:55 p.m. UTC
CONFIG_XEN_BACKEND is currently set when the host supports Xen,
regardless of the chosen targets. As a consequence, Xen backends can be
enabled even on targets that don't support Xen.

Fix the issue by setting CONFIG_XEN_BACKEND only for targets that
support Xen.

Signed-off-by: Stefano Stabellini <stefano@aporeto.com>
CC: groug@kaod.org
CC: groug@kaod.org
CC: pbonzini@redhat.com
CC: peter.maydell@linaro.org
CC: rth@twiddle.net
CC: stefanha@redhat.com
---
 configure | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Paolo Bonzini March 14, 2017, 10:02 a.m. UTC | #1
On 14/03/2017 00:55, Stefano Stabellini wrote:
> CONFIG_XEN_BACKEND is currently set when the host supports Xen,
> regardless of the chosen targets. As a consequence, Xen backends can be
> enabled even on targets that don't support Xen.
> 
> Fix the issue by setting CONFIG_XEN_BACKEND only for targets that
> support Xen.
> 
> Signed-off-by: Stefano Stabellini <stefano@aporeto.com>
> CC: groug@kaod.org
> CC: groug@kaod.org
> CC: pbonzini@redhat.com
> CC: peter.maydell@linaro.org
> CC: rth@twiddle.net
> CC: stefanha@redhat.com
> ---
>  configure | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/configure b/configure
> index 6c21975..6d8f752 100755
> --- a/configure
> +++ b/configure
> @@ -5442,7 +5442,6 @@ if test "$virglrenderer" = "yes" ; then
>    echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
>  fi
>  if test "$xen" = "yes" ; then
> -  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
>    echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
>    if test "$xen_pv_domain_build" = "yes" ; then
>      echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
> @@ -6028,6 +6027,7 @@ case "$target_name" in
>    i386|x86_64)
>      if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
>        echo "CONFIG_XEN=y" >> $config_target_mak
> +      echo "CONFIG_XEN_BACKEND=y" >> $config_target_mak
>        if test "$xen_pci_passthrough" = yes; then
>          echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
>        fi
> 

This messes up a bit the way xen_nic.o and friends are compiled, I
think, because they are common-obj-y but they are only found when
compiling in the target subdirectories.  So you end up building
x86_64-softmmu/../hw/net/xen_nic.o

If you're unlucky, I believe this can lead to a link failure where a
target is building xen_nic.o, while the other tries to link to a
partially written object file.

I think the files should be changed from
common-obj-$(CONFIG_XEN_BACKEND) to common-obj-$(CONFIG_XEN).  Then you
add to Makefile:

 CONFIG_SOFTMMU := $(if $(filter %-softmmu,$(TARGET_DIRS)),y)
 CONFIG_USER_ONLY := $(if $(filter %-user,$(TARGET_DIRS)),y)
+CONFIG_XEN := $(CONFIG_XEN_BACKEND)
 CONFIG_ALL=y
 -include config-all-devices.mak
 -include config-all-disas.mak

The Makefile change ensures that they are built before descending in the
target-specific directories.  The Makefile.objs change ensures that Xen
backends are not enabled on targets that support Xen.

Paolo
Stefano Stabellini March 14, 2017, 7:07 p.m. UTC | #2
On Tue, 14 Mar 2017, Paolo Bonzini wrote:
> On 14/03/2017 00:55, Stefano Stabellini wrote:
> > CONFIG_XEN_BACKEND is currently set when the host supports Xen,
> > regardless of the chosen targets. As a consequence, Xen backends can be
> > enabled even on targets that don't support Xen.
> > 
> > Fix the issue by setting CONFIG_XEN_BACKEND only for targets that
> > support Xen.
> > 
> > Signed-off-by: Stefano Stabellini <stefano@aporeto.com>
> > CC: groug@kaod.org
> > CC: groug@kaod.org
> > CC: pbonzini@redhat.com
> > CC: peter.maydell@linaro.org
> > CC: rth@twiddle.net
> > CC: stefanha@redhat.com
> > ---
> >  configure | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/configure b/configure
> > index 6c21975..6d8f752 100755
> > --- a/configure
> > +++ b/configure
> > @@ -5442,7 +5442,6 @@ if test "$virglrenderer" = "yes" ; then
> >    echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
> >  fi
> >  if test "$xen" = "yes" ; then
> > -  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
> >    echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
> >    if test "$xen_pv_domain_build" = "yes" ; then
> >      echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
> > @@ -6028,6 +6027,7 @@ case "$target_name" in
> >    i386|x86_64)
> >      if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
> >        echo "CONFIG_XEN=y" >> $config_target_mak
> > +      echo "CONFIG_XEN_BACKEND=y" >> $config_target_mak
> >        if test "$xen_pci_passthrough" = yes; then
> >          echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
> >        fi
> > 
> 
> This messes up a bit the way xen_nic.o and friends are compiled, I
> think, because they are common-obj-y but they are only found when
> compiling in the target subdirectories.  So you end up building
> x86_64-softmmu/../hw/net/xen_nic.o
> 
> If you're unlucky, I believe this can lead to a link failure where a
> target is building xen_nic.o, while the other tries to link to a
> partially written object file.
> 
> I think the files should be changed from
> common-obj-$(CONFIG_XEN_BACKEND) to common-obj-$(CONFIG_XEN).
>
> The Makefile.objs change ensures that Xen backends are not enabled on
> targets that support Xen.

Actually I thought about doing that instead of the configure change. It
makes sense to me.


> Then you add to Makefile:
> 
>  CONFIG_SOFTMMU := $(if $(filter %-softmmu,$(TARGET_DIRS)),y)
>  CONFIG_USER_ONLY := $(if $(filter %-user,$(TARGET_DIRS)),y)
> +CONFIG_XEN := $(CONFIG_XEN_BACKEND)
>  CONFIG_ALL=y
>  -include config-all-devices.mak
>  -include config-all-disas.mak
> 
> The Makefile change ensures that they are built before descending in the
> target-specific directories.

But I don't understand this. Please correct me if I am wrong, but this
change looks like it would end up setting CONFIG_XEN every time that
CONFIG_XEN_BACKEND is set. Without the configure change at the top, it
would end up setting CONFIG_XEN whenever the host supports Xen, even for
non-x86 and non-ARM targets. What am I missing?
diff mbox

Patch

diff --git a/configure b/configure
index 6c21975..6d8f752 100755
--- a/configure
+++ b/configure
@@ -5442,7 +5442,6 @@  if test "$virglrenderer" = "yes" ; then
   echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
 fi
 if test "$xen" = "yes" ; then
-  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
   echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
   if test "$xen_pv_domain_build" = "yes" ; then
     echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
@@ -6028,6 +6027,7 @@  case "$target_name" in
   i386|x86_64)
     if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
       echo "CONFIG_XEN=y" >> $config_target_mak
+      echo "CONFIG_XEN_BACKEND=y" >> $config_target_mak
       if test "$xen_pci_passthrough" = yes; then
         echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
       fi