|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 07/13] iommu: Make decision about needing IOMMU for hardware domains in advance
Hi, Roger
On Thu, Jan 18, 2018 at 2:09 PM, Roger Pau Monné <roger.pau@xxxxxxxxxx> wrote:
> Sorry for the delay in the reply.
No problem.
>
> On Tue, Jul 25, 2017 at 08:26:49PM +0300, Oleksandr Tyshchenko wrote:
>> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>
>>
>> The hardware domains require IOMMU to be used in the most cases and
>> a decision to use it is made at hardware domain construction time.
>> But, it is not the best moment for the non-shared IOMMUs due to
>> the necessity of retrieving all mapping which could happen in a period
>> of time between IOMMU per-domain initialization and this moment.
>>
>> So, make a decision about needing IOMMU a bit earlier, in
>> iommu_domain_init().
>> Having "d->need_iommu" flag set at the early stage we won't skip
>> any IOMMU mapping updates. And as the result the existing in
>> iommu_hwdom_init()
>> code that goes through the list of the pages and tries to retrieve mapping
>> for non-shared IOMMUs won't be needed anymore and can be just dropped.
>
> If I understand this correctly the approach looks fine to me, and it's
> inline with what I'm doing for PVHv2 Dom0. Ie: the IOMMU is
> initialized _before_ populating the memory map, so that when pages are
> added to the p2m they are also added to the IOMMU page tables if
> required.
>
> This avoids having to iterate over the list of domain pages in
> iommu_hwdom_init, because it's empty at the point iommu_hwdom_init is
> called for a PVHv2 Dom0.
>
>> Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>
>> CC: Jan Beulich <jbeulich@xxxxxxxx>
>> CC: Julien Grall <julien.grall@xxxxxxx>
>>
>> ---
>> Changes in v1:
>> -
>>
>> Changes in v2:
>> - This is the result of reworking old patch:
>> [PATCH v1 08/10] iommu: Split iommu_hwdom_init() into arch specific
>> parts
>> ---
>> xen/drivers/passthrough/iommu.c | 44
>> ++++++++++-------------------------------
>> 1 file changed, 10 insertions(+), 34 deletions(-)
>>
>> diff --git a/xen/drivers/passthrough/iommu.c
>> b/xen/drivers/passthrough/iommu.c
>> index 19c87d1..f5e5b7e 100644
>> --- a/xen/drivers/passthrough/iommu.c
>> +++ b/xen/drivers/passthrough/iommu.c
>> @@ -52,7 +52,7 @@ custom_param("iommu", parse_iommu_param);
>> bool_t __initdata iommu_enable = 1;
>> bool_t __read_mostly iommu_enabled;
>> bool_t __read_mostly force_iommu;
>> -bool_t __hwdom_initdata iommu_dom0_strict;
>> +bool_t __read_mostly iommu_dom0_strict;
>> bool_t __read_mostly iommu_verbose;
>> bool_t __read_mostly iommu_workaround_bios_bug;
>> bool_t __read_mostly iommu_igfx = 1;
>> @@ -141,6 +141,15 @@ int iommu_domain_init(struct domain *d, bool use_iommu)
>> if ( !iommu_enabled )
>> return 0;
>>
>> + if ( is_hardware_domain(d) )
>> + {
>> + if ( (paging_mode_translate(d) && !iommu_passthrough) ||
>> + iommu_dom0_strict )
>> + use_iommu = 1;
>> + else
>> + use_iommu = 0;
>> + }
>> +
>> hd->platform_ops = iommu_get_ops();
>> ret = hd->platform_ops->init(d, use_iommu);
>> if ( ret )
>> @@ -161,8 +170,6 @@ static void __hwdom_init check_hwdom_reqs(struct domain
>> *d)
>> if ( iommu_passthrough )
>> panic("Dom0 uses paging translated mode, dom0-passthrough must not
>> be "
>> "enabled\n");
>> -
>> - iommu_dom0_strict = 1;
>> }
>>
>> void __hwdom_init iommu_hwdom_init(struct domain *d)
>> @@ -175,37 +182,6 @@ void __hwdom_init iommu_hwdom_init(struct domain *d)
>> return;
>>
>> register_keyhandler('o', &iommu_dump_p2m_table, "dump iommu p2m table",
>> 0);
>> - d->need_iommu = !!iommu_dom0_strict;
>
> Where is this set now? You seem to remove setting need_iommu here, but
> I don't see it being set anywhere else. Am I missing something?
d->need_iommu is set in iommu_domain_init(). This was done by previous
patch [1].
For your convenience you can see how the whole function looks like [2].
[1]
[PATCH v2 06/13] iommu: Add extra use_iommu argument to iommu_domain_init()
https://marc.info/?l=xen-devel&m=150100368126600&w=2
[2]
https://github.com/otyshchenko1/xen/blob/non_shared_iommu_v2/xen/drivers/passthrough/iommu.c#L158
>
> Thanks, Roger.
--
Regards,
Oleksandr Tyshchenko
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |