[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH v2 4/7] util/vfio-helpers: Check the device allow up to '
From: |
Alex Williamson |
Subject: |
Re: [RFC PATCH v2 4/7] util/vfio-helpers: Check the device allow up to 'irq_count' IRQs |
Date: |
Thu, 13 Aug 2020 15:30:55 -0600 |
On Thu, 13 Aug 2020 19:29:54 +0200
Philippe Mathieu-Daudé <philmd@redhat.com> wrote:
> As we want to use more than one single IRQ, add a check that
> the device accept our request to use multiple IRQs.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> util/vfio-helpers.c | 6 ++++++
> util/trace-events | 1 +
> 2 files changed, 7 insertions(+)
>
> diff --git a/util/vfio-helpers.c b/util/vfio-helpers.c
> index bad60076f3..b81d4c70c2 100644
> --- a/util/vfio-helpers.c
> +++ b/util/vfio-helpers.c
> @@ -335,6 +335,12 @@ static int qemu_vfio_init_pci(QEMUVFIOState *s, const
> char *device,
> ret = -errno;
> goto fail;
> }
> + trace_qemu_vfio_init_pci(device_info.num_irqs);
> + if (device_info.num_irqs < irq_count) {
> + error_setg(errp, "Invalid device IRQ count");
> + ret = -EINVAL;
> + goto fail;
> + }
This is confusing the number of IRQ indexes (ie. IRQ types -
INTx/MSI/MSIx plus virtual interrupts like error reporting and device
request) with the number of sub-indexes available for a given type
again. You actually need to look at VFIO_DEVICE_GET_IRQ_INFO for the
specified irq_type to see if it supports irq_count sub-indexes.
Maybe think of interrupts as a 2-dimensional array, we have:
INDEX \ SUBINDEX
\ 0 1 2 3 4 ... N
==========================
INTx [0]|
MSI [1]|
MSI-X [2]|
... [M]|
VFIO_DEVICE_GET_INFO only tells us essentially the last INDEX that the
device supports. In order to learn about the number of SUBINDEXes, or
vectors, if any, that each INDEX provides, we need to look at
VFIO_DEVICE_GET_IRQ_INFO. When we're wanting to probe support for some
number of concurrent device interrupt vectors, we need to look at the
vfio_irq_info.count value for the desired index, ie. the extent of the
entries in the row associated with our column index type. Thanks,
Alex
> s->irq_type = irq_type;
> s->irq_count = irq_count;
>
> diff --git a/util/trace-events b/util/trace-events
> index 0ce42822eb..2e85555be3 100644
> --- a/util/trace-events
> +++ b/util/trace-events
> @@ -83,3 +83,4 @@ qemu_vfio_new_mapping(void *s, void *host, size_t size, int
> index, uint64_t iova
> qemu_vfio_do_mapping(void *s, void *host, size_t size, uint64_t iova) "s %p
> host %p size %zu iova 0x%"PRIx64
> qemu_vfio_dma_map(void *s, void *host, size_t size, bool temporary, uint64_t
> *iova) "s %p host %p size %zu temporary %d iova %p"
> qemu_vfio_dma_unmap(void *s, void *host) "s %p host %p"
> +qemu_vfio_init_pci(uint32_t count) "device interrupt count: %"PRIu32
- [RFC PATCH v2 0/7] util/vfio-helpers: Add support for multiple IRQs, Philippe Mathieu-Daudé, 2020/08/13
- [RFC PATCH v2 1/7] util/vfio-helpers: Store eventfd using int32_t type, Philippe Mathieu-Daudé, 2020/08/13
- [RFC PATCH v2 2/7] util/vfio-helpers: Move IRQ 'type' from pci_init_irq() to open_pci(), Philippe Mathieu-Daudé, 2020/08/13
- [RFC PATCH v2 3/7] util/vfio-helpers: Introduce 'irq_count' variable, Philippe Mathieu-Daudé, 2020/08/13
- [RFC PATCH v2 4/7] util/vfio-helpers: Check the device allow up to 'irq_count' IRQs, Philippe Mathieu-Daudé, 2020/08/13
- Re: [RFC PATCH v2 4/7] util/vfio-helpers: Check the device allow up to 'irq_count' IRQs,
Alex Williamson <=
- [RFC PATCH v2 5/7] util/vfio-helpers: Support multiple eventfd, Philippe Mathieu-Daudé, 2020/08/13
- [RFC PATCH v2 6/7] util/vfio-helpers: Allow to set EventNotifier to particular IRQ, Philippe Mathieu-Daudé, 2020/08/13
- [RFC PATCH v2 7/7] util/vfio-helpers: Allow opening device requesting for multiple IRQs, Philippe Mathieu-Daudé, 2020/08/13