mbox

[PULL,00/21] vfio queue

Message ID 20231006062005.1040296-1-clg@redhat.com (mailing list archive)
State New, archived
Headers show

Pull-request

https://github.com/legoater/qemu/ tags/pull-vfio-20231006

Message

Cédric Le Goater Oct. 6, 2023, 6:19 a.m. UTC
The following changes since commit 2f3913f4b2ad74baeb5a6f1d36efbd9ecdf1057d:

  Merge tag 'for_upstream' of https://git.kernel.org/pub/scm/virt/kvm/mst/qemu into staging (2023-10-05 09:01:01 -0400)

are available in the Git repository at:

  https://github.com/legoater/qemu/ tags/pull-vfio-20231006

for you to fetch changes up to 6e86aaef9ac57066aa923211a164df95b7b3cdf7:

  vfio/common: Move legacy VFIO backend code into separate container.c (2023-10-05 22:04:52 +0200)

----------------------------------------------------------------
vfio queue:

* Fix for VFIO display when using Intel vGPUs
* Support for dynamic MSI-X
* Preliminary work for IOMMUFD support

----------------------------------------------------------------
Alex Williamson (1):
      vfio/display: Fix missing update to set backing fields

Eric Auger (7):
      scripts/update-linux-headers: Add iommufd.h
      vfio/common: Propagate KVM_SET_DEVICE_ATTR error if any
      vfio/common: Introduce vfio_container_add|del_section_window()
      vfio/pci: Introduce vfio_[attach/detach]_device
      vfio/platform: Use vfio_[attach/detach]_device
      vfio/ap: Use vfio_[attach/detach]_device
      vfio/ccw: Use vfio_[attach/detach]_device

Jing Liu (4):
      vfio/pci: detect the support of dynamic MSI-X allocation
      vfio/pci: enable vector on dynamic MSI-X allocation
      vfio/pci: use an invalid fd to enable MSI-X
      vfio/pci: enable MSI-X in interrupt restoring on dynamic allocation

Yi Liu (2):
      vfio/common: Move IOMMU agnostic helpers to a separate file
      vfio/common: Move legacy VFIO backend code into separate container.c

Zhenzhong Duan (7):
      vfio/pci: rename vfio_put_device to vfio_pci_put_device
      linux-headers: Add iommufd.h
      vfio/common: Extract out vfio_kvm_device_[add/del]_fd
      vfio/common: Move VFIO reset handler registration to a group agnostic function
      vfio/common: Introduce a per container device list
      vfio/common: Store the parent container in VFIODevice
      vfio/common: Introduce a global VFIODevice list

 hw/vfio/pci.h                   |    1 +
 include/hw/vfio/vfio-common.h   |   60 +-
 linux-headers/linux/iommufd.h   |  444 +++++++++
 hw/vfio/ap.c                    |   69 +-
 hw/vfio/ccw.c                   |  122 +--
 hw/vfio/common.c                | 1885 +++------------------------------------
 hw/vfio/container.c             | 1161 ++++++++++++++++++++++++
 hw/vfio/display.c               |    2 +
 hw/vfio/helpers.c               |  612 +++++++++++++
 hw/vfio/pci.c                   |  194 ++--
 hw/vfio/platform.c              |   43 +-
 hw/vfio/meson.build             |    2 +
 hw/vfio/trace-events            |    6 +-
 scripts/update-linux-headers.sh |    3 +-
 14 files changed, 2580 insertions(+), 2024 deletions(-)
 create mode 100644 linux-headers/linux/iommufd.h
 create mode 100644 hw/vfio/container.c
 create mode 100644 hw/vfio/helpers.c

Comments

Cédric Le Goater Oct. 6, 2023, 10:33 a.m. UTC | #1
On 10/6/23 08:19, Cédric Le Goater wrote:
> The following changes since commit 2f3913f4b2ad74baeb5a6f1d36efbd9ecdf1057d:
> 
>    Merge tag 'for_upstream' of https://git.kernel.org/pub/scm/virt/kvm/mst/qemu into staging (2023-10-05 09:01:01 -0400)
> 
> are available in the Git repository at:
> 
>    https://github.com/legoater/qemu/ tags/pull-vfio-20231006
> 
> for you to fetch changes up to 6e86aaef9ac57066aa923211a164df95b7b3cdf7:
> 
>    vfio/common: Move legacy VFIO backend code into separate container.c (2023-10-05 22:04:52 +0200)
> 
> ----------------------------------------------------------------
> vfio queue:
> 
> * Fix for VFIO display when using Intel vGPUs
> * Support for dynamic MSI-X
> * Preliminary work for IOMMUFD support

Stefan,

I just did some tests on z with passthough devices (PCI and AP) and
the series is not bisectable. QEMU crashes at patch  :

   "vfio/pci: Introduce vfio_[attach/detach]_device".

Also, with everything applied, the guest fails to start with :

  vfio: IRQ 0 not available (number of irqs 0)

So, please hold on and sorry for the noise. I will start digging
on my side.

Thanks,

C.

