Re: Correct way to enable BusMaster with VFIO?

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

 



Hi Alex,

Thanks for your reply.

On Wed, Apr 8, 2015 at 8:17 AM, Alex Williamson
<alex.williamson@xxxxxxxxxx> wrote:
> Hi Wei,
>
> On Tue, 2015-04-07 at 21:02 -0700, Wei Hu wrote:
>> Hi Alex,
>>
>> With your change "Release devices with BusMaster disabled", I've found
>> that my VFIO device driver is no longer receiving MSI interrupts.
>> After reviewing the code I think it makes sense. But I had two
>> questions below while debugging my issue.
>>
>> 1.  If I had set the bus master bit in the command register by hand
>> before opening the vfio device, the kernel would actually leave
>> BusMaster enabled. This seems to contradict the call to
>> pci_clear_master() from vfio_pci_enable(). What's going on here, is
>> something else enabling BusMaster?
>
> I don't see this behavior.  If I use a test program that simply opens
> the vfio group, configures the IOMMU container and gets a device file
> descriptor, BusMaster is clear at that point regardless of whether the
> device has it enabled or disabled beforehand.  Are you perhaps attaching
> bridges to vfio-pci and the bridge is getting enabled as part of the
> pci_enable_device() call of the endpoint?  Newer versions of vfio-pci
> won't allow binding bridges, it was a bug that it was ever allowed.  Our
> config space manipulation only knows about normal header types.

Actually no, only two PCIe endpoints are assigned to vfio-pci. The
endpoints are two different functions on one PCIe device if that
matters.

>
>> 2. What's the recommended way to enable BusMaster with your change
>> now? Should my driver map the config space region and set the
>> BusMaster bit? Or should I have a separate command to enable the bit
>> before opening the device?
>
> VFIO is designed to be a complete interface to the device, why would you
> write a driver that makes use of VFIO that has pre-conditions of
> manipulating the device state outside of VFIO?  There's no additional
> mapping of config space required, you already have access to it through
> the device file descriptor.  It should simply be a matter of doing a
> read-modify-write at the proper offset to toggle the command register.
> QEMU uses pread(2) and pwrite(2) for this, but any equivalent tool
> should work as well.  Thanks,

Yes, I'll use pread/pwrite. Thank you!
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux