From: Eric Auger <eric.auger@redhat.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>,
"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>,
"clement.mathieu--drif@eviden.com"
<clement.mathieu--drif@eviden.com>,
"Tian, Kevin" <kevin.tian@intel.com>,
"Liu, Yi L" <yi.l.liu@intel.com>,
"Peng, Chao P" <chao.p.peng@intel.com>,
Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
Subject: Re: [PATCH v6 09/19] vfio/iommufd: Implement HostIOMMUDeviceClass::realize() handler
Date: Tue, 4 Jun 2024 10:08:46 +0200 [thread overview]
Message-ID: <270f9f43-fa47-4b42-92b0-0f717861dbc1@redhat.com> (raw)
In-Reply-To: <SJ0PR11MB67449D7B5FFAB6104F050D9092F82@SJ0PR11MB6744.namprd11.prod.outlook.com>
Hi,
On 6/4/24 09:51, Duan, Zhenzhong wrote:
>
>> -----Original Message-----
>> From: Eric Auger <eric.auger@redhat.com>
>> Subject: Re: [PATCH v6 09/19] vfio/iommufd: Implement
>> HostIOMMUDeviceClass::realize() handler
>>
>>
>>
>> On 6/4/24 04:58, Duan, Zhenzhong wrote:
>>>> -----Original Message-----
>>>> From: Eric Auger <eric.auger@redhat.com>
>>>> Subject: Re: [PATCH v6 09/19] vfio/iommufd: Implement
>>>> HostIOMMUDeviceClass::realize() handler
>>>>
>>>> Hi Zhenzhong,
>>>>
>>>> On 6/3/24 08:10, Zhenzhong Duan wrote:
>>>>> It calls iommufd_backend_get_device_info() to get host IOMMU
>>>>> related information and translate it into HostIOMMUDeviceCaps
>>>>> for query with .get_cap().
>>>>>
>>>>> Introduce macro VTD_MGAW_FROM_CAP to get MGAW which equals
>> to
>>>>> (aw_bits - 1).
>>>>>
>>>>> Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
>>>>> ---
>>>>> include/hw/i386/intel_iommu.h | 1 +
>>>>> hw/vfio/iommufd.c | 37
>>>> +++++++++++++++++++++++++++++++++++
>>>>> 2 files changed, 38 insertions(+)
>>>>>
>>>>> diff --git a/include/hw/i386/intel_iommu.h
>>>> b/include/hw/i386/intel_iommu.h
>>>>> index 7fa0a695c8..7d694b0813 100644
>>>>> --- a/include/hw/i386/intel_iommu.h
>>>>> +++ b/include/hw/i386/intel_iommu.h
>>>>> @@ -47,6 +47,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(IntelIOMMUState,
>>>> INTEL_IOMMU_DEVICE)
>>>>> #define VTD_HOST_AW_48BIT 48
>>>>> #define VTD_HOST_ADDRESS_WIDTH VTD_HOST_AW_39BIT
>>>>> #define VTD_HAW_MASK(aw) ((1ULL << (aw)) - 1)
>>>>> +#define VTD_MGAW_FROM_CAP(cap) ((cap >> 16) & 0x3fULL)
>>>>>
>>>>> #define DMAR_REPORT_F_INTR (1)
>>>>>
>>>>> diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c
>>>>> index e4a507d55c..9d2e95e20e 100644
>>>>> --- a/hw/vfio/iommufd.c
>>>>> +++ b/hw/vfio/iommufd.c
>>>>> @@ -25,6 +25,7 @@
>>>>> #include "qemu/cutils.h"
>>>>> #include "qemu/chardev_open.h"
>>>>> #include "pci.h"
>>>>> +#include "hw/i386/intel_iommu_internal.h"
>>>>>
>>>>> static int iommufd_cdev_map(const VFIOContainerBase *bcontainer,
>>>> hwaddr iova,
>>>>> ram_addr_t size, void *vaddr, bool readonly)
>>>>> @@ -619,6 +620,41 @@ static void
>>>> vfio_iommu_iommufd_class_init(ObjectClass *klass, void *data)
>>>>> vioc->pci_hot_reset = iommufd_cdev_pci_hot_reset;
>>>>> };
>>>>>
>>>>> +static bool hiod_iommufd_vfio_realize(HostIOMMUDevice *hiod, void
>>>> *opaque,
>>>>> + Error **errp)
>>>>> +{
>>>>> + VFIODevice *vdev = opaque;
>>>>> + HostIOMMUDeviceCaps *caps = &hiod->caps;
>>>>> + enum iommu_hw_info_type type;
>>>>> + union {
>>>>> + struct iommu_hw_info_vtd vtd;
>>>>> + } data;
>>>>> +
>>>>> + if (!iommufd_backend_get_device_info(vdev->iommufd, vdev-
>>> devid,
>>>>> + &type, &data, sizeof(data), errp)) {
>>>>> + return false;
>>>>> + }
>>>>> +
>>>>> + caps->type = type;
>>>>> +
>>>>> + switch (type) {
>>>>> + case IOMMU_HW_INFO_TYPE_INTEL_VTD:
>>>>> + caps->aw_bits = VTD_MGAW_FROM_CAP(data.vtd.cap_reg) + 1;
>>>> Please can you remind me of why you can't reuse the iova_ranges
>> method.
>>>> isn't it generic enough?
>>> Yes, iova_ranges method is only for iova_ranges, we want to make
>>> HostIOMMUDevice.get_cap() a common interface.
>>>
>>> When we want to pass iova_ranges, we can add
>> HOST_IOMMU_DEVICE_CAP_IOVA_RANGES
>>> and HostIOMMUDevice.iova_ranges.
>> I rather meant that iova_ranges is part of VFIOContainerBase and you
>> could reuse the technics used in hiod_legacy_vfio_realize, relying on a
>> common helper instead of using
>>
>> VTD_MGAW_FROM_CAP(data.vtd.cap_reg). Doesn't it work?
> Get your point.
> Yes, It does work and should have same result.
> That means iommufd backend support two ways to get aw_bits.
>
> Only reason is I feel VTD_MGAW_FROM_CAP(data.vtd.cap_reg) is a bit simpler
> and there are other bits picked in nesting series, see:
>
> case IOMMU_HW_INFO_TYPE_INTEL_VTD:
> caps->aw_bits = VTD_MGAW_FROM_CAP(data.vtd.cap_reg) + 1;
> caps->nesting = !!(data.vtd.ecap_reg & VTD_ECAP_NEST);
> caps->fs1gp = !!(data.vtd.cap_reg & VTD_CAP_FS1GP);
> caps->errata = data.vtd.flags & IOMMU_HW_INFO_VTD_ERRATA_772415_SPR17;
>
> I'm fine to use iova_ranges to calculate aw_bits for iommufd backend if you prefer that.
Yes I think I would prefer because this technics also work for other
iommus and not only VTD. It also can rely on common code between legacy
and iommufd. The nesting series can bring the rest later
Eric
>
> Thanks
> Zhenzhong
next prev parent reply other threads:[~2024-06-04 8:09 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-03 6:10 [PATCH v6 00/19] Add a host IOMMU device abstraction to check with vIOMMU Zhenzhong Duan
2024-06-03 6:10 ` [PATCH v6 01/19] backends: Introduce HostIOMMUDevice abstract Zhenzhong Duan
2024-06-03 12:16 ` Cédric Le Goater
2024-06-04 3:10 ` Duan, Zhenzhong
2024-06-03 12:46 ` Eric Auger
2024-06-04 3:41 ` Duan, Zhenzhong
2024-06-03 6:10 ` [PATCH v6 02/19] vfio/container: Introduce TYPE_HOST_IOMMU_DEVICE_LEGACY_VFIO device Zhenzhong Duan
2024-06-03 6:10 ` [PATCH v6 03/19] backends/iommufd: Introduce abstract TYPE_HOST_IOMMU_DEVICE_IOMMUFD device Zhenzhong Duan
2024-06-03 12:50 ` Eric Auger
2024-06-04 3:43 ` Duan, Zhenzhong
2024-06-03 6:10 ` [PATCH v6 04/19] vfio/iommufd: Introduce TYPE_HOST_IOMMU_DEVICE_IOMMUFD_VFIO device Zhenzhong Duan
2024-06-03 6:10 ` [PATCH v6 05/19] backends/host_iommu_device: Introduce HostIOMMUDeviceCaps Zhenzhong Duan
2024-06-03 12:40 ` Cédric Le Goater
2024-06-03 12:51 ` Eric Auger
2024-06-03 6:10 ` [PATCH v6 06/19] range: Introduce range_get_last_bit() Zhenzhong Duan
2024-06-03 12:57 ` Eric Auger
2024-06-03 6:10 ` [PATCH v6 07/19] vfio/container: Implement HostIOMMUDeviceClass::realize() handler Zhenzhong Duan
2024-06-03 11:23 ` Eric Auger
2024-06-04 2:45 ` Duan, Zhenzhong
2024-06-04 7:45 ` Eric Auger
2024-06-04 7:59 ` Duan, Zhenzhong
2024-06-03 6:10 ` [PATCH v6 08/19] backends/iommufd: Introduce helper function iommufd_backend_get_device_info() Zhenzhong Duan
2024-06-03 6:10 ` [PATCH v6 09/19] vfio/iommufd: Implement HostIOMMUDeviceClass::realize() handler Zhenzhong Duan
2024-06-03 11:30 ` Eric Auger
2024-06-04 2:58 ` Duan, Zhenzhong
2024-06-04 7:31 ` Eric Auger
2024-06-04 7:51 ` Duan, Zhenzhong
2024-06-04 8:08 ` Eric Auger [this message]
2024-06-04 8:39 ` Duan, Zhenzhong
2024-06-06 9:26 ` Eric Auger
2024-06-06 9:32 ` Eric Auger
2024-06-06 10:19 ` Duan, Zhenzhong
2024-06-03 6:10 ` [PATCH v6 10/19] vfio/container: Implement HostIOMMUDeviceClass::get_cap() handler Zhenzhong Duan
2024-06-03 6:10 ` [PATCH v6 11/19] backends/iommufd: " Zhenzhong Duan
2024-06-03 11:32 ` Eric Auger
2024-06-03 12:35 ` Cédric Le Goater
2024-06-04 3:23 ` Duan, Zhenzhong
2024-06-04 8:10 ` Eric Auger
2024-06-04 8:46 ` Duan, Zhenzhong
2024-06-04 9:37 ` Eric Auger
2024-06-03 6:10 ` [PATCH v6 12/19] vfio: Introduce VFIOIOMMUClass::hiod_typename attribute Zhenzhong Duan
2024-06-03 6:10 ` [PATCH v6 13/19] vfio: Create host IOMMU device instance Zhenzhong Duan
2024-06-03 12:59 ` Eric Auger
2024-06-04 3:47 ` Duan, Zhenzhong
2024-06-03 6:10 ` [PATCH v6 14/19] hw/pci: Introduce helper function pci_device_get_iommu_bus_devfn() Zhenzhong Duan
2024-06-03 13:40 ` Eric Auger
2024-06-03 6:10 ` [PATCH v6 15/19] hw/pci: Introduce pci_device_[set|unset]_iommu_device() Zhenzhong Duan
2024-06-03 13:54 ` Eric Auger
2024-06-03 6:10 ` [PATCH v6 16/19] vfio/pci: Pass HostIOMMUDevice to vIOMMU Zhenzhong Duan
2024-06-03 13:54 ` Eric Auger
2024-06-03 6:10 ` [PATCH v6 17/19] intel_iommu: Extract out vtd_cap_init() to initialize cap/ecap Zhenzhong Duan
2024-06-03 6:10 ` [PATCH v6 18/19] intel_iommu: Implement [set|unset]_iommu_device() callbacks Zhenzhong Duan
2024-06-03 10:12 ` CLEMENT MATHIEU--DRIF
2024-06-03 11:02 ` Duan, Zhenzhong
2024-06-03 12:56 ` Cédric Le Goater
2024-06-04 3:46 ` Duan, Zhenzhong
2024-06-03 14:13 ` Eric Auger
2024-06-04 5:40 ` Duan, Zhenzhong
2024-06-04 8:14 ` Eric Auger
2024-06-04 8:48 ` Duan, Zhenzhong
2024-06-04 9:38 ` Eric Auger
2024-06-03 14:47 ` Eric Auger
2024-06-04 5:46 ` Duan, Zhenzhong
2024-06-04 8:17 ` Eric Auger
2024-06-06 4:04 ` Duan, Zhenzhong
2024-06-03 6:10 ` [PATCH v6 19/19] intel_iommu: Check compatibility with host IOMMU capabilities Zhenzhong Duan
2024-06-03 14:23 ` Eric Auger
2024-06-04 5:46 ` Duan, Zhenzhong
2024-06-03 12:43 ` [PATCH v6 00/19] Add a host IOMMU device abstraction to check with vIOMMU Eric Auger
2024-06-04 3:32 ` 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=270f9f43-fa47-4b42-92b0-0f717861dbc1@redhat.com \
--to=eric.auger@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=chao.p.peng@intel.com \
--cc=clement.mathieu--drif@eviden.com \
--cc=clg@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=peterx@redhat.com \
--cc=qemu-devel@nongnu.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).