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).
> 
Hi Jan,

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.

>> +    uint32_t flags;
>> +};
> 
> Just like in struct xen_dm_op_inject_msi padding wants making explicit,
> and then wants checking for being zero.
> 
> Jan

Will do.

-- 
Mykyta

Reply via email to