All of lore.kernel.org
 help / color / mirror / Atom feed
* [PULL 0/1] xen queue 2020-08-03
@ 2020-08-03 16:52 Anthony PERARD
  2020-08-03 16:52 ` [PULL 1/1] accel/xen: Fix xen_enabled() behavior on target-agnostic objects Anthony PERARD
  2020-08-03 18:33 ` [PULL 0/1] xen queue 2020-08-03 Peter Maydell
  0 siblings, 2 replies; 4+ messages in thread
From: Anthony PERARD @ 2020-08-03 16:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony PERARD, Peter Maydell, xen-devel

The following changes since commit 45a150aa2b3492acf6691c7bdbeb25a8545d8345:

  Merge remote-tracking branch 'remotes/ericb/tags/pull-bitmaps-2020-08-03' into staging (2020-08-03 15:13:49 +0100)

are available in the Git repository at:

  https://xenbits.xen.org/git-http/people/aperard/qemu-dm.git tags/pull-xen-20200803

for you to fetch changes up to b3fcc98f391e9a60a369d825333b852871cf67b0:

  accel/xen: Fix xen_enabled() behavior on target-agnostic objects (2020-08-03 17:39:38 +0100)

----------------------------------------------------------------
xen patches

bug fix

----------------------------------------------------------------
Philippe Mathieu-Daudé (1):
      accel/xen: Fix xen_enabled() behavior on target-agnostic objects

 include/sysemu/xen.h | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PULL 1/1] accel/xen: Fix xen_enabled() behavior on target-agnostic objects
  2020-08-03 16:52 [PULL 0/1] xen queue 2020-08-03 Anthony PERARD
@ 2020-08-03 16:52 ` Anthony PERARD
  2020-08-03 18:33 ` [PULL 0/1] xen queue 2020-08-03 Peter Maydell
  1 sibling, 0 replies; 4+ messages in thread
From: Anthony PERARD @ 2020-08-03 16:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Anthony PERARD, Peter Maydell, Philippe Mathieu-Daudé, xen-devel

From: Philippe Mathieu-Daudé <philmd@redhat.com>

CONFIG_XEN is generated by configure and stored in "config-target.h",
which is (obviously) only include for target-specific objects.
This is a problem for target-agnostic objects as CONFIG_XEN is never
defined and xen_enabled() is always inlined as 'false'.

Fix by following the KVM schema, defining CONFIG_XEN_IS_POSSIBLE
when we don't know to force the call of the non-inlined function,
returning the xen_allowed boolean.

Fixes: da278d58a092 ("accel: Move Xen accelerator code under accel/xen/")
Reported-by: Paul Durrant <pdurrant@amazon.com>
Suggested-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
Tested-by: Paul Durrant <paul@xen.org>
Message-Id: <20200728100925.10454-1-philmd@redhat.com>
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 include/sysemu/xen.h | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/include/sysemu/xen.h b/include/sysemu/xen.h
index 1ca292715e69..385a1fa2bff8 100644
--- a/include/sysemu/xen.h
+++ b/include/sysemu/xen.h
@@ -8,7 +8,15 @@
 #ifndef SYSEMU_XEN_H
 #define SYSEMU_XEN_H
 
-#ifdef CONFIG_XEN
+#ifdef NEED_CPU_H
+# ifdef CONFIG_XEN
+#  define CONFIG_XEN_IS_POSSIBLE
+# endif
+#else
+# define CONFIG_XEN_IS_POSSIBLE
+#endif
+
+#ifdef CONFIG_XEN_IS_POSSIBLE
 
 bool xen_enabled(void);
 
@@ -18,7 +26,7 @@ void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size,
                    struct MemoryRegion *mr, Error **errp);
 #endif
 
-#else /* !CONFIG_XEN */
+#else /* !CONFIG_XEN_IS_POSSIBLE */
 
 #define xen_enabled() 0
 #ifndef CONFIG_USER_ONLY
