qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: Mohamed Mediouni <mohamed@unpredictable.fr>,
	qemu-devel@nongnu.org,
	Richard Henderson <richard.henderson@linaro.org>
Cc: "Shannon Zhao" <shannon.zhaosl@gmail.com>,
	"Yanan Wang" <wangyanan55@huawei.com>,
	"Phil Dennis-Jordan" <phil@philjordan.eu>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Mads Ynddal" <mads@ynddal.dk>,
	"Cameron Esfahani" <dirty@apple.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Zhao Liu" <zhao1.liu@intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	kvm@vger.kernel.org, "Igor Mammedov" <imammedo@redhat.com>,
	qemu-arm@nongnu.org, "Roman Bolshakov" <rbolshakov@ddn.com>,
	"Pedro Barbuda" <pbarbuda@microsoft.com>,
	"Alexander Graf" <agraf@csgraf.de>,
	"Sunil Muthuswamy" <sunilmut@microsoft.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Ani Sinha" <anisinha@redhat.com>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Pierrick Bouvier" <pierrick.bouvier@linaro.org>
Subject: Re: [PATCH v6 12/23] whpx: copy over memory management logic from hvf
Date: Thu, 2 Oct 2025 07:16:39 +0200	[thread overview]
Message-ID: <b85d3293-0fcc-40ef-a170-256a20eb91cb@linaro.org> (raw)
In-Reply-To: <20250920140124.63046-13-mohamed@unpredictable.fr>

On 20/9/25 16:01, Mohamed Mediouni wrote:
> This allows edk2 to work, although u-boot is still not functional.
> 
> Signed-off-by: Mohamed Mediouni <mohamed@unpredictable.fr>
> 
> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
> ---
>   accel/whpx/whpx-common.c | 201 ++++++++++++++++++++++++++++-----------
>   1 file changed, 147 insertions(+), 54 deletions(-)
> 
> diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c
> index c69792e638..f324f5c146 100644
> --- a/accel/whpx/whpx-common.c
> +++ b/accel/whpx/whpx-common.c
> @@ -258,89 +258,174 @@ void whpx_vcpu_kick(CPUState *cpu)
>    * Memory support.
>    */
>   
> -static void whpx_update_mapping(hwaddr start_pa, ram_addr_t size,
> -                                void *host_va, int add, int rom,
> -                                const char *name)
> + /* whpx_slot flags */
> +#define WHPX_SLOT_LOG (1 << 0)
> +typedef struct whpx_slot {
> +    uint64_t start;
> +    uint64_t size;
> +    uint8_t *mem;
> +    int slot_id;
> +    uint32_t flags;
> +    MemoryRegion *region;
> +} whpx_slot;
> +
> +typedef struct WHPXState {
> +    whpx_slot slots[32];
> +    int num_slots;
> +} WHPXState;
> +
> + WHPXState *whpx_state;
> +
> + struct mac_slot {
> +    int present;
> +    uint64_t size;
> +    uint64_t gpa_start;
> +    uint64_t gva;
> +};
> +
> +struct mac_slot mac_slots[32];
> +
> +static int do_whpx_set_memory(whpx_slot *slot, WHV_MAP_GPA_RANGE_FLAGS flags)
>   {
>       struct whpx_state *whpx = &whpx_global;
> +    struct mac_slot *macslot;
>       HRESULT hr;
>   
> -    /*
> -    if (add) {
> -        printf("WHPX: ADD PA:%p Size:%p, Host:%p, %s, '%s'\n",
> -               (void*)start_pa, (void*)size, host_va,
> -               (rom ? "ROM" : "RAM"), name);
> -    } else {
> -        printf("WHPX: DEL PA:%p Size:%p, Host:%p,      '%s'\n",
> -               (void*)start_pa, (void*)size, host_va, name);
> +    macslot = &mac_slots[slot->slot_id];
> +
> +    if (macslot->present) {
> +        if (macslot->size != slot->size) {
> +            macslot->present = 0;
> +            hr = whp_dispatch.WHvUnmapGpaRange(whpx->partition,
> +                 macslot->gpa_start, macslot->size);
> +            if (FAILED(hr)) {
> +                abort();
> +            }
> +        }
>       }
> -    */
> -
> -    if (add) {
> -        hr = whp_dispatch.WHvMapGpaRange(whpx->partition,
> -                                         host_va,
> -                                         start_pa,
> -                                         size,
> -                                         (WHvMapGpaRangeFlagRead |
> -                                          WHvMapGpaRangeFlagExecute |
> -                                          (rom ? 0 : WHvMapGpaRangeFlagWrite)));
> -    } else {
> -        hr = whp_dispatch.WHvUnmapGpaRange(whpx->partition,
> -                                           start_pa,
> -                                           size);
> +
> +    if (!slot->size) {
> +        return 0;
>       }
>   
> -    if (FAILED(hr)) {
> -        error_report("WHPX: Failed to %s GPA range '%s' PA:%p, Size:%p bytes,"
> -                     " Host:%p, hr=%08lx",
> -                     (add ? "MAP" : "UNMAP"), name,
> -                     (void *)(uintptr_t)start_pa, (void *)size, host_va, hr);
> +    macslot->present = 1;
> +    macslot->gpa_start = slot->start;
> +    macslot->size = slot->size;
> +    hr = whp_dispatch.WHvMapGpaRange(whpx->partition,
> +         slot->mem, slot->start, slot->size, flags);
> +    return 0;
> +}

[...]

This HVF code is bogus and Richard has been heavily reworking it. We
haven't posted the changes so far, but IMHO it is worth waiting them
to compare before proceeding with this series. I'll let Richard briefly
explain what we had to change ;)

Regards,

Phil.


  reply	other threads:[~2025-10-02  5:18 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-20 14:01 [PATCH v6 00/23] WHPX support for Arm Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 01/23] target/arm/kvm: add constants for new PSCI versions Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 02/23] accel/system: Introduce hwaccel_enabled() helper Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 03/23] hw/arm: virt: add GICv2m for the case when ITS is not available Mohamed Mediouni
