qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: CLEMENT MATHIEU--DRIF <clement.mathieu--drif@eviden.com>
To: "Duan, Zhenzhong" <zhenzhong.duan@intel.com>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Cc: "alex.williamson@redhat.com" <alex.williamson@redhat.com>,
	"clg@redhat.com" <clg@redhat.com>,
	"eric.auger@redhat.com" <eric.auger@redhat.com>,
	"mst@redhat.com" <mst@redhat.com>,
	"peterx@redhat.com" <peterx@redhat.com>,
	"jasowang@redhat.com" <jasowang@redhat.com>,
	"jgg@nvidia.com" <jgg@nvidia.com>,
	"nicolinc@nvidia.com" <nicolinc@nvidia.com>,
	"joao.m.martins@oracle.com" <joao.m.martins@oracle.com>,
	"Tian, Kevin" <kevin.tian@intel.com>,
	"Liu, Yi L" <yi.l.liu@intel.com>,
	"Peng, Chao P" <chao.p.peng@intel.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Richard Henderson <richard.henderson@linaro.org>,
	Eduardo Habkost <eduardo@habkost.net>,
	Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
Subject: Re: [PATCH v5 08/20] intel_iommu: Check stage-1 translation result with interrupt range
Date: Thu, 14 Nov 2024 06:04:37 +0000	[thread overview]
Message-ID: <0a18e998-fa9c-47d7-a7dd-20b918c3df8c@eviden.com> (raw)
In-Reply-To: <SJ0PR11MB6744955D0692A4D225108831925A2@SJ0PR11MB6744.namprd11.prod.outlook.com>




