|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v6 1/5] xen/domctl: extend XEN_DOMCTL_assign_device to handle not only iommu
On 13.01.2026 16:50, Oleksii Moisieiev wrote:
>
>
> On 12/01/2026 18:13, Jan Beulich wrote:
>> On 12.01.2026 17:10, Oleksii Moisieiev wrote:
>>> On 12/01/2026 17:56, Jan Beulich wrote:
>>>> On 12.01.2026 16:54, Oleksii Moisieiev wrote:
>>>>> On 12/01/2026 17:40, Jan Beulich wrote:
>>>>>> On 12.01.2026 16:16, Oleksii Moisieiev wrote:
>>>>>>> On 06/11/2025 12:09, Jan Beulich wrote:
>>>>>>>> On 01.11.2025 12:56, Oleksii Moisieiev wrote:
>>>>>>>>> @@ -827,7 +828,32 @@ long
>>>>>>>>> do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
>>>>>>>>> case XEN_DOMCTL_test_assign_device:
>>>>>>>>> case XEN_DOMCTL_deassign_device:
>>>>>>>>> case XEN_DOMCTL_get_device_group:
>>>>>>>>> + int ret1;
>>>>>>>>> +
>>>>>>>>> + /*
>>>>>>>>> + * Add chained handling of assigned DT devices to support
>>>>>>>>> + * access-controller functionality through SCI framework, so
>>>>>>>>> + * DT device assign request can be passed to FW for
>>>>>>>>> processing and
>>>>>>>>> + * enabling VM access to requested device.
>>>>>>>>> + * The access-controller DT device processing is chained
>>>>>>>>> before IOMMU
>>>>>>>>> + * processing preserving return code and expected to be
>>>>>>>>> executed for
>>>>>>>>> + * any DT device regardless if DT device is protected by
>>>>>>>>> IOMMU or
>>>>>>>>> + * not (or IOMMU is disabled).
>>>>>>>>> + */
>>>>>>>>> + ret1 = sci_do_domctl(op, d, u_domctl);
>>>>>>>> Why would this not be the initializer of the new variable? (I also
>>>>>>>> don't think
>>>>>>>> that we've decided to permit variable declarations at other than the
>>>>>>>> top of
>>>>>>>> scopes or within e.g. a for() loop control construct.)
>>>>>>>>
>>>>>>> +
>>>>>>>>> ret = iommu_do_domctl(op, d, u_domctl);
>>>>>>>>> + if ( ret < 0 )
>>>>>>>>> + return ret;
>>>>>>>> Why would you invoke both in all cases? If sci_do_domctl() handled the
>>>>>>>> request,
>>>>>>>> there isn't any point in also invoking iommu_do_domctl(), is there? Or
>>>>>>>> else is
>>>>>>>> there maybe some crucial aspect missing from the description (or not
>>>>>>>> explicit
>>>>>>>> enough there for a non-SCI person like me)?
>>>>>>>>
>>>>>>>> Also this doesn't look to fit the description saying "The SCI
>>>>>>>> access-controller
>>>>>>>> DT device processing is chained after IOMMU processing ..."
>>>>>>>>
>>>>>>> We call both because SCI and IOMMU cover different concerns and a DT
>>>>>>> device may need
>>>>>>> both: SCI for FW-mediated access control (power/clocks/reset) and IOMMU
>>>>>>> for DMA isolation.
>>>>>>> SCI returning success does not mean the IOMMU work is redundant.
>>>>>> Can the comment then please be updated to properly call out this dual
>>>>>> requirement?
>>>>> Yes, for sure.
>>>>>>> - sci_do_domctl() returns -ENXIO when it has nothing to do (non-DT, no
>>>>>>> mediator, mediator lacks assign hook).
>>>>>>> That is the “not handled by SCI” sentinel; in that case the code
>>>>>>> proceeds to IOMMU normally.
>>>>>>> - When sci_do_domctl() succeeds (0), the device may still require IOMMU
>>>>>>> programming
>>>>>>> (e.g., DT device has an iommus property). Skipping iommu_do_domctl()
>>>>>>> would leave DMA isolation unprogrammed.
>>>>>>>
>>>>>>> The final if (ret1 != -ENXIO) ret = ret1; ensures that if both paths ran
>>>>>>> and IOMMU succeeded,
>>>>>>> an SCI failure is still reported to the caller.
>>>>>>>
>>>>>>> Device-tree examples to illustrate the dual roles:
>>>>>>> 1. Access-controlled DT device (not necessarily IOMMU-protected):
>>>>>>>
>>>>>>> i2c3: i2c@e6508000 {
>>>>>>> compatible = "renesas,rcar-gen3-i2c";
>>>>>>> reg = <0 0xe6508000 0 0x40>;
>>>>>>> power-domains = <&scmi_pd 5>; // FW-managed power domain
>>>>>>> clocks = <&scmi_clk 12>;
>>>>>>> clock-names = "fck";
>>>>>>> access-controllers = <&scmi_xen 0>;
>>>>>>> // no iommus property: SCI may need to authorize/power this
>>>>>>> device;
>>>>>>> IOMMU has nothing to do
>>>>>>> };
>>>>>>>
>>>>>>> 2. IOMMU-protected DT device that still may need SCI mediation:
>>>>>>> vpu: video@e6ef0000 {
>>>>>>> compatible = "renesas,rcar-vpu";
>>>>>>> reg = <0 0xe6ef0000 0 0x10000>;
>>>>>>> iommus = <&ipmmu 0 0>; // needs IOMMU mapping for
>>>>>>> DMA
>>>>>>> isolation
>>>>>>> power-domains = <&scmi_pd 7>; // FW-managed
>>>>>>> power/clock/reset
>>>>>>> clocks = <&scmi_clk 34>;
>>>>>>> access-controllers = <&scmi_xen 0>;
>>>>>>> clock-names = "vpu";
>>>>>>> };
>>>>>>>>> --- a/xen/drivers/passthrough/device_tree.c
>>>>>>>>> +++ b/xen/drivers/passthrough/device_tree.c
>>>>>>>>> @@ -379,6 +379,12 @@ int iommu_do_dt_domctl(struct xen_domctl
>>>>>>>>> *domctl, struct domain *d,
>>>>>>>>> break;
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> + if ( !dt_device_is_protected(dev) )
>>>>>>>>> + {
>>>>>>>>> + ret = 0;
>>>>>>>>> + break;
>>>>>>>>> + }
>>>>>>>>> +
>>>>>>>>> ret = iommu_assign_dt_device(d, dev);
>>>>>>>>>
>>>>>>>>> if ( ret )
>>>>>>>> How are DT and PCI different in this regard?
>>>>>>> Please find examples above.
>>>>>> Sorry, but I can't spot anything PCI-ish in the examples above. Then
>>>>>> again I
>>>>>> also no longer recall why I compared with PCI here. Oh, perhaps because
>>>>>> the
>>>>>> PCI side isn't being modified at all.
>>>>>>
>>>>> Correct, pci code wasn't touched by these changes.
>>>> Yet my question boils down to "why", not "whether".
>>>>
>>> I have reviewed the previous versions of the patch serie and could not
>>> find any questions related to PCI prior to this series. Therefore, "How
>>> are DT and PCI different in this regard?" appears to be the first
>>> question concerning PCI.
>> Quite possible, yet does that somehow eliminate the need to address it? I'm
>> trying to understand why the respective PCI code isn't being touched.
>>
> XEN_DOMCTL_assign_device dispatch: we now chain sci_do_domctl first,
> then iommu_do_domctl.
> iommu_do_domctl first tries iommu_do_pci_domctl (when CONFIG_HAS_PCI)
> and falls back to iommu_do_dt_domctl only if PCI returns -ENODEV.
> The new dt_device_is_protected() bypass in iommu_do_dt_domctl only
> applies to DT-described devices; SCI parameters are carried via DT nodes.
> PCI devices handled by iommu_do_pci_domctl do not carry DT/SCI metadata
> in this path, so there is no notion of “SCI parameters on a
> non-IOMMU-protected PCI device” for it to interpret or to skip. The PCI
> path should continue to report errors if assignment cannot be performed
> by the IOMMU layer.
> So we should leave iommu_do_pci_domctl unchanged; the SCI/DT-specific
> relaxations belong only in the DT path.
> Also SCI handling only exists when DT is present.
Can an abridged variant of this please be added to the description?
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |