diff mbox

[Qemu-block,PULL,11/61] virtio-pci: use ioeventfd even when KVM is disabled

Message ID 799c3d2f-237c-9833-e8fe-0af6d461e252@linux.vnet.ibm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Hao QingFeng July 3, 2017, 6:01 a.m. UTC
在 2017/6/28 18:22, Kevin Wolf 写道:
> Am 28.06.2017 um 12:11 hat QingFeng Hao geschrieben:
>> 在 2017/6/24 0:21, Kevin Wolf 写道:
>>> From: Stefan Hajnoczi <stefanha@redhat.com>
>>>
>>> Old kvm.ko versions only supported a tiny number of ioeventfds so
>>> virtio-pci avoids ioeventfds when kvm_has_many_ioeventfds() returns 0.
>>>
>>> Do not check kvm_has_many_ioeventfds() when KVM is disabled since it
>>> always returns 0.  Since commit 8c56c1a592b5092d91da8d8943c17777d6462a6f
>>> ("memory: emulate ioeventfd") it has been possible to use ioeventfds in
>>> qtest or TCG mode.
>>>
>>> This patch makes -device virtio-blk-pci,iothread=iothread0 work even
>>> when KVM is disabled.
>>>
>>> I have tested that virtio-blk-pci works under TCG both with and without
>>> iothread.
>>>
>>> Cc: Michael S. Tsirkin <mst@redhat.com>
>>> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
>>> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
>>> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
>>> ---
>>>   hw/virtio/virtio-pci.c | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
>>> index 20d6a08..301920e 100644
>>> --- a/hw/virtio/virtio-pci.c
>>> +++ b/hw/virtio/virtio-pci.c
>>> @@ -1740,7 +1740,7 @@ static void virtio_pci_realize(PCIDevice *pci_dev, Error **errp)
>>>       bool pcie_port = pci_bus_is_express(pci_dev->bus) &&
>>>                        !pci_bus_is_root(pci_dev->bus);
>>>
>>> -    if (!kvm_has_many_ioeventfds()) {
>>> +    if (kvm_enabled() && !kvm_has_many_ioeventfds()) {
>>>           proxy->flags &= ~VIRTIO_PCI_FLAG_USE_IOEVENTFD;
>>>       }
>> This response is actually for mail thread "Re: [Qemu-devel] [PATCH
>> 1/5] virtio-pci: use ioeventfd even when KVM is disabled"
>> which I didn't receive, sorry.
>> I also saw the failed case of 068 as Fam due to the same cause on
>> s390x and x86.
>> With this patch applied, no failure found. Further investigation
>> shows that the error is in
>> virtio_scsi_dataplane_setup:
>>   if (!virtio_device_ioeventfd_enabled(vdev)) {
>>              error_setg(errp, "ioeventfd is required for iothread");
>>              return;
>>   }
>> call flow is:
>> virtio_device_ioeventfd_enabled-->virtio_bus_ioeventfd_enabled
>> -->k->ioeventfd_enabled-->virtio_pci_ioeventfd_enabled
>> virtio_pci_ioeventfd_enabled checks flag
>> VIRTIO_PCI_FLAG_USE_IOEVENTFD which was
>> cleared in virtio_pci_realize if this patch isn't applied.
> Yes, we know all of this. However, this patch is not correct and causes
> 'make check' failures on some platforms. The open question is where that
> failure comes from. Before this is solved, the patch can't be applied.
Sorry that I found case 068 of the latest master still fails on s390x 
(but passed
on x86) and the cause is that s390x uses "-device virtio-scsi-ccw" 
instead of
"-device virtio-scsi-pci", so the change in virtio_ccw_device_realize is 
also needed:

I'll send out a patch for that. Thanks!
> Kevin
>
diff mbox

Patch

diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 90d37cb..35896eb 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -711,7 +711,7 @@  static void 
virtio_ccw_device_realize(VirtioCcwDevice *dev, Error
          sch->cssid, sch->ssid, sch->schid, sch->devno,
          ccw_dev->devno.valid ? "user-configured" : "auto-configured");

-    if (!kvm_eventfds_enabled()) {
+    if (kvm_enabled() && !kvm_eventfds_enabled()) {
          dev->flags &= ~VIRTIO_CCW_FLAG_USE_IOEVENTFD;
      }