@@ -33,6 +41,6 @@ static inline void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size,
 }
 #endif
 
-#endif /* CONFIG_XEN */
+#endif /* CONFIG_XEN_IS_POSSIBLE */
 
 #endif
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PULL 0/1] xen queue 2020-08-03
  2020-08-03 16:52 [PULL 0/1] xen queue 2020-08-03 Anthony PERARD
  2020-08-03 16:52 ` [PULL 1/1] accel/xen: Fix xen_enabled() behavior on target-agnostic objects Anthony PERARD
@ 2020-08-03 18:33 ` Peter Maydell
  1 sibling, 0 replies; 4+ messages in thread
From: Peter Maydell @ 2020-08-03 18:33 UTC (permalink / raw)
  To: Anthony PERARD, Philippe Mathieu-Daudé
  Cc: open list:X86, QEMU Developers

On Mon, 3 Aug 2020 at 17:53, Anthony PERARD <anthony.perard@citrix.com> wrote:
> ----------------------------------------------------------------
> xen patches
>
> bug fix
>
> ----------------------------------------------------------------
> Philippe Mathieu-Daudé (1):
>       accel/xen: Fix xen_enabled() behavior on target-agnostic objects

This fails to compile, all hosts :-(

  LINK    avr-softmmu/qemu-system-avr
../migration/savevm.o: In function `qemu_loadvm_section_start_full':
/home/petmay01/linaro/qemu-for-merges/migration/savevm.c:2320:
undefined reference to `xen_enabled'
collect2: error: ld returned 1 exit status
[ditto other softmmu link attempts]

Similar but different on OSX:

  LINK    aarch64-softmmu/qemu-system-aarch64
Undefined symbols for architecture x86_64:
  "_xen_enabled", referenced from:
      _msix_is_masked in msix.o
      _msix_write_config in msix.o
      _msix_handle_mask_update in msix.o
      _msix_init in msix.o
      _msix_notify in msix.o
      _msix_reset in msix.o
      _msix_set_vector_notifiers in msix.o
      ...
ld: symbol(s) not found for architecture x86_64

Fails in all the BSD VM builds as well, so I don't think this
is related to incremental vs from-clean builds.

I think the failure here is only on builds where
CONFIG_XEN is not set by configure (which for my merge
build setup appears to be all of them, I think).
In that case when we build a target-agnostic object
it gets an external reference to the xen_enabled()
function, but because Xen is disabled we don't compile
accel/xen/ and so there is no actual implementation of
the function in the link.

This doesn't happen for KVM because there the
CONFIG_KVM_IS_POSSIBLE version of kvm_enabled()
is a #define:
#define kvm_enabled()           (kvm_allowed)
and we provide both the "real" version of the
'bool kvm_allowed' in accel/kvm/kvm-all.c and also
the stub version in accel/stubs/kvm-stub.c which will
be used in configurations thta don't build accel/kvm.

I think then that the fix for this build failure is to
either:
 (1) add a stub version of xen_allowed() to accel/stubs/xen-stub.c
     (which would always return false)

 (2) follow KVM more closely, and have xen_allowed() be
     a #define to (xen_allowed), with a (non-static)
     bool xen_allowed in accel/xen/xen-all.c and another
     one in accel/stubs/xen-stub.c

thanks
-- PMM


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PULL 1/1] accel/xen: Fix xen_enabled() behavior on target-agnostic objects
  2020-08-04  9:26 [PULL 0/1] xen queue 2020-08-04 Anthony PERARD