> ----------------------------------------------------------------
> Alex Williamson (1):
>        vfio/display: Fix missing update to set backing fields
> 
> Eric Auger (7):
>        scripts/update-linux-headers: Add iommufd.h
>        vfio/common: Propagate KVM_SET_DEVICE_ATTR error if any
>        vfio/common: Introduce vfio_container_add|del_section_window()
>        vfio/pci: Introduce vfio_[attach/detach]_device
>        vfio/platform: Use vfio_[attach/detach]_device
>        vfio/ap: Use vfio_[attach/detach]_device
>        vfio/ccw: Use vfio_[attach/detach]_device
> 
> Jing Liu (4):
>        vfio/pci: detect the support of dynamic MSI-X allocation
>        vfio/pci: enable vector on dynamic MSI-X allocation
>        vfio/pci: use an invalid fd to enable MSI-X
>        vfio/pci: enable MSI-X in interrupt restoring on dynamic allocation
> 
> Yi Liu (2):
>        vfio/common: Move IOMMU agnostic helpers to a separate file
>        vfio/common: Move legacy VFIO backend code into separate container.c
> 
> Zhenzhong Duan (7):
>        vfio/pci: rename vfio_put_device to vfio_pci_put_device
>        linux-headers: Add iommufd.h
>        vfio/common: Extract out vfio_kvm_device_[add/del]_fd
>        vfio/common: Move VFIO reset handler registration to a group agnostic function
>        vfio/common: Introduce a per container device list
>        vfio/common: Store the parent container in VFIODevice
>        vfio/common: Introduce a global VFIODevice list
> 
>   hw/vfio/pci.h                   |    1 +
>   include/hw/vfio/vfio-common.h   |   60 +-
>   linux-headers/linux/iommufd.h   |  444 +++++++++
>   hw/vfio/ap.c                    |   69 +-
>   hw/vfio/ccw.c                   |  122 +--
>   hw/vfio/common.c                | 1885 +++------------------------------------
>   hw/vfio/container.c             | 1161 ++++++++++++++++++++++++
>   hw/vfio/display.c               |    2 +
>   hw/vfio/helpers.c               |  612 +++++++++++++
>   hw/vfio/pci.c                   |  194 ++--
>   hw/vfio/platform.c              |   43 +-
>   hw/vfio/meson.build             |    2 +
>   hw/vfio/trace-events            |    6 +-
>   scripts/update-linux-headers.sh |    3 +-
>   14 files changed, 2580 insertions(+), 2024 deletions(-)
>   create mode 100644 linux-headers/linux/iommufd.h
>   create mode 100644 hw/vfio/container.c
>   create mode 100644 hw/vfio/helpers.c
>
Eric Auger Oct. 6, 2023, 11:42 a.m. UTC | #2
Hi Cédric,

On 10/6/23 12:33, Cédric Le Goater wrote:
> On 10/6/23 08:19, Cédric Le Goater wrote:
>> The following changes since commit
>> 2f3913f4b2ad74baeb5a6f1d36efbd9ecdf1057d:
>>
>>    Merge tag 'for_upstream' of
>> https://git.kernel.org/pub/scm/virt/kvm/mst/qemu into staging
>> (2023-10-05 09:01:01 -0400)
>>
>> are available in the Git repository at:
>>
>>    https://github.com/legoater/qemu/ tags/pull-vfio-20231006
>>
>> for you to fetch changes up to 6e86aaef9ac57066aa923211a164df95b7b3cdf7:
>>
>>    vfio/common: Move legacy VFIO backend code into separate
>> container.c (2023-10-05 22:04:52 +0200)
>>
>> ----------------------------------------------------------------
>> vfio queue:
>>
>> * Fix for VFIO display when using Intel vGPUs
>> * Support for dynamic MSI-X
>> * Preliminary work for IOMMUFD support
> 
> Stefan,
> 
> I just did some tests on z with passthough devices (PCI and AP) and
> the series is not bisectable. QEMU crashes at patch  :
> 
>   "vfio/pci: Introduce vfio_[attach/detach]_device".
> 
> Also, with everything applied, the guest fails to start with :
> 
>  vfio: IRQ 0 not available (number of irqs 0)
> 
> So, please hold on and sorry for the noise. I will start digging
> on my side.
I just tested with the head on vfio/pci: Introduce
vfio_[attach/detach]_device, with PCIe assignment on ARM and I fail to
reproduce the crash.

Do you try hotplug or something simpler?

Thanks

Eric