2025-09-25 16:24   ` Peter Maydell
2025-10-02  4:30     ` Mohamed Mediouni
2025-10-27 16:03       ` Peter Maydell
2025-10-27 16:53         ` Mohamed Mediouni
2025-10-27 17:07           ` Peter Maydell
2025-09-20 14:01 ` [PATCH v6 04/23] tests: data: update AArch64 ACPI tables Mohamed Mediouni
2025-09-25 15:59   ` Peter Maydell
2025-09-20 14:01 ` [PATCH v6 05/23] whpx: Move around files before introducing AArch64 support Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 06/23] whpx: reshuffle common code Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 07/23] whpx: ifdef out winhvemulation on non-x86_64 Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 08/23] whpx: common: add WHPX_INTERCEPT_DEBUG_TRAPS define Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 09/23] hw, target, accel: whpx: change apic_in_platform to kernel_irqchip Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 10/23] whpx: interrupt controller support Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 11/23] whpx: add arm64 support Mohamed Mediouni
2025-10-02  5:13   ` Philippe Mathieu-Daudé
2025-09-20 14:01 ` [PATCH v6 12/23] whpx: copy over memory management logic from hvf Mohamed Mediouni
2025-10-02  5:16   ` Philippe Mathieu-Daudé [this message]
2025-09-20 14:01 ` [PATCH v6 13/23] target/arm: cpu: mark WHPX as supporting PSCI 1.3 Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 14/23] hw/arm: virt: cleanly fail on attempt to use the platform vGIC together with ITS Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 15/23] whpx: arm64: clamp down IPA size Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 16/23] hw/arm, accel/hvf, whpx: unify get_physical_address_range between WHPX and HVF Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 17/23] whpx: arm64: implement -cpu host Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 18/23] target/arm: whpx: instantiate GIC early Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 19/23] whpx: arm64: gicv3: add migration blocker Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 20/23] whpx: enable arm64 builds Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 21/23] MAINTAINERS: update maintainers for WHPX Mohamed Mediouni
2025-09-20 14:01 ` [PATCH v6 22/23] docs: arm: update virt machine model description Mohamed Mediouni
2025-09-25 16:02   ` Peter Maydell
2025-09-20 14:01 ` [PATCH v6 23/23] whpx: apic: use non-deprecated APIs to control interrupt controller state Mohamed Mediouni

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=b85d3293-0fcc-40ef-a170-256a20eb91cb@linaro.org \
    --to=philmd@linaro.org \
    --cc=agraf@csgraf.de \
    --cc=anisinha@redhat.com \
    --cc=berrange@redhat.com \
    --cc=dirty@apple.com \
    --cc=eduardo@habkost.net \
    --cc=imammedo@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mads@ynddal.dk \
    --cc=marcandre.lureau@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mohamed@unpredictable.fr \
    --cc=mst@redhat.com \
    --cc=pbarbuda@microsoft.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=phil@philjordan.eu \
    --cc=pierrick.bouvier@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rbolshakov@ddn.com \
    --cc=richard.henderson@linaro.org \
    --cc=shannon.zhaosl@gmail.com \
    --cc=sunilmut@microsoft.com \
    --cc=wangyanan55@huawei.com \
    --cc=zhao1.liu@intel.com \
    /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).