在 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