> 
> Thanks,
> 
> C.
> 
>> ----------------------------------------------------------------
>> Alex Williamson (1):
>>        vfio/display: Fix missing update to set backing fields
>>
>> Eric Auger (7):
>>        scripts/update-linux-headers: Add iommufd.h
>>        vfio/common: Propagate KVM_SET_DEVICE_ATTR error if any
>>        vfio/common: Introduce vfio_container_add|del_section_window()
>>        vfio/pci: Introduce vfio_[attach/detach]_device
>>        vfio/platform: Use vfio_[attach/detach]_device
>>        vfio/ap: Use vfio_[attach/detach]_device
>>        vfio/ccw: Use vfio_[attach/detach]_device
>>
>> Jing Liu (4):
>>        vfio/pci: detect the support of dynamic MSI-X allocation
>>        vfio/pci: enable vector on dynamic MSI-X allocation
>>        vfio/pci: use an invalid fd to enable MSI-X
>>        vfio/pci: enable MSI-X in interrupt restoring on dynamic
>> allocation
>>
>> Yi Liu (2):
>>        vfio/common: Move IOMMU agnostic helpers to a separate file
>>        vfio/common: Move legacy VFIO backend code into separate
>> container.c
>>
>> Zhenzhong Duan (7):
>>        vfio/pci: rename vfio_put_device to vfio_pci_put_device
>>        linux-headers: Add iommufd.h
>>        vfio/common: Extract out vfio_kvm_device_[add/del]_fd
>>        vfio/common: Move VFIO reset handler registration to a group
>> agnostic function
>>        vfio/common: Introduce a per container device list
>>        vfio/common: Store the parent container in VFIODevice
>>        vfio/common: Introduce a global VFIODevice list
>>
>>   hw/vfio/pci.h                   |    1 +
>>   include/hw/vfio/vfio-common.h   |   60 +-
>>   linux-headers/linux/iommufd.h   |  444 +++++++++
>>   hw/vfio/ap.c                    |   69 +-
>>   hw/vfio/ccw.c                   |  122 +--
>>   hw/vfio/common.c                | 1885
>> +++------------------------------------
>>   hw/vfio/container.c             | 1161 ++++++++++++++++++++++++
>>   hw/vfio/display.c               |    2 +
>>   hw/vfio/helpers.c               |  612 +++++++++++++
>>   hw/vfio/pci.c                   |  194 ++--
>>   hw/vfio/platform.c              |   43 +-
>>   hw/vfio/meson.build             |    2 +
>>   hw/vfio/trace-events            |    6 +-
>>   scripts/update-linux-headers.sh |    3 +-
>>   14 files changed, 2580 insertions(+), 2024 deletions(-)
>>   create mode 100644 linux-headers/linux/iommufd.h
>>   create mode 100644 hw/vfio/container.c
>>   create mode 100644 hw/vfio/helpers.c
>>
>
Eric Auger Oct. 6, 2023, 11:46 a.m. UTC | #3
Hi Cédric,

On 10/6/23 13:42, Eric Auger wrote:
> Hi Cédric,
> 
> On 10/6/23 12:33, Cédric Le Goater wrote:
>> On 10/6/23 08:19, Cédric Le Goater wrote:
>>> The following changes since commit
>>> 2f3913f4b2ad74baeb5a6f1d36efbd9ecdf1057d:
>>>
>>>    Merge tag 'for_upstream' of
>>> https://git.kernel.org/pub/scm/virt/kvm/mst/qemu into staging
>>> (2023-10-05 09:01:01 -0400)
>>>
>>> are available in the Git repository at:
>>>
>>>    https://github.com/legoater/qemu/ tags/pull-vfio-20231006
>>>
>>> for you to fetch changes up to 6e86aaef9ac57066aa923211a164df95b7b3cdf7:
>>>
>>>    vfio/common: Move legacy VFIO backend code into separate
>>> container.c (2023-10-05 22:04:52 +0200)
>>>
>>> ----------------------------------------------------------------
>>> vfio queue:
>>>
>>> * Fix for VFIO display when using Intel vGPUs
>>> * Support for dynamic MSI-X
>>> * Preliminary work for IOMMUFD support
>>
>> Stefan,
>>
>> I just did some tests on z with passthough devices (PCI and AP) and
>> the series is not bisectable. QEMU crashes at patch  :
>>
>>   "vfio/pci: Introduce vfio_[attach/detach]_device".
>>
>> Also, with everything applied, the guest fails to start with :
>>
>>  vfio: IRQ 0 not available (number of irqs 0)
>>
>> So, please hold on and sorry for the noise. I will start digging
>> on my side.
> I just tested with the head on vfio/pci: Introduce
> vfio_[attach/detach]_device, with PCIe assignment on ARM and I fail to
> reproduce the crash.
> 
> Do you try hotplug or something simpler?

also works for me with hotplug/hotunplug. Please let me know if I can help.

