On 2024/7/8 21:27, Anthony PERARD wrote: > On Mon, Jul 08, 2024 at 07:41:23PM +0800, Jiqian Chen wrote: >> diff --git a/tools/libs/ctrl/xc_physdev.c b/tools/libs/ctrl/xc_physdev.c >> index e9fcd755fa62..54edb0f3c0dc 100644 >> --- 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_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); > > > You could reuse the already opened fd from libxencall: > xencall_fd(xch->xcall) Do I need to check it this fd<0?
> >> + >> + 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); > > I think this would be better implemented in Linux only C file instead of > using #define. There's already "xc_linux.c" which is probably good > enough to be used here. > > Implementation for other OS would just set errno to ENOSYS and > return -1. Thanks, will change in next version. > > -- Best regards, Jiqian Chen.