[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v4 1/7] xen/arm: Improve readability of check for registered devices


  • To: Julien Grall <julien@xxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>
  • Date: Wed, 7 Jun 2023 09:41:37 -0400
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=xen.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1v1FDPr2GuYUhQsWFjLxq2YKCqwiKSRq0redPbb5Ug4=; b=Cp3UClAPWRzBjRZ+WK9YdzOIQUK73pkEyRMp+vrzfWLkE2DdMwfo1tPSjt39nvCZt9guWvq0HhMktbIs2/r7rmOzl8c98UGss7IPjNcWhJcSkc274dYyFumJ1CKnkY9J7xmyrRSTJRa6clJWfMQ9cWP6GAAerpH4YWHat5txDkmZ7MGsLYtJXgD6rcUceIJKuiBGXNzmNW2p6nYG03fN83Vt4rzRJkCsi+sZMfqH7/XObDuBSmNEs8omSZOi4T2rAPBTjOQC8M2uk4ahOiG8n1Jur2heTWhgaPmm70Ugql2wS19nAx86KT2ZZQ2QoyWnQqOCiGQVqp+igbG4cptZfQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hWY62Z4yE5Ehv4Fa+nAoUrYfw6CHyqAiIc49iFRjkWLSmbkEBD3O4nLLqNT0kp0Gs0Yz2DMKAznpvFa3cR4WsT8WG4Si5qwqqv3s4tmQKg3tOYcRsxGjs/E/oljlzAU5BbZeblYkMPKz52/MPppYSO1dybiTrXueaQEu1rCALva29AEn1chyTdBBXbdmmaJE9EYibkLpNmcCNTLMPeR17hn+9yCUk9KQvdEpf99aqtwH2QnxluilW4SA2Lxade07rKXRr//rhutVYOV7ahV8Cr6Uu/2Rb3ZhEl9ZYAVSgRsv7O0LYG9a2w1CI13sCHvMdrQHSmvk9AC6ENP4Dh5ucg==
  • Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Rahul Singh <rahul.singh@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>
  • Delivery-date: Wed, 07 Jun 2023 13:42:12 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 6/7/23 03:27, Julien Grall wrote:
> Hi Stewart,
> 
> On 07/06/2023 04:02, Stewart Hildebrand wrote:
>> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>
>>
>> Improve readability of check for devices already registered with the SMMU 
>> with
>> legacy mmu-masters DT bindings by using is_protected.
> 
> I am unconvinced with this change because...
> 
>>
>> There are 2 device tree bindings for registering a device with the SMMU:
>> * mmu-masters (legacy, SMMUv1/2 only)
>> * iommus
>>
>> A device tree may include both mmu-masters and iommus properties (although 
>> it is
>> unnecessary to do so). When a device appears in the mmu-masters list,
>> np->is_protected and dev->iommu_fwspec both get set by the SMMUv1/2 driver. 
>> The
>> function iommu_add_dt_device() is subsequently invoked for devices that have 
>> an
>> iommus specification.
>>
>> The check as it was before this patch:
>>
>>    if ( dev_iommu_fwspec_get(dev) )
>>        return 0;
>>
>> and the new check:
>>
>>    if ( dt_device_is_protected(np) )
>>        return 0;
>>
>> are guarding against the same corner case: when a device has both mmu-masters
>> and iommus specifications in the device tree. The is_protected naming is more
>> descriptive.
>>
>> If np->is_protected is not set (i.e. false), but dev->iommu_fwspec is set, 
>> it is
>> an error condition, so return an error in this case.
>>
>> Expand the comment to further clarify the corner case.
>>
>> Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>
>> Signed-off-by: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>
>> ---
>> v3->v4:
>> * new patch: this change was split from ("xen/arm: Move is_protected flag to 
>> struct device")
>> ---
>>   xen/drivers/passthrough/device_tree.c | 11 ++++++++---
>>   1 file changed, 8 insertions(+), 3 deletions(-)
>>
>> diff --git a/xen/drivers/passthrough/device_tree.c 
>> b/xen/drivers/passthrough/device_tree.c
>> index 1c32d7b50cce..d9b63da7260a 100644
>> --- a/xen/drivers/passthrough/device_tree.c
>> +++ b/xen/drivers/passthrough/device_tree.c
>> @@ -141,12 +141,17 @@ int iommu_add_dt_device(struct dt_device_node *np)
>>           return -EINVAL;
>>
>>       /*
>> -     * The device may already have been registered. As there is no harm in
>> -     * it just return success early.
>> +     * Devices that appear in the legacy mmu-masters list may have already 
>> been
>> +     * registered with the SMMU. In case a device has both a mmu-masters 
>> entry
>> +     * and iommus property, there is no need to register it again. In this 
>> case
>> +     * simply return success early.
>>        */
>> -    if ( dev_iommu_fwspec_get(dev) )
>> +    if ( dt_device_is_protected(np) )
> ... we now have two checks and it implies that it would be normal for
> dt_device_is_protected() to be false and ...
> 
>>           return 0;
>>
>> +    if ( dev_iommu_fwspec_get(dev) )
> 
> ... this returning a non-zero value. Is there any other benefits with
> adding the two checks?

No, I can't think of any good rationale for the 2nd check. After splitting this 
change from the other patch ("xen/arm: Move is_protected flag to struct 
device"), I simply wanted to evaluate it on its own.

> If the others agree with the double check, then I think this should gain
> an ASSERT_UNREACHABLE() because AFAIU this is a programming error.

Right, if the 2nd check was justified, there should be an ASSERT_UNREACHABLE(), 
good point. But I don't think the 2nd check is justified.

If the 2nd check is dropped (keeping only the is_protected check), then do you 
think the change is justified?

>> +        return -EEXIST;
>> +
>>       /*
>>        * According to the Documentation/devicetree/bindings/iommu/iommu.txt
>>        * from Linux.
> 
> Cheers,
> 
> -- 
> Julien Grall



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.