Eric
> 
> Thanks
> 
> Eric
> 
> 
>>
>> Thanks,
>>
>> C.
>>
>>> ----------------------------------------------------------------
>>> Alex Williamson (1):
>>>        vfio/display: Fix missing update to set backing fields
>>>
>>> Eric Auger (7):
>>>        scripts/update-linux-headers: Add iommufd.h
>>>        vfio/common: Propagate KVM_SET_DEVICE_ATTR error if any
>>>        vfio/common: Introduce vfio_container_add|del_section_window()
>>>        vfio/pci: Introduce vfio_[attach/detach]_device
>>>        vfio/platform: Use vfio_[attach/detach]_device
>>>        vfio/ap: Use vfio_[attach/detach]_device
>>>        vfio/ccw: Use vfio_[attach/detach]_device
>>>
>>> Jing Liu (4):
>>>        vfio/pci: detect the support of dynamic MSI-X allocation
>>>        vfio/pci: enable vector on dynamic MSI-X allocation
>>>        vfio/pci: use an invalid fd to enable MSI-X
>>>        vfio/pci: enable MSI-X in interrupt restoring on dynamic
>>> allocation
>>>
>>> Yi Liu (2):
>>>        vfio/common: Move IOMMU agnostic helpers to a separate file
>>>        vfio/common: Move legacy VFIO backend code into separate
>>> container.c
>>>
>>> Zhenzhong Duan (7):
>>>        vfio/pci: rename vfio_put_device to vfio_pci_put_device
>>>        linux-headers: Add iommufd.h
>>>        vfio/common: Extract out vfio_kvm_device_[add/del]_fd
>>>        vfio/common: Move VFIO reset handler registration to a group
>>> agnostic function
>>>        vfio/common: Introduce a per container device list
>>>        vfio/common: Store the parent container in VFIODevice
>>>        vfio/common: Introduce a global VFIODevice list
>>>
>>>   hw/vfio/pci.h                   |    1 +
>>>   include/hw/vfio/vfio-common.h   |   60 +-
>>>   linux-headers/linux/iommufd.h   |  444 +++++++++
>>>   hw/vfio/ap.c                    |   69 +-
>>>   hw/vfio/ccw.c                   |  122 +--
>>>   hw/vfio/common.c                | 1885
>>> +++------------------------------------
>>>   hw/vfio/container.c             | 1161 ++++++++++++++++++++++++
>>>   hw/vfio/display.c               |    2 +
>>>   hw/vfio/helpers.c               |  612 +++++++++++++
>>>   hw/vfio/pci.c                   |  194 ++--
>>>   hw/vfio/platform.c              |   43 +-
>>>   hw/vfio/meson.build             |    2 +
>>>   hw/vfio/trace-events            |    6 +-
>>>   scripts/update-linux-headers.sh |    3 +-
>>>   14 files changed, 2580 insertions(+), 2024 deletions(-)
>>>   create mode 100644 linux-headers/linux/iommufd.h
>>>   create mode 100644 hw/vfio/container.c
>>>   create mode 100644 hw/vfio/helpers.c
>>>
>>
Eric Auger Oct. 6, 2023, 12:25 p.m. UTC | #4
Hi Cédric,

On 10/6/23 13:46, Eric Auger wrote:
> Hi Cédric,
> 
> On 10/6/23 13:42, Eric Auger wrote:
>> Hi Cédric,
>>
>> On 10/6/23 12:33, Cédric Le Goater wrote:
>>> On 10/6/23 08:19, Cédric Le Goater wrote:
>>>> The following changes since commit
>>>> 2f3913f4b2ad74baeb5a6f1d36efbd9ecdf1057d:
>>>>
>>>>    Merge tag 'for_upstream' of
>>>> https://git.kernel.org/pub/scm/virt/kvm/mst/qemu into staging
>>>> (2023-10-05 09:01:01 -0400)
>>>>
>>>> are available in the Git repository at:
>>>>
>>>>    https://github.com/legoater/qemu/ tags/pull-vfio-20231006
>>>>
>>>> for you to fetch changes up to 6e86aaef9ac57066aa923211a164df95b7b3cdf7:
>>>>
>>>>    vfio/common: Move legacy VFIO backend code into separate
>>>> container.c (2023-10-05 22:04:52 +0200)
>>>>
>>>> ----------------------------------------------------------------
>>>> vfio queue:
>>>>
>>>> * Fix for VFIO display when using Intel vGPUs
>>>> * Support for dynamic MSI-X
>>>> * Preliminary work for IOMMUFD support
>>>
>>> Stefan,
>>>
>>> I just did some tests on z with passthough devices (PCI and AP) and
>>> the series is not bisectable. QEMU crashes at patch  :
>>>
>>>   "vfio/pci: Introduce vfio_[attach/detach]_device".
>>>
>>> Also, with everything applied, the guest fails to start with :
>>>
>>>  vfio: IRQ 0 not available (number of irqs 0)
>>>
>>> So, please hold on and sorry for the noise. I will start digging
>>> on my side.
>> I just tested with the head on vfio/pci: Introduce
>> vfio_[attach/detach]_device, with PCIe assignment on ARM and I fail to
>> reproduce the crash.
>>
>> Do you try hotplug or something simpler?
> 
> also works for me with hotplug/hotunplug. Please let me know if I can help.

I think this is related to the error handling.

if you hotplug a vfio-device and if this encounters an error,
vfio_realize fails and you end at the 'error' label where the name of
the device is freed: g_free(vbasedev->name);

However I see that the vfio_finalize is called (Zhengzhong warned me !!)
calls vfio_pci_put_device
which calls g_free(vdev->vbasedev.name) again.
please try adding
vdev->vbasedev.name = NULL after freeing the name in vfio_realize error:
so see if it fixes the crash.

Then wrt irq stuff, I would be tempted to say it sounds unrelated to the
iommufd prereq series but well.

Please let me know how you want me to fix that mess, sorry.

Eric


> 
> Eric
>>
>> Thanks
>>
>> Eric
>>
>>
>>>
>>> Thanks,
>>>
>>> C.
>>>
>>>> ----------------------------------------------------------------
>>>> Alex Williamson (1):
>>>>        vfio/display: Fix missing update to set backing fields
>>>>
>>>> Eric Auger (7):
>>>>        scripts/update-linux-headers: Add iommufd.h
>>>>        vfio/common: Propagate KVM_SET_DEVICE_ATTR error if any
>>>>        vfio/common: Introduce vfio_container_add|del_section_window()
>>>>        vfio/pci: Introduce vfio_[attach/detach]_device
>>>>        vfio/platform: Use vfio_[attach/detach]_device
>>>>        vfio/ap: Use vfio_[attach/detach]_device
>>>>        vfio/ccw: Use vfio_[attach/detach]_device
>>>>
>>>> Jing Liu (4):
>>>>        vfio/pci: detect the support of dynamic MSI-X allocation
>>>>        vfio/pci: enable vector on dynamic MSI-X allocation
>>>>        vfio/pci: use an invalid fd to enable MSI-X
>>>>        vfio/pci: enable MSI-X in interrupt restoring on dynamic
>>>> allocation
>>>>
>>>> Yi Liu (2):
>>>>        vfio/common: Move IOMMU agnostic helpers to a separate file
>>>>        vfio/common: Move legacy VFIO backend code into separate
>>>> container.c
>>>>
>>>> Zhenzhong Duan (7):
>>>>        vfio/pci: rename vfio_put_device to vfio_pci_put_device
>>>>        linux-headers: Add iommufd.h
>>>>        vfio/common: Extract out vfio_kvm_device_[add/del]_fd
>>>>        vfio/common: Move VFIO reset handler registration to a group
>>>> agnostic function
>>>>        vfio/common: Introduce a per container device list
>>>>        vfio/common: Store the parent container in VFIODevice
>>>>        vfio/common: Introduce a global VFIODevice list
>>>>
>>>>   hw/vfio/pci.h                   |    1 +
>>>>   include/hw/vfio/vfio-common.h   |   60 +-
>>>>   linux-headers/linux/iommufd.h   |  444 +++++++++
>>>>   hw/vfio/ap.c                    |   69 +-
>>>>   hw/vfio/ccw.c                   |  122 +--
>>>>   hw/vfio/common.c                | 1885
>>>> +++------------------------------------
>>>>   hw/vfio/container.c             | 1161 ++++++++++++++++++++++++
>>>>   hw/vfio/display.c               |    2 +
>>>>   hw/vfio/helpers.c               |  612 +++++++++++++
>>>>   hw/vfio/pci.c                   |  194 ++--
>>>>   hw/vfio/platform.c              |   43 +-
>>>>   hw/vfio/meson.build             |    2 +
>>>>   hw/vfio/trace-events            |    6 +-
>>>>   scripts/update-linux-headers.sh |    3 +-
>>>>   14 files changed, 2580 insertions(+), 2024 deletions(-)
>>>>   create mode 100644 linux-headers/linux/iommufd.h
>>>>   create mode 100644 hw/vfio/container.c
>>>>   create mode 100644 hw/vfio/helpers.c
>>>>
>>>
Cédric Le Goater Oct. 6, 2023, 5:08 p.m. UTC | #5
Hello Eric,

On 10/6/23 14:25, Eric Auger wrote:
> Hi Cédric,
> 
> On 10/6/23 13:46, Eric Auger wrote:
>> Hi Cédric,
>>
>> On 10/6/23 13:42, Eric Auger wrote:
>>> Hi Cédric,
>>>
>>> On 10/6/23 12:33, Cédric Le Goater wrote:
>>>> On 10/6/23 08:19, Cédric Le Goater wrote:
>>>>> The following changes since commit
>>>>> 2f3913f4b2ad74baeb5a6f1d36efbd9ecdf1057d:
>>>>>
>>>>>     Merge tag 'for_upstream' of
>>>>> https://git.kernel.org/pub/scm/virt/kvm/mst/qemu into staging
>>>>> (2023-10-05 09:01:01 -0400)
>>>>>
>>>>> are available in the Git repository at:
>>>>>
>>>>>     https://github.com/legoater/qemu/ tags/pull-vfio-20231006
>>>>>
>>>>> for you to fetch changes up to 6e86aaef9ac57066aa923211a164df95b7b3cdf7:
>>>>>
>>>>>     vfio/common: Move legacy VFIO backend code into separate
>>>>> container.c (2023-10-05 22:04:52 +0200)
>>>>>
>>>>> ----------------------------------------------------------------
>>>>> vfio queue:
>>>>>
>>>>> * Fix for VFIO display when using Intel vGPUs
>>>>> * Support for dynamic MSI-X
>>>>> * Preliminary work for IOMMUFD support
>>>>
>>>> Stefan,
>>>>
>>>> I just did some tests on z with passthough devices (PCI and AP) and
>>>> the series is not bisectable. QEMU crashes at patch  :
>>>>
>>>>    "vfio/pci: Introduce vfio_[attach/detach]_device".
>>>>
>>>> Also, with everything applied, the guest fails to start with :
>>>>
>>>>   vfio: IRQ 0 not available (number of irqs 0)
>>>>
>>>> So, please hold on and sorry for the noise. I will start digging
>>>> on my side.
>>> I just tested with the head on vfio/pci: Introduce
>>> vfio_[attach/detach]_device, with PCIe assignment on ARM and I fail to
>>> reproduce the crash.
>>>
>>> Do you try hotplug or something simpler?
>>
>> also works for me with hotplug/hotunplug. Please let me know if I can help.
> 
> I think this is related to the error handling.
> 
> if you hotplug a vfio-device and if this encounters an error,
> vfio_realize fails and you end at the 'error' label where the name of
> the device is freed: g_free(vbasedev->name);
> 
> However I see that the vfio_finalize is called (Zhengzhong warned me !!)
> calls vfio_pci_put_device
> which calls g_free(vdev->vbasedev.name) again.
> please try adding
> vdev->vbasedev.name = NULL after freeing the name in vfio_realize error:
> so see if it fixes the crash.
> 
> Then wrt irq stuff, I would be tempted to say it sounds unrelated to the
> iommufd prereq series but well.
> 
> Please let me know how you want me to fix that mess, sorry.