On 13/11/2024 09:49, Duan, Zhenzhong wrote:
> Caution: External email. Do not open attachments or click links, unless this email comes from a known sender and you know the content is safe.
>
>
>> -----Original Message-----
>> From: CLEMENT MATHIEU--DRIF <clement.mathieu--drif@eviden.com>
>> Sent: Wednesday, November 13, 2024 2:56 PM
>> Subject: Re: [PATCH v5 08/20] intel_iommu: Check stage-1 translation result with
>> interrupt range
>>
>>
>> On 11/11/2024 09:34, Zhenzhong Duan wrote:
>>> Caution: External email. Do not open attachments or click links, unless this
>> email comes from a known sender and you know the content is safe.
>>>
>>> Per VT-d spec 4.1 section 3.15, "Untranslated requests and translation
>>> requests that result in an address in the interrupt range will be
>>> blocked with condition code LGN.4 or SGN.8."
>>>
>>> This applies to both stage-1 and stage-2 IOMMU page table, move the
>>> check from vtd_iova_to_slpte() to vtd_do_iommu_translate() so stage-1
>>> page table could also be checked.
>>>
>>> By this chance, update the comment with correct section number.
>>>
>>> Suggested-by: Yi Liu <yi.l.liu@intel.com>
>>> Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
>>> ---
>>>    hw/i386/intel_iommu.c | 48 ++++++++++++++++++++++---------------------
>>>    1 file changed, 25 insertions(+), 23 deletions(-)
>>>
>>> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
>>> index 4cc4d668fc..e651401db1 100644
>>> --- a/hw/i386/intel_iommu.c
>>> +++ b/hw/i386/intel_iommu.c
>>> @@ -1138,7 +1138,6 @@ static int vtd_iova_to_slpte(IntelIOMMUState *s,
>> VTDContextEntry *ce,
>>>        uint32_t offset;
>>>        uint64_t slpte;
>>>        uint64_t access_right_check;
>>> -    uint64_t xlat, size;
>>>
>>>        if (!vtd_iova_sl_range_check(s, iova, ce, aw_bits, pasid)) {
>>>            error_report_once("%s: detected IOVA overflow (iova=0x%" PRIx64 ","
>>> @@ -1191,28 +1190,7 @@ static int vtd_iova_to_slpte(IntelIOMMUState *s,
>> VTDContextEntry *ce,
>>>            level--;
>>>        }
>>>
>>> -    xlat = vtd_get_pte_addr(*slptep, aw_bits);
>>> -    size = ~vtd_pt_level_page_mask(level) + 1;
>>> -
>>> -    /*
>>> -     * From VT-d spec 3.14: Untranslated requests and translation
>>> -     * requests that result in an address in the interrupt range will be
>>> -     * blocked with condition code LGN.4 or SGN.8.
>>> -     */
>>> -    if ((xlat > VTD_INTERRUPT_ADDR_LAST ||
>>> -         xlat + size - 1 < VTD_INTERRUPT_ADDR_FIRST)) {
>>> -        return 0;
>>> -    } else {
>>> -        error_report_once("%s: xlat address is in interrupt range "
>>> -                          "(iova=0x%" PRIx64 ", level=0x%" PRIx32 ", "
>>> -                          "slpte=0x%" PRIx64 ", write=%d, "
>>> -                          "xlat=0x%" PRIx64 ", size=0x%" PRIx64 ", "
>>> -                          "pasid=0x%" PRIx32 ")",
>>> -                          __func__, iova, level, slpte, is_write,
>>> -                          xlat, size, pasid);
>>> -        return s->scalable_mode ? -VTD_FR_SM_INTERRUPT_ADDR :
>>> -                                  -VTD_FR_INTERRUPT_ADDR;
>>> -    }
>>> +    return 0;
>>>    }
>>>
>>>    typedef int (*vtd_page_walk_hook)(const IOMMUTLBEvent *event, void
>> *private);
>>> @@ -2064,6 +2042,7 @@ static bool
>> vtd_do_iommu_translate(VTDAddressSpace *vtd_as, PCIBus *bus,
>>>        uint8_t access_flags;
>>>        bool rid2pasid = (pasid == PCI_NO_PASID) && s->root_scalable;
>>>        VTDIOTLBEntry *iotlb_entry;
>>> +    uint64_t xlat, size;
>>>
>>>        /*
>>>         * We have standalone memory region for interrupt addresses, we
>>> @@ -2173,6 +2152,29 @@ static bool
>> vtd_do_iommu_translate(VTDAddressSpace *vtd_as, PCIBus *bus,
>>>            ret_fr = vtd_iova_to_slpte(s, &ce, addr, is_write, &pte, &level,
>>>                                       &reads, &writes, s->aw_bits, pasid);
>>>        }
>>> +    if (!ret_fr) {
>>> +        xlat = vtd_get_pte_addr(pte, s->aw_bits);
>>> +        size = ~vtd_pt_level_page_mask(level) + 1;
>>> +
>>> +        /*
>>> +         * Per VT-d spec 4.1 section 3.15: Untranslated requests and translation
>>> +         * requests that result in an address in the interrupt range will be
>>> +         * blocked with condition code LGN.4 or SGN.8.
>>> +         */
>>> +        if ((xlat <= VTD_INTERRUPT_ADDR_LAST &&
>>> +             xlat + size - 1 >= VTD_INTERRUPT_ADDR_FIRST)) {
>>> +            error_report_once("%s: xlat address is in interrupt range "
>>> +                              "(iova=0x%" PRIx64 ", level=0x%" PRIx32 ", "
>>> +                              "pte=0x%" PRIx64 ", write=%d, "
>>> +                              "xlat=0x%" PRIx64 ", size=0x%" PRIx64 ", "
>>> +                              "pasid=0x%" PRIx32 ")",
>>> +                              __func__, addr, level, pte, is_write,
>>> +                              xlat, size, pasid);
>> Hi Zhenzhong,
>>
>> Shouldn't we add the pgtt value to this trace as it can now be generated
>> by both FL and SL?
> Hi Clement,
>
> We don't always have a pgtt value to dump, e.g., when vIOMMU is in legacy mode.
> Meanwhile we have other way to get pgtt if there is, e.g., from qemu cmdline.
> Pgtt is also unrelated to the error itself, so I'd like to skip pgtt dump to be a bit simple.

Hi,
pgtt is initialized just above and is set to SLT when the vIOMMU is in 
legacy mode.
But it's fine, we can keep the patch as is!
Thanks

Reviewed-by: Clément Mathieu--Drif<clement.mathieu--drif@eviden.com>



>
> Thanks
> Zhenzhong
>

  reply	other threads:[~2024-11-14  6:05 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-11  8:34 [PATCH v5 00/20] intel_iommu: Enable stage-1 translation for emulated device Zhenzhong Duan
2024-11-11  8:34 ` [PATCH v5 01/20] intel_iommu: Use the latest fault reasons defined by spec Zhenzhong Duan
2024-11-11  8:34 ` [PATCH v5 02/20] intel_iommu: Make pasid entry type check accurate Zhenzhong Duan
2024-11-11  8:34 ` [PATCH v5 03/20] intel_iommu: Add a placeholder variable for scalable modern mode Zhenzhong Duan
2024-11-11  8:34 ` [PATCH v5 04/20] intel_iommu: Flush stage-2 cache in PASID-selective PASID-based iotlb invalidation Zhenzhong Duan
2024-11-11  8:34 ` [PATCH v5 05/20] intel_iommu: Rename slpte to pte Zhenzhong Duan
2024-11-11  8:34 ` [PATCH v5 06/20] intel_iommu: Implement stage-1 translation Zhenzhong Duan
2024-11-11  8:34 ` [PATCH v5 07/20] intel_iommu: Check if the input address is canonical Zhenzhong Duan
2024-11-11  8:34 ` [PATCH v5 08/20] intel_iommu: Check stage-1 translation result with interrupt range Zhenzhong Duan
2024-11-13  6:55   ` CLEMENT MATHIEU--DRIF
2024-11-13  8:49     ` Duan, Zhenzhong
2024-11-14  6:04       ` CLEMENT MATHIEU--DRIF [this message]
2024-12-04  2:11   ` Jason Wang
2024-11-11  8:34 ` [PATCH v5 09/20] intel_iommu: Set accessed and dirty bits during stage-1 translation Zhenzhong Duan
2024-11-11  8:34 ` [PATCH v5 10/20] intel_iommu: Flush stage-1 cache in iotlb invalidation Zhenzhong Duan
2024-11-11  8:34 ` [PATCH v5 11/20] intel_iommu: Process PASID-based " Zhenzhong Duan
2024-11-11  8:34 ` [PATCH v5 12/20] intel_iommu: Add an internal API to find an address space with PASID Zhenzhong Duan
2024-11-11  8:34 ` [PATCH v5 13/20] intel_iommu: Add support for PASID-based device IOTLB invalidation Zhenzhong Duan
2024-12-04  3:27   ` Jason Wang
2024-11-11  8:34 ` [PATCH v5 14/20] intel_iommu: piotlb invalidation should notify unmap Zhenzhong Duan
2024-11-11  8:34 ` [PATCH v5 15/20] tests/acpi: q35: allow DMAR acpi table changes Zhenzhong Duan
2024-11-20  6:09   ` CLEMENT MATHIEU--DRIF
2024-12-04  3:27   ` Jason Wang
2024-11-11  8:34 ` [PATCH v5 16/20] intel_iommu: Set default aw_bits to 48 starting from QEMU 9.2 Zhenzhong Duan
2024-12-04  3:28   ` Jason Wang
2024-11-11  8:34 ` [PATCH v5 17/20] tests/acpi: q35: Update host address width in DMAR Zhenzhong Duan
2024-11-13  7:16   ` CLEMENT MATHIEU--DRIF
2024-11-13  8:50     ` Duan, Zhenzhong
2024-11-11  8:34 ` [PATCH v5 18/20] intel_iommu: Introduce a property x-flts for scalable modern mode Zhenzhong Duan
2024-11-19  6:54   ` CLEMENT MATHIEU--DRIF
2024-11-19  7:28     ` Duan, Zhenzhong
2024-11-19  8:59       ` CLEMENT MATHIEU--DRIF
2024-11-19  9:25         ` Duan, Zhenzhong
2024-11-20  6:11           ` CLEMENT MATHIEU--DRIF
2024-12-04  3:34   ` Jason Wang
2024-12-04  6:14     ` CLEMENT MATHIEU--DRIF
2024-12-09  3:13       ` Jason Wang
2024-12-09  6:14         ` CLEMENT MATHIEU--DRIF
2024-12-09  6:24           ` Jason Wang
2024-12-09  6:42             ` CLEMENT MATHIEU--DRIF
2024-12-11  2:22               ` Duan, Zhenzhong
2024-12-11  3:03                 ` Jason Wang
2024-12-11  6:08                   ` CLEMENT MATHIEU--DRIF
2024-11-11  8:34 ` [PATCH v5 19/20] intel_iommu: Introduce a property to control FS1GP cap bit setting Zhenzhong Duan
2024-11-11  8:34 ` [PATCH v5 20/20] tests/qtest: Add intel-iommu test Zhenzhong Duan
2024-12-03  9:00 ` [PATCH v5 00/20] intel_iommu: Enable stage-1 translation for emulated device Duan, Zhenzhong

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=0a18e998-fa9c-47d7-a7dd-20b918c3df8c@eviden.com \
    --to=clement.mathieu--drif@eviden.com \
    --cc=alex.williamson@redhat.com \
    --cc=chao.p.peng@intel.com \
    --cc=clg@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=eric.auger@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=jgg@nvidia.com \
    --cc=joao.m.martins@oracle.com \
    --cc=kevin.tian@intel.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mst@redhat.com \
    --cc=nicolinc@nvidia.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=yi.l.liu@intel.com \
    --cc=zhenzhong.duan@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).