[libvirt] [PATCH] device-assignment: Reset device on system reset
Alex Williamson
alex.williamson at redhat.com
Thu Mar 17 21:17:50 UTC 2011
On Thu, 2011-03-17 at 14:12 -0700, Chris Wright wrote:
> * Alex Williamson (alex.williamson at redhat.com) wrote:
> > static void reset_assigned_device(DeviceState *dev)
> > {
> > - PCIDevice *d = DO_UPCAST(PCIDevice, qdev, dev);
> > + PCIDevice *pci_dev = DO_UPCAST(PCIDevice, qdev, dev);
> > + AssignedDevice *adev = DO_UPCAST(AssignedDevice, dev, pci_dev);
> > + char reset_file[64];
> > + const char reset[] = "1";
> > + int fd, ret;
> > +
> > + snprintf(reset_file, sizeof(reset_file),
> > + "/sys/bus/pci/devices/0000:%02x:%02x.%01x/reset",
> > + adev->host.bus, adev->host.dev, adev->host.func);
>
> need to consider segment: %04x:..., adev->host.seg, ...
Shoot, I ported this over from a code base w/o seg support. Thanks for
the catch.
> > + /*
> > + * Issue a device reset via pci-sysfs. Note that we use write(2) here
> > + * and ignore the return value because some kernels have a bug that
> > + * returns 0 rather than bytes written on success, sending us into an
> > + * infinite retry loop using other write mechanisms.
> > + */
> > + fd = open(reset_file, O_WRONLY);
> > + if (fd != -1) {
> > + ret = write(fd, reset, strlen(reset));
> > + close(fd);
> > + }
>
> This will probably fail when it's managed by libvirt. I expect it
> will need some file ownership and security label mgmt added to device
> assignement path I expect.
Already posted a patch for adding file rights, seems to be sufficient:
https://www.redhat.com/archives/libvir-list/2011-March/msg00823.html
Thanks,
Alex
More information about the libvir-list
mailing list