So, the issue was a bit complex to dig because it only crashed
with a s390 guest under libvirt. This is my all-in-one combo VM
which has 2 PCI, 2 AP, 1 CCW passthrough devices and the issue
is in AP I think.

vfio_ap_realize lacks :

   @@ -188,6 +188,7 @@ static void vfio_ap_realize(DeviceState
            error_report_err(err);
        }
    
   +    return;
    error:
        error_prepend(errp, VFIO_MSG_PREFIX, vbasedev->name);
        g_free(vbasedev->name);


No error were to return and since everything was fine, the error
path generated a lot of mess indeed !

If you are ok with the above, I will squash the change in the
related patch and send a v2.

Thanks,

C.




> 
> Eric
> 
> 
>>
>> Eric
>>>
>>> Thanks
>>>
>>> Eric
>>>
>>>
>>>>
>>>> Thanks,
>>>>
>>>> C.
>>>>
>>>>> ----------------------------------------------------------------
>>>>> Alex Williamson (1):
>>>>>         vfio/display: Fix missing update to set backing fields
>>>>>
>>>>> Eric Auger (7):
>>>>>         scripts/update-linux-headers: Add iommufd.h
>>>>>         vfio/common: Propagate KVM_SET_DEVICE_ATTR error if any
>>>>>         vfio/common: Introduce vfio_container_add|del_section_window()
>>>>>         vfio/pci: Introduce vfio_[attach/detach]_device
>>>>>         vfio/platform: Use vfio_[attach/detach]_device
>>>>>         vfio/ap: Use vfio_[attach/detach]_device
>>>>>         vfio/ccw: Use vfio_[attach/detach]_device
>>>>>
>>>>> Jing Liu (4):
>>>>>         vfio/pci: detect the support of dynamic MSI-X allocation
>>>>>         vfio/pci: enable vector on dynamic MSI-X allocation
>>>>>         vfio/pci: use an invalid fd to enable MSI-X
>>>>>         vfio/pci: enable MSI-X in interrupt restoring on dynamic
>>>>> allocation
>>>>>
>>>>> Yi Liu (2):
>>>>>         vfio/common: Move IOMMU agnostic helpers to a separate file
>>>>>         vfio/common: Move legacy VFIO backend code into separate
>>>>> container.c
>>>>>
>>>>> Zhenzhong Duan (7):
>>>>>         vfio/pci: rename vfio_put_device to vfio_pci_put_device
>>>>>         linux-headers: Add iommufd.h
>>>>>         vfio/common: Extract out vfio_kvm_device_[add/del]_fd
>>>>>         vfio/common: Move VFIO reset handler registration to a group
>>>>> agnostic function
>>>>>         vfio/common: Introduce a per container device list
>>>>>         vfio/common: Store the parent container in VFIODevice
>>>>>         vfio/common: Introduce a global VFIODevice list
>>>>>
>>>>>    hw/vfio/pci.h                   |    1 +
>>>>>    include/hw/vfio/vfio-common.h   |   60 +-
>>>>>    linux-headers/linux/iommufd.h   |  444 +++++++++
>>>>>    hw/vfio/ap.c                    |   69 +-
>>>>>    hw/vfio/ccw.c                   |  122 +--
>>>>>    hw/vfio/common.c                | 1885
>>>>> +++------------------------------------
>>>>>    hw/vfio/container.c             | 1161 ++++++++++++++++++++++++
>>>>>    hw/vfio/display.c               |    2 +
>>>>>    hw/vfio/helpers.c               |  612 +++++++++++++
>>>>>    hw/vfio/pci.c                   |  194 ++--
>>>>>    hw/vfio/platform.c              |   43 +-
>>>>>    hw/vfio/meson.build             |    2 +
>>>>>    hw/vfio/trace-events            |    6 +-
>>>>>    scripts/update-linux-headers.sh |    3 +-
>>>>>    14 files changed, 2580 insertions(+), 2024 deletions(-)
>>>>>    create mode 100644 linux-headers/linux/iommufd.h
>>>>>    create mode 100644 hw/vfio/container.c
>>>>>    create mode 100644 hw/vfio/helpers.c
>>>>>
>>>>
>
Eric Auger Oct. 6, 2023, 5:28 p.m. UTC | #6
Hi Cédric,

