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

Re: [PATCH 2/2] xen/dm: arm: Introduce inject_msi2 DM op


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Mykyta Poturai <Mykyta_Poturai@xxxxxxxx>
  • Date: Wed, 19 Mar 2025 12:05:47 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=X8huW5gfE0V5JDPHDA/R47hO7EKofd8rQnK3l4TpP+A=; b=JqsJfzHmMCg0VmGNIx5pNaM1dNU0yApoXZgBKjwU1LgwE7JwX4m5+F2jfV3AwbtV+P4IsR9tlbNAocuY44+TAXF3LnS3lr0fK6XYSUvdj/pzbRyJ1tW3eHBpzevMhnxw9gqBCUWaIalyBacjCPYH8p2ilYM+UiyV0CuX+4ib97Cb0HE7tQLe+VOnlB0Dai6v+vjIIhzWEysP8GW9KygvvJPDe6tXK6qvC+4Hda1uPlCaaCN27QwsFA6DftogRlCQrJ5aCYvJNdaxbQ/RT6GQ4O0goFWzujdbgrm1qdMn2fG2f0t04uhT1fka0l9k8wJ1EAaU/spO4Q8/R2WEFmT4ug==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=l8WBDxuX50x8zoQ0SxDE7RBvOaif0zg/wtVDTyOWZJyLn2+jwt63REYvu1Sc/0WOC2POgVok88SDGs3Dk3W8pqILsrZIBB1wdywk8R3/PD9LJqApxFNV4js6a9gJ/Nruh1JOf5ZAFTpTfJM6OLuiv48/nChoi3X2CU6MjAcmIJu12yX8SWDSlU1Brl1dPUFNj6lWSPuVBx4O8ZYs6W2vceTNTh9c6r8DmkLiiW7nyL+rwm9Ido8rhH2D7Yi8dXs7MSmC0A48xrk3JpxJWaPNlLDufzIfMkUzzsrajz2OUrJ7USOnJ5I9IEwoJYzDVkSnBNvafZGZU7SFr4aBhbCxPA==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com;
  • Cc: Juergen Gross <jgross@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>
  • Delivery-date: Wed, 19 Mar 2025 12:06:01 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHaRWELmXttIq3ydUeKyfZPAZRMh7DaobyAgqCezQCAABD4AIAAN9aAgAAPTYCAAWsXAA==
  • Thread-topic: [PATCH 2/2] xen/dm: arm: Introduce inject_msi2 DM op

On 18.03.25 16:26, Jan Beulich wrote:
> On 18.03.2025 14:31, Mykyta Poturai wrote:
>> On 18.03.25 12:11, Jan Beulich wrote:
>>> On 18.03.2025 10:10, Mykyta Poturai wrote:
>>>> On 15.01.24 11:35, Jan Beulich wrote:
>>>>> On 14.01.2024 11:01, Mykyta Poturai wrote:
>>>>>> --- a/xen/include/public/hvm/dm_op.h
>>>>>> +++ b/xen/include/public/hvm/dm_op.h
>>>>>> @@ -444,6 +444,17 @@ struct xen_dm_op_nr_vcpus {
>>>>>>     };
>>>>>>     typedef struct xen_dm_op_nr_vcpus xen_dm_op_nr_vcpus_t;
>>>>>>
>>>>>> +#define XEN_DMOP_inject_msi2 21
>>>>>> +#define XEN_DMOP_MSI_SOURCE_ID_VALID (1u << 0)
>>>>>> +
>>>>>> +struct xen_dm_op_inject_msi2 {
>>>>>> +    uint64_aligned_t addr;
>>>>>> +    uint32_t data;
>>>>>> +    uint32_t source_id; /* PCI SBDF */
>>>>>
>>>>> Since the comment says SBDF (not BDF), how are multiple segments handled
>>>>> here? At least on x86 (VT-d and V-i) source IDs are only 16 bits iirc,
>>>>> and are local to the respective segment. It would feel wrong to use a
>>>>> 32-bit quantity there; IOW I'd rather see this as being two 16-bit fields
>>>>> (segment and source_id).
>>>>
>>>> I'm planning on resuming this series in the near future and want to
>>>> clarify the DM op interface.
>>>>
>>>> Wouldn't it be better to keep things consistent and use
>>>> XEN_DMOP_PCI_SBDF as it's done in xen_dm_op_ioreq_server_range? Also
>>>> with this, the value can be easily casted to pci_sbdf_t later and split
>>>> to segment and BDF if needed.
>>>
>>> The essence of my earlier comment is: Naming, contents, and comments need
>>> to be in sync.
>>>
>>> I question though that "casting to pci_sbdf_t" is technically possible.
>>> Nor am I convinced that it would be desirable to do so if it was possible
>>> (or if "casting" was intended to mean something else than what this is in
>>> C). See my recent comments on some of Andrii's patches [1][2].
>>>
>>> Jan
>>>
>>> [1] https://lists.xen.org/archives/html/xen-devel/2025-03/msg01294.html
>>> [2] https://lists.xen.org/archives/html/xen-devel/2025-03/msg01301.html
>>
>> Would something like this be okay then?
>>
>> struct xen_dm_op_inject_msi2 {
>>       /* IN - MSI data (lower 32 bits) */
>>       uint32_t data;
>>       /* IN - ITS devid of the device triggering the interrupt */
>>       uint32_t source_id;
>>       uint32_t flags;
>>       uint32_t pad;
>>       /* IN - MSI address */
>>       uint64_aligned_t addr;
>> };
>>
>> Added padding and explained source_id purpose better.
>
> I fear the comment is far from making clear what layout source_id is to
> have, hence also leaving open whether a segment number is included there.
> Of course the issue here may be that I have no clue what "ITS devid"
> means or implies. What is clear is that "ITS devid" is meaningless on
> x86, for example.

ITS devid is implementation defined. Its size is also implementation
defined but up to 32 bits.

Quotes from Arm Base System Architecture[1]:
 > The system designer assigns a requester a unique StreamID to device
traffic input to the SMMU.
 > If a requester is a bridge from a different interconnect with an
originator ID, like a PCIe RequesterID, and devices on that interconnect
might need to send MSIs, the originator ID is used to generate a
DeviceID. The function to generate the DeviceID should be an identity or
a simple offset.

On the Xen's side it is used as an offset into the ITS translation
tables and is sourced from msi-map nodes in the device tree.

Practically for PCI the requester ID is usually the SBDF. Where the
segment is used to find the host bridge node that contains the msi-map
node with defined offsets but it is also included as part of an id.
That's why it was originally called SBDF in the comment. I don't know if
there is a better way to describe what it is concisely in the comments.

> I'm further puzzled by "(lower 32 bits)" - isn't the data written to
> trigger an MSI always a 32-bit quantity?
>
> Jan

Hmm, it actually is, I copied this line from xen_dm_op_inject_msi, not
sure why it is specified like that there. But I'll remove this part.

[1]: https://developer.arm.com/documentation/den0094/latest/

--
Mykyta

 


Rackspace

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