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

Kevin Wolf posted 61 patches 7 years, 10 months ago
Only 42 patches received!
There is a newer version of this series
[Qemu-devel] [PULL 11/61] virtio-pci: use ioeventfd even when KVM is disabled
Posted by Kevin Wolf 7 years, 10 months ago
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;
     }
 
-- 
1.8.3.1


Re: [Qemu-devel] [Qemu-block] [PULL 11/61] virtio-pci: use ioeventfd even when KVM is disabled
Posted by QingFeng Hao 7 years, 10 months ago
在 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.
Thanks!

-- 
Regards
QingFeng Hao


Re: [Qemu-devel] [Qemu-block] [PULL 11/61] virtio-pci: use ioeventfd even when KVM is disabled
Posted by Kevin Wolf 7 years, 10 months ago
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.

Kevin

Re: [Qemu-devel] [Qemu-block] [PULL 11/61] virtio-pci: use ioeventfd even when KVM is disabled
Posted by QingFeng Hao 7 years, 10 months ago
在 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.
Thanks Kevin. Maybe I am luck, I didn't encounter the failure when running
'make check' with this patch applied. thanks
> Kevin
>

-- 
Regards
QingFeng Hao


Re: [Qemu-devel] [Qemu-block] [PULL 11/61] virtio-pci: use ioeventfd even when KVM is disabled
Posted by QingFeng Hao 7 years, 10 months ago
在 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:
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;
      }

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

-- 
Regards
QingFeng Hao