From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>,
Eduardo Habkost <ehabkost@redhat.com>,
Juan Quintela <quintela@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Paul Durrant <paul@xen.org>,
Aleksandar Markovic <aleksandar.qemu.devel@gmail.com>,
Igor Mammedov <imammedo@redhat.com>,
Anthony Perard <anthony.perard@citrix.com>,
xen-devel@lists.xenproject.org,
Aurelien Jarno <aurelien@aurel32.net>,
Richard Henderson <rth@twiddle.net>
Subject: Re: [PATCH] accel: Move Xen accelerator code under accel/xen/
Date: Fri, 8 May 2020 07:34:48 +0200 [thread overview]
Message-ID: <d84e5541-da7a-4ead-6277-3b144744f58b@redhat.com> (raw)
In-Reply-To: <20200507155813.16169-1-philmd@redhat.com>
On 5/7/20 5:58 PM, Philippe Mathieu-Daudé wrote:
> This code is not related to hardware emulation.
> Move it under accel/ with the other hypervisors.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> We could also move the memory management functions from
> hw/i386/xen/xen-hvm.c but it is not trivial.
>
> Necessary step to remove "exec/ram_addr.h" in the next series.
> ---
> include/exec/ram_addr.h | 2 +-
> include/hw/xen/xen.h | 11 ------
> include/sysemu/xen.h | 40 ++++++++++++++++++++++
> hw/xen/xen-common.c => accel/xen/xen-all.c | 3 ++
> hw/acpi/piix4.c | 2 +-
> hw/i386/pc.c | 1 +
> hw/i386/pc_piix.c | 1 +
> hw/i386/pc_q35.c | 1 +
> hw/i386/xen/xen-hvm.c | 1 +
> hw/i386/xen/xen_platform.c | 1 +
> hw/isa/piix3.c | 1 +
> hw/pci/msix.c | 1 +
> migration/savevm.c | 2 +-
> softmmu/vl.c | 2 +-
> stubs/xen-hvm.c | 9 -----
> target/i386/cpu.c | 2 +-
> MAINTAINERS | 2 ++
> accel/Makefile.objs | 1 +
> accel/xen/Makefile.objs | 1 +
> hw/xen/Makefile.objs | 2 +-
> 20 files changed, 60 insertions(+), 26 deletions(-)
> create mode 100644 include/sysemu/xen.h
> rename hw/xen/xen-common.c => accel/xen/xen-all.c (99%)
> create mode 100644 accel/xen/Makefile.objs
>
> diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
> index 5e59a3d8d7..4e05292f91 100644
> --- a/include/exec/ram_addr.h
> +++ b/include/exec/ram_addr.h
> @@ -21,7 +21,7 @@
>
> #ifndef CONFIG_USER_ONLY
> #include "cpu.h"
> -#include "hw/xen/xen.h"
> +#include "sysemu/xen.h"
> #include "sysemu/tcg.h"
> #include "exec/ramlist.h"
> #include "exec/ramblock.h"
> diff --git a/include/hw/xen/xen.h b/include/hw/xen/xen.h
> index 5ac1c6dc55..771dd447f2 100644
> --- a/include/hw/xen/xen.h
> +++ b/include/hw/xen/xen.h
> @@ -20,13 +20,6 @@ extern uint32_t xen_domid;
> extern enum xen_mode xen_mode;
> extern bool xen_domid_restrict;
>
> -extern bool xen_allowed;
> -
> -static inline bool xen_enabled(void)
> -{
> - return xen_allowed;
> -}
> -
> int xen_pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num);
> void xen_piix3_set_irq(void *opaque, int irq_num, int level);
> void xen_piix_pci_write_config_client(uint32_t address, uint32_t val, int len);
> @@ -39,10 +32,6 @@ void xenstore_store_pv_console_info(int i, struct Chardev *chr);
>
> void xen_hvm_init(PCMachineState *pcms, MemoryRegion **ram_memory);
>
> -void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size,
> - struct MemoryRegion *mr, Error **errp);
> -void xen_hvm_modified_memory(ram_addr_t start, ram_addr_t length);
> -
> void xen_register_framebuffer(struct MemoryRegion *mr);
>
> #endif /* QEMU_HW_XEN_H */
> diff --git a/include/sysemu/xen.h b/include/sysemu/xen.h
> new file mode 100644
> index 0000000000..609d2d4184
> --- /dev/null
> +++ b/include/sysemu/xen.h
> @@ -0,0 +1,40 @@
> +/*
> + * QEMU Xen support
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or later.
> + * See the COPYING file in the top-level directory.
> + */
> +
> +#ifndef SYSEMU_XEN_H
> +#define SYSEMU_XEN_H
> +
> +#ifdef CONFIG_XEN
> +
> +extern bool xen_allowed;
> +
> +#define xen_enabled() (xen_allowed)
> +
> +#ifndef CONFIG_USER_ONLY
> +void xen_hvm_modified_memory(ram_addr_t start, ram_addr_t length);
> +void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size,
> + struct MemoryRegion *mr, Error **errp);
> +#endif
> +
> +#else /* !CONFIG_XEN */
> +
> +#define xen_enabled() 0
> +#ifndef CONFIG_USER_ONLY
> +static inline void xen_hvm_modified_memory(ram_addr_t start, ram_addr_t length)
> +{
> + abort();
> +}
> +static inline void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size,
> + MemoryRegion *mr, Error **errp)
> +{
> + abort();
> +}
> +#endif
Unfortunately this triggers:
#1 0x00007fca778a5895 abort (libc.so.6)
#2 0x000055f51ebd3e12 xen_hvm_modified_memory (qemu-system-aarch64)
#3 0x000055f51ebd44c9 cpu_physical_memory_set_dirty_range
(qemu-system-aarch64)
#4 0x000055f51ebd9de4 ram_block_add (qemu-system-aarch64)
#5 0x000055f51ebda2e3 qemu_ram_alloc_internal (qemu-system-aarch64)
#6 0x000055f51ebda3be qemu_ram_alloc (qemu-system-aarch64)
#7 0x000055f51ec3db9b memory_region_init_ram_shared_nomigrate
(qemu-system-aarch64)
#8 0x000055f51ef089e6 ram_backend_memory_alloc (qemu-system-aarch64)
#9 0x000055f51ef081ae host_memory_backend_memory_complete
(qemu-system-aarch64)
#10 0x000055f51f2b624b user_creatable_complete (qemu-system-aarch64)
#11 0x000055f51ed93382 create_default_memdev (qemu-system-aarch64)
#12 0x000055f51ed96d1a qemu_init (qemu-system-aarch64)
#13 0x000055f51f3b14bb main (qemu-system-aarch64)
#14 0x00007fca778a6f43 __libc_start_main (libc.so.6)
#15 0x000055f51ebd27de _start (qemu-system-aarch64)
I'll resend adding the following patch checking for xen_enabled() before
calling, as we do with other accelerators:
-- >8 --
diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
@@ -330,7 +330,9 @@ static inline void
cpu_physical_memory_set_dirty_range(ram_addr_t start,
}
}
- xen_hvm_modified_memory(start, length);
+ if (xen_enabled()) {
+ xen_hvm_modified_memory(start, length);
+ }
}
#if !defined(_WIN32)
@@ -388,7 +390,9 @@ static inline void
cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
}
}
- xen_hvm_modified_memory(start, pages << TARGET_PAGE_BITS);
+ if (xen_enabled()) {
+ xen_hvm_modified_memory(start, pages << TARGET_PAGE_BITS);
+ }
} else {
uint8_t clients = tcg_enabled() ? DIRTY_CLIENTS_ALL :
DIRTY_CLIENTS_NOCODE;
---
prev parent reply other threads:[~2020-05-08 5:35 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-07 15:58 [PATCH] accel: Move Xen accelerator code under accel/xen/ Philippe Mathieu-Daudé
2020-05-07 17:40 ` Paul Durrant
2020-05-08 5:28 ` no-reply
2020-05-08 5:34 ` Philippe Mathieu-Daudé [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d84e5541-da7a-4ead-6277-3b144744f58b@redhat.com \
--to=philmd@redhat.com \
--cc=aleksandar.qemu.devel@gmail.com \
--cc=anthony.perard@citrix.com \
--cc=aurelien@aurel32.net \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=mst@redhat.com \
--cc=paul@xen.org \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=rth@twiddle.net \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).