@ 2020-08-04  9:26 ` Anthony PERARD
  0 siblings, 0 replies; 4+ messages in thread
From: Anthony PERARD @ 2020-08-04  9:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: Anthony PERARD, Peter Maydell, Philippe Mathieu-Daudé, xen-devel

From: Philippe Mathieu-Daudé <philmd@redhat.com>

CONFIG_XEN is generated by configure and stored in "config-target.h",
which is (obviously) only include for target-specific objects.
This is a problem for target-agnostic objects as CONFIG_XEN is never
defined and xen_enabled() is always inlined as 'false'.

Fix by following the KVM schema, defining CONFIG_XEN_IS_POSSIBLE
when we don't know to force the call of the non-inlined function,
returning the xen_allowed boolean.

Fixes: da278d58a092 ("accel: Move Xen accelerator code under accel/xen/")
Reported-by: Paul Durrant <pdurrant@amazon.com>
Suggested-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Paul Durrant <paul@xen.org>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
Message-Id: <20200804074930.13104-2-philmd@redhat.com>
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 accel/stubs/xen-stub.c |  2 ++
 accel/xen/xen-all.c    |  7 +------
 include/sysemu/xen.h   | 18 ++++++++++++++----
 3 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/accel/stubs/xen-stub.c b/accel/stubs/xen-stub.c
index dcca4e678a13..8ae658acff5f 100644
--- a/accel/stubs/xen-stub.c
+++ b/accel/stubs/xen-stub.c
@@ -9,6 +9,8 @@
 #include "hw/xen/xen.h"
 #include "qapi/qapi-commands-misc.h"
 
+bool xen_allowed;
+
 void xenstore_store_pv_console_info(int i, Chardev *chr)
 {
 }
diff --git a/accel/xen/xen-all.c b/accel/xen/xen-all.c
index 0c24d4b191a4..60b971d0a82f 100644
--- a/accel/xen/xen-all.c
+++ b/accel/xen/xen-all.c
@@ -32,12 +32,7 @@
     do { } while (0)
 #endif
 
-static bool xen_allowed;
-
-bool xen_enabled(void)
-{
-    return xen_allowed;
-}
+bool xen_allowed;
 
 xc_interface *xen_xc;
 xenforeignmemory_handle *xen_fmem;
diff --git a/include/sysemu/xen.h b/include/sysemu/xen.h
index 1ca292715e69..2c2c429ea8bf 100644
--- a/include/sysemu/xen.h
+++ b/include/sysemu/xen.h
@@ -8,9 +8,19 @@
 #ifndef SYSEMU_XEN_H
 #define SYSEMU_XEN_H
 
-#ifdef CONFIG_XEN
+#ifdef NEED_CPU_H
+# ifdef CONFIG_XEN
+#  define CONFIG_XEN_IS_POSSIBLE
+# endif
+#else
+# define CONFIG_XEN_IS_POSSIBLE
+#endif
+
+#ifdef CONFIG_XEN_IS_POSSIBLE
+
+extern bool xen_allowed;
 
-bool xen_enabled(void);
+#define xen_enabled()           (xen_allowed)
 
 #ifndef CONFIG_USER_ONLY
 void xen_hvm_modified_memory(ram_addr_t start, ram_addr_t length);
@@ -18,7 +28,7 @@ void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size,
                    struct MemoryRegion *mr, Error **errp);
 #endif
 
-#else /* !CONFIG_XEN */
+#else /* !CONFIG_XEN_IS_POSSIBLE */
 
 #define xen_enabled() 0
 #ifndef CONFIG_USER_ONLY
@@ -33,6 +43,6 @@ static inline void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size,
 }
 #endif
 
-#endif /* CONFIG_XEN */
+#endif /* CONFIG_XEN_IS_POSSIBLE */
 
 #endif
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-08-04  9:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-03 16:52 [PULL 0/1] xen queue 2020-08-03 Anthony PERARD
2020-08-03 16:52 ` [PULL 1/1] accel/xen: Fix xen_enabled() behavior on target-agnostic objects Anthony PERARD
2020-08-03 18:33 ` [PULL 0/1] xen queue 2020-08-03 Peter Maydell
2020-08-04  9:26 [PULL 0/1] xen queue 2020-08-04 Anthony PERARD
2020-08-04  9:26 ` [PULL 1/1] accel/xen: Fix xen_enabled() behavior on target-agnostic objects Anthony PERARD

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.