On 2024/7/1 15:32, Jan Beulich wrote:
> On 30.06.2024 14:33, Jiqian Chen wrote:
>> --- a/tools/libs/ctrl/xc_physdev.c
>> +++ b/tools/libs/ctrl/xc_physdev.c
>> @@ -111,3 +111,38 @@ int xc_physdev_unmap_pirq(xc_interface *xch,
>> return rc;
>> }
>>
>> +int xc_physdev_gsi_from_pcidev(xc_interface *xch, uint32_t sbdf)
>> +{
>> + int rc = -1;
>> +
>> +#if defined(__linux__)
>> + int fd;
>> + privcmd_gsi_from_pcidev_t dev_gsi = {
>> + .sbdf = sbdf,
>> + .gsi = 0,
>> + };
>> +
>> + fd = open("/dev/xen/privcmd", O_RDWR);
>> +
>> + if (fd < 0 && (errno == ENOENT || errno == ENXIO || errno == ENODEV)) {
>> + /* Fallback to /proc/xen/privcmd */
>> + fd = open("/proc/xen/privcmd", O_RDWR);
>> + }
>> +
>> + if (fd < 0) {
>> + PERROR("Could not obtain handle on privileged command interface");
>> + return rc;
>> + }
>> +
>> + rc = ioctl(fd, IOCTL_PRIVCMD_GSI_FROM_PCIDEV, &dev_gsi);
>> + close(fd);
>> +
>> + if (rc) {
>> + PERROR("Failed to get gsi from dev");
>> + } else {
>> + rc = dev_gsi.gsi;
>> + }
>> +#endif
>> +
>> + return rc;
>> +}
>
> I realize Anthony had asked to move this out of libxencall, yet doing it like
> this (without really abstracting away the OS specifics) doesn't look quite
> right either. In particular the opening of /dev/xen/privcmd looks questionable
> to now have yet another instance in yet another library. Couldn't we split
> osdep_xencall_open(), making available its former half for use here and in the
> other two libraries?
Hi Anthony, what about your opinion?
> Of course that'll still leave the ioctl() invocation, which necessarily is
> OS-specific, too.
>
> Jan
--
Best regards,
Jiqian Chen.