From: Igor Mammedov <imammedo@redhat.com>
To: Joao Martins <joao.m.martins@oracle.com>
Cc: qemu-devel@nongnu.org, Eduardo Habkost <eduardo@habkost.net>,
"Michael S. Tsirkin" <mst@redhat.com>,
Richard Henderson <richard.henderson@linaro.org>,
Alex Williamson <alex.williamson@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>, Ani Sinha <ani@anisinha.ca>,
Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Subject: Re: [PATCH v6 10/10] i386/pc: restrict AMD only enforcing of valid IOVAs to new machine type
Date: Mon, 11 Jul 2022 15:03:01 +0200 [thread overview]
Message-ID: <20220711150301.0909b023@redhat.com> (raw)
In-Reply-To: <20220701161014.3850-11-joao.m.martins@oracle.com>
On Fri, 1 Jul 2022 17:10:14 +0100
Joao Martins <joao.m.martins@oracle.com> wrote:
> The added enforcing is only relevant in the case of AMD where the
> range right before the 1TB is restricted and cannot be DMA mapped
> by the kernel consequently leading to IOMMU INVALID_DEVICE_REQUEST
> or possibly other kinds of IOMMU events in the AMD IOMMU.
>
> Although, there's a case where it may make sense to disable the
> IOVA relocation/validation when migrating from a
> non-valid-IOVA-aware qemu to one that supports it.
>
> Relocating RAM regions to after the 1Tb hole has consequences for
> guest ABI because we are changing the memory mapping, so make
> sure that only new machine enforce but not older ones.
>
> Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
> ---
> hw/i386/pc.c | 6 ++++--
> hw/i386/pc_piix.c | 2 ++
> hw/i386/pc_q35.c | 2 ++
> include/hw/i386/pc.h | 1 +
> 4 files changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 07025b510540..f99e16a5db4b 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -1013,9 +1013,10 @@ void pc_memory_init(PCMachineState *pcms,
> /*
> * The HyperTransport range close to the 1T boundary is unique to AMD
> * hosts with IOMMUs enabled. Restrict the ram-above-4g relocation
> - * to above 1T to AMD vCPUs only.
> + * to above 1T to AMD vCPUs only. @enforce_valid_iova is only false in
> + * older machine types (<= 7.0) for compatibility purposes.
> */
> - if (IS_AMD_CPU(&cpu->env)) {
> + if (IS_AMD_CPU(&cpu->env) && pcmc->enforce_valid_iova) {
> pc_set_amd_above_4g_mem_start(pcms, pci_hole64_size);
>
> /*
> @@ -1950,6 +1951,7 @@ static void pc_machine_class_init(ObjectClass *oc, void *data)
> pcmc->has_reserved_memory = true;
> pcmc->kvmclock_enabled = true;
> pcmc->enforce_aligned_dimm = true;
> + pcmc->enforce_valid_iova = true;
> /* BIOS ACPI tables: 128K. Other BIOS datastructures: less than 4K reported
> * to be used at the moment, 32K should be enough for a while. */
> pcmc->acpi_data_size = 0x20000 + 0x8000;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index f3c726e42400..504ddd0deece 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -444,9 +444,11 @@ DEFINE_I440FX_MACHINE(v7_1, "pc-i440fx-7.1", NULL,
>
> static void pc_i440fx_7_0_machine_options(MachineClass *m)
> {
> + PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> pc_i440fx_7_1_machine_options(m);
> m->alias = NULL;
> m->is_default = false;
> + pcmc->enforce_valid_iova = false;
> compat_props_add(m->compat_props, hw_compat_7_0, hw_compat_7_0_len);
> compat_props_add(m->compat_props, pc_compat_7_0, pc_compat_7_0_len);
> }
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 5a4a737fe203..4b747c59c19a 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -381,8 +381,10 @@ DEFINE_Q35_MACHINE(v7_1, "pc-q35-7.1", NULL,
>
> static void pc_q35_7_0_machine_options(MachineClass *m)
> {
> + PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> pc_q35_7_1_machine_options(m);
> m->alias = NULL;
> + pcmc->enforce_valid_iova = false;
> compat_props_add(m->compat_props, hw_compat_7_0, hw_compat_7_0_len);
> compat_props_add(m->compat_props, pc_compat_7_0, pc_compat_7_0_len);
> }
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 568c226d3034..3a873ff69499 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -118,6 +118,7 @@ struct PCMachineClass {
> bool has_reserved_memory;
> bool enforce_aligned_dimm;
> bool broken_reserved_end;
> + bool enforce_valid_iova;
maybe
s/enforce_valid_iova/enforce_amd_1tb_hole/
to be less ambiguous
otherwise looks good to me so
Acked-by: Igor Mammedov <imammedo@redhat.com>
>
> /* generate legacy CPU hotplug AML */
> bool legacy_cpu_hotplug;
next prev parent reply other threads:[~2022-07-11 13:07 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-01 16:10 [PATCH v6 00/10] i386/pc: Fix creation of >= 1010G guests on AMD systems with IOMMU Joao Martins
2022-07-01 16:10 ` [PATCH v6 01/10] hw/i386: add 4g boundary start to X86MachineState Joao Martins
2022-07-01 16:10 ` [PATCH v6 02/10] i386/pc: create pci-host qdev prior to pc_memory_init() Joao Martins
2022-07-01 16:10 ` [PATCH v6 03/10] i386/pc: pass pci_hole64_size " Joao Martins
2022-07-09 20:51 ` B
2022-07-11 10:01 ` Joao Martins
2022-07-11 22:17 ` B
2022-07-12 9:27 ` Joao Martins
2022-07-01 16:10 ` [PATCH v6 04/10] i386/pc: factor out above-4g end to an helper Joao Martins
2022-07-07 12:42 ` Igor Mammedov
2022-07-07 15:14 ` Joao Martins
2022-07-01 16:10 ` [PATCH v6 05/10] i386/pc: factor out cxl range end to helper Joao Martins
2022-07-07 12:57 ` Igor Mammedov
2022-07-07 15:17 ` Joao Martins
2022-07-01 16:10 ` [PATCH v6 06/10] i386/pc: factor out cxl range start " Joao Martins
2022-07-07 13:00 ` Igor Mammedov
2022-07-07 15:18 ` Joao Martins
2022-07-11 12:47 ` Igor Mammedov
2022-07-11 14:28 ` Joao Martins
2022-07-01 16:10 ` [PATCH v6 07/10] i386/pc: handle unitialized mr in pc_get_cxl_range_end() Joao Martins
2022-07-07 13:05 ` Igor Mammedov
2022-07-07 15:21 ` Joao Martins
2022-07-11 12:58 ` Igor Mammedov
2022-07-11 14:32 ` Joao Martins
2022-07-01 16:10 ` [PATCH v6 08/10] i386/pc: factor out device_memory base/size to helper Joao Martins
2022-07-07 13:15 ` Igor Mammedov
2022-07-07 15:23 ` Joao Martins
2022-07-01 16:10 ` [PATCH v6 09/10] i386/pc: relocate 4g start to 1T where applicable Joao Martins
2022-07-07 15:53 ` Joao Martins
2022-07-11 12:56 ` Igor Mammedov
2022-07-11 14:52 ` Joao Martins
2022-07-11 15:31 ` Joao Martins
2022-07-11 20:03 ` Joao Martins
2022-07-12 9:06 ` Igor Mammedov
2022-07-12 10:01 ` Joao Martins
2022-07-12 10:21 ` Joao Martins
2022-07-12 11:35 ` Joao Martins
2022-07-14 9:28 ` Igor Mammedov
2022-07-14 9:54 ` Joao Martins
2022-07-14 10:47 ` Joao Martins
2022-07-14 11:50 ` Igor Mammedov
2022-07-14 15:39 ` Joao Martins
2022-07-14 9:30 ` Igor Mammedov
2022-07-01 16:10 ` [PATCH v6 10/10] i386/pc: restrict AMD only enforcing of valid IOVAs to new machine type Joao Martins
2022-07-04 14:27 ` Dr. David Alan Gilbert
2022-07-05 8:48 ` Joao Martins
2022-07-11 13:03 ` Igor Mammedov [this message]
2022-07-11 14:56 ` Joao Martins
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=20220711150301.0909b023@redhat.com \
--to=imammedo@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=ani@anisinha.ca \
--cc=dgilbert@redhat.com \
--cc=eduardo@habkost.net \
--cc=joao.m.martins@oracle.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=suravee.suthikulpanit@amd.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 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.