From: David Woodhouse <dwmw2@infradead.org>
To: qemu-devel@nongnu.org
Subject: Re: [PATCH 1/2] intel_iommu: Support IR-only mode without DMA translation
Date: Fri, 22 Jan 2021 15:14:23 +0000 [thread overview]
Message-ID: <be6ed6f27cbc1f7dc7af8ac77fbf47db360902b7.camel@infradead.org> (raw)
In-Reply-To: <20201015183457.1719068-1-dwmw2@infradead.org>
[-- Attachment #1: Type: text/plain, Size: 3074 bytes --]
On Thu, 2020-10-15 at 19:34 +0100, David Woodhouse wrote:
> From: David Woodhouse <dwmw@amazon.co.uk>
>
> By setting none of the SAGAW bits we can indicate to a guest that DMA
> translation isn't supported. Tested by booting Windows 10, as well as
> Linux guests with the fix at https://git.kernel.org/torvalds/c/c40aaaac10
>
> Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Shall I resend these? They still seem to apply cleanly.
> ---
> hw/i386/intel_iommu.c | 14 ++++++++++----
> include/hw/i386/intel_iommu.h | 1 +
> 2 files changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
> index 749eb6ad63..f49b4af931 100644
> --- a/hw/i386/intel_iommu.c
> +++ b/hw/i386/intel_iommu.c
> @@ -2189,7 +2189,7 @@ static void vtd_handle_gcmd_write(IntelIOMMUState *s)
> uint32_t changed = status ^ val;
>
> trace_vtd_reg_write_gcmd(status, val);
> - if (changed & VTD_GCMD_TE) {
> + if ((changed & VTD_GCMD_TE) && s->dma_translation) {
> /* Translation enable/disable */
> vtd_handle_gcmd_te(s, val & VTD_GCMD_TE);
> }
> @@ -3086,6 +3086,7 @@ static Property vtd_properties[] = {
> DEFINE_PROP_BOOL("caching-mode", IntelIOMMUState, caching_mode, FALSE),
> DEFINE_PROP_BOOL("x-scalable-mode", IntelIOMMUState, scalable_mode, FALSE),
> DEFINE_PROP_BOOL("dma-drain", IntelIOMMUState, dma_drain, true),
> + DEFINE_PROP_BOOL("dma-translation", IntelIOMMUState, dma_translation, true),
> DEFINE_PROP_END_OF_LIST(),
> };
>
> @@ -3607,12 +3608,17 @@ static void vtd_init(IntelIOMMUState *s)
> s->next_frcd_reg = 0;
> s->cap = VTD_CAP_FRO | VTD_CAP_NFR | VTD_CAP_ND |
> VTD_CAP_MAMV | VTD_CAP_PSI | VTD_CAP_SLLPS |
> - VTD_CAP_SAGAW_39bit | VTD_CAP_MGAW(s->aw_bits);
> + VTD_CAP_MGAW(s->aw_bits);
> if (s->dma_drain) {
> s->cap |= VTD_CAP_DRAIN;
> }
> - if (s->aw_bits == VTD_HOST_AW_48BIT) {
> - s->cap |= VTD_CAP_SAGAW_48bit;
> + if (s->dma_translation) {
> + if (s->aw_bits >= VTD_HOST_AW_39BIT) {
> + s->cap |= VTD_CAP_SAGAW_39bit;
> + }
> + if (s->aw_bits >= VTD_HOST_AW_48BIT) {
> + s->cap |= VTD_CAP_SAGAW_48bit;
> + }
> }
> s->ecap = VTD_ECAP_QI | VTD_ECAP_IRO;
>
> diff --git a/include/hw/i386/intel_iommu.h b/include/hw/i386/intel_iommu.h
> index 41783ee46d..42d6a6a636 100644
> --- a/include/hw/i386/intel_iommu.h
> +++ b/include/hw/i386/intel_iommu.h
> @@ -266,6 +266,7 @@ struct IntelIOMMUState {
> bool buggy_eim; /* Force buggy EIM unless eim=off */
> uint8_t aw_bits; /* Host/IOVA address width (in bits) */
> bool dma_drain; /* Whether DMA r/w draining enabled */
> + bool dma_translation; /* Whether DMA translation supported */
>
> /*
> * Protects IOMMU states in general. Currently it protects the
[-- Attachment #2: smime.p7s --]
[-- Type: application/x-pkcs7-signature, Size: 5174 bytes --]
next prev parent reply other threads:[~2021-01-22 15:18 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-15 18:34 [PATCH 1/2] intel_iommu: Support IR-only mode without DMA translation David Woodhouse
2020-10-15 18:34 ` [PATCH 2/2] intel_iommu: Only allow interrupt remapping to be enabled if it's supported David Woodhouse
2021-01-22 15:14 ` David Woodhouse [this message]
-- strict thread matches above, loose matches on Subject: below --
2021-12-01 20:51 [PATCH 1/2] intel_iommu: Support IR-only mode without DMA translation David Woodhouse
2021-12-02 3:49 ` Jason Wang
2021-12-03 7:38 ` Peter Xu
2021-12-03 10:46 ` David Woodhouse
2021-12-03 12:14 ` Peter Xu
2021-12-06 6:49 ` Jason Wang
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=be6ed6f27cbc1f7dc7af8ac77fbf47db360902b7.camel@infradead.org \
--to=dwmw2@infradead.org \
--cc=qemu-devel@nongnu.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).