On 10/6/23 19:08, Cédric Le Goater wrote:
> Hello Eric,
> 
> On 10/6/23 14:25, Eric Auger wrote:
>> Hi Cédric,
>>
>> On 10/6/23 13:46, Eric Auger wrote:
>>> Hi Cédric,
>>>
>>> On 10/6/23 13:42, Eric Auger wrote:
>>>> Hi Cédric,
>>>>
>>>> On 10/6/23 12:33, Cédric Le Goater wrote:
>>>>> On 10/6/23 08:19, Cédric Le Goater wrote:
>>>>>> The following changes since commit
>>>>>> 2f3913f4b2ad74baeb5a6f1d36efbd9ecdf1057d:
>>>>>>
>>>>>>     Merge tag 'for_upstream' of
>>>>>> https://git.kernel.org/pub/scm/virt/kvm/mst/qemu into staging
>>>>>> (2023-10-05 09:01:01 -0400)
>>>>>>
>>>>>> are available in the Git repository at:
>>>>>>
>>>>>>     https://github.com/legoater/qemu/ tags/pull-vfio-20231006
>>>>>>
>>>>>> for you to fetch changes up to
>>>>>> 6e86aaef9ac57066aa923211a164df95b7b3cdf7:
>>>>>>
>>>>>>     vfio/common: Move legacy VFIO backend code into separate
>>>>>> container.c (2023-10-05 22:04:52 +0200)
>>>>>>
>>>>>> ----------------------------------------------------------------
>>>>>> vfio queue:
>>>>>>
>>>>>> * Fix for VFIO display when using Intel vGPUs
>>>>>> * Support for dynamic MSI-X
>>>>>> * Preliminary work for IOMMUFD support
>>>>>
>>>>> Stefan,
>>>>>
>>>>> I just did some tests on z with passthough devices (PCI and AP) and
>>>>> the series is not bisectable. QEMU crashes at patch  :
>>>>>
>>>>>    "vfio/pci: Introduce vfio_[attach/detach]_device".
>>>>>
>>>>> Also, with everything applied, the guest fails to start with :
>>>>>
>>>>>   vfio: IRQ 0 not available (number of irqs 0)
>>>>>
>>>>> So, please hold on and sorry for the noise. I will start digging
>>>>> on my side.
>>>> I just tested with the head on vfio/pci: Introduce
>>>> vfio_[attach/detach]_device, with PCIe assignment on ARM and I fail to
>>>> reproduce the crash.
>>>>
>>>> Do you try hotplug or something simpler?
>>>
>>> also works for me with hotplug/hotunplug. Please let me know if I can
>>> help.
>>
>> I think this is related to the error handling.
>>
>> if you hotplug a vfio-device and if this encounters an error,
>> vfio_realize fails and you end at the 'error' label where the name of
>> the device is freed: g_free(vbasedev->name);
>>
>> However I see that the vfio_finalize is called (Zhengzhong warned me !!)
>> calls vfio_pci_put_device
>> which calls g_free(vdev->vbasedev.name) again.
>> please try adding
>> vdev->vbasedev.name = NULL after freeing the name in vfio_realize error:
>> so see if it fixes the crash.
>>
>> Then wrt irq stuff, I would be tempted to say it sounds unrelated to the
>> iommufd prereq series but well.
>>
>> Please let me know how you want me to fix that mess, sorry.
> 
> So, the issue was a bit complex to dig because it only crashed
> with a s390 guest under libvirt. This is my all-in-one combo VM
> which has 2 PCI, 2 AP, 1 CCW passthrough devices and the issue
> is in AP I think.
> 
> vfio_ap_realize lacks :
> 
>   @@ -188,6 +188,7 @@ static void vfio_ap_realize(DeviceState
>            error_report_err(err);
>        }
>      +    return;
Hum indeed! Thanks for fixing that.
>    error:
>        error_prepend(errp, VFIO_MSG_PREFIX, vbasedev->name);
>        g_free(vbasedev->name);
> 
> 
> No error were to return and since everything was fine, the error
> path generated a lot of mess indeed !
> 
> If you are ok with the above, I will squash the change in the
> related patch and send a v2.
Unfortunately this is not sufficient. There is another regression
(crash) on a double free of vbasedev->name as I reported before. I was
able to hit it on a failing hotplug.  How do you want me to send the
fix? I can resend the whole series of just fixes on the related patches.

Thanks

Eric> Thanks,
> 
> C.
> 
> 
> 
> 
>>
>> Eric
>>
>>
>>>
>>> Eric
>>>>
>>>> Thanks
>>>>
>>>> Eric
>>>>
>>>>
>>>>>
>>>>> Thanks,
>>>>>
>>>>> C.
>>>>>
>>>>>> ----------------------------------------------------------------
>>>>>> Alex Williamson (1):
>>>>>>         vfio/display: Fix missing update to set backing fields
>>>>>>
>>>>>> Eric Auger (7):
>>>>>>         scripts/update-linux-headers: Add iommufd.h
>>>>>>         vfio/common: Propagate KVM_SET_DEVICE_ATTR error if any
>>>>>>         vfio/common: Introduce
>>>>>> vfio_container_add|del_section_window()
>>>>>>         vfio/pci: Introduce vfio_[attach/detach]_device
>>>>>>         vfio/platform: Use vfio_[attach/detach]_device
>>>>>>         vfio/ap: Use vfio_[attach/detach]_device
>>>>>>         vfio/ccw: Use vfio_[attach/detach]_device
>>>>>>
>>>>>> Jing Liu (4):
>>>>>>         vfio/pci: detect the support of dynamic MSI-X allocation
>>>>>>         vfio/pci: enable vector on dynamic MSI-X allocation
>>>>>>         vfio/pci: use an invalid fd to enable MSI-X
>>>>>>         vfio/pci: enable MSI-X in interrupt restoring on dynamic
>>>>>> allocation
>>>>>>
>>>>>> Yi Liu (2):
>>>>>>         vfio/common: Move IOMMU agnostic helpers to a separate file
>>>>>>         vfio/common: Move legacy VFIO backend code into separate
>>>>>> container.c
>>>>>>
>>>>>> Zhenzhong Duan (7):
>>>>>>         vfio/pci: rename vfio_put_device to vfio_pci_put_device
>>>>>>         linux-headers: Add iommufd.h
>>>>>>         vfio/common: Extract out vfio_kvm_device_[add/del]_fd
>>>>>>         vfio/common: Move VFIO reset handler registration to a group
>>>>>> agnostic function
>>>>>>         vfio/common: Introduce a per container device list
>>>>>>         vfio/common: Store the parent container in VFIODevice
>>>>>>         vfio/common: Introduce a global VFIODevice list
>>>>>>
>>>>>>    hw/vfio/pci.h                   |    1 +
>>>>>>    include/hw/vfio/vfio-common.h   |   60 +-
>>>>>>    linux-headers/linux/iommufd.h   |  444 +++++++++
>>>>>>    hw/vfio/ap.c                    |   69 +-
>>>>>>    hw/vfio/ccw.c                   |  122 +--
>>>>>>    hw/vfio/common.c                | 1885
>>>>>> +++------------------------------------
>>>>>>    hw/vfio/container.c             | 1161 ++++++++++++++++++++++++
>>>>>>    hw/vfio/display.c               |    2 +
>>>>>>    hw/vfio/helpers.c               |  612 +++++++++++++
>>>>>>    hw/vfio/pci.c                   |  194 ++--
>>>>>>    hw/vfio/platform.c              |   43 +-
>>>>>>    hw/vfio/meson.build             |    2 +
>>>>>>    hw/vfio/trace-events            |    6 +-
>>>>>>    scripts/update-linux-headers.sh |    3 +-
>>>>>>    14 files changed, 2580 insertions(+), 2024 deletions(-)
>>>>>>    create mode 100644 linux-headers/linux/iommufd.h
>>>>>>    create mode 100644 hw/vfio/container.c
>>>>>>    create mode 100644 hw/vfio/helpers.c
>>>>>>
>>>>>
>>
>
Cédric Le Goater Oct. 7, 2023, 10:14 a.m. UTC | #7
Hello Eric,

>> If you are ok with the above, I will squash the change in the
>> related patch and send a v2.
>
> Unfortunately this is not sufficient. There is another regression
> (crash) on a double free of vbasedev->name as I reported before. I was
> able to hit it on a failing hotplug.  How do you want me to send the
> fix? I can resend the whole series of just fixes on the related patches.

Please send a v5 for "Prerequisite changes for IOMMUFD support" with the
fixes we talked about. I will rebuild a PR next week.

Thanks,

C.
Michael Tokarev Oct. 7, 2023, 3:33 p.m. UTC | #8
07.10.2023 13:14, Cédric Le Goater wrote:

> Please send a v5 for "Prerequisite changes for IOMMUFD support" with the
> fixes we talked about. I will rebuild a PR next week.

Can you push the first bugfix at least, so it will not miss stable-8.1.2?

Thanks,

/mjt
Cédric Le Goater Oct. 9, 2023, 6:47 a.m. UTC | #9
On 10/6/23 12:33, Cédric Le Goater wrote:
> On 10/6/23 08:19, Cédric Le Goater wrote:
>> The following changes since commit 2f3913f4b2ad74baeb5a6f1d36efbd9ecdf1057d:
>>
>>    Merge tag 'for_upstream' of https://git.kernel.org/pub/scm/virt/kvm/mst/qemu into staging (2023-10-05 09:01:01 -0400)
>>
>> are available in the Git repository at:
>>
>>    https://github.com/legoater/qemu/ tags/pull-vfio-20231006
>>
>> for you to fetch changes up to 6e86aaef9ac57066aa923211a164df95b7b3cdf7:
>>
>>    vfio/common: Move legacy VFIO backend code into separate container.c (2023-10-05 22:04:52 +0200)
>>
>> ----------------------------------------------------------------
>> vfio queue:
>>
>> * Fix for VFIO display when using Intel vGPUs
>> * Support for dynamic MSI-X
>> * Preliminary work for IOMMUFD support
> 
> Stefan,
> 
> I just did some tests on z with passthough devices (PCI and AP) and
> the series is not bisectable. QEMU crashes at patch  :
> 
>    "vfio/pci: Introduce vfio_[attach/detach]_device".
> 
> Also, with everything applied, the guest fails to start with :
> 
>   vfio: IRQ 0 not available (number of irqs 0)
> 
> So, please hold on and sorry for the noise. I will start digging
> on my side.

We found a couple of issues after further testing. Fixes are under way.
Let's drop this PR. I will send a reduced one today.

Thanks,

C.