[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v6 08/20] hw/block/nvme: allow use of any valid msix vector
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [PATCH v6 08/20] hw/block/nvme: allow use of any valid msix vector |
Date: |
Thu, 28 May 2020 17:44:40 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 |
On 5/14/20 6:45 AM, Klaus Jensen wrote:
> From: Klaus Jensen <k.jensen@samsung.com>
>
> If the device uses MSI-X, any of the 2048 MSI-X interrupt vectors are
> valid. If the device is not using MSI-X, vector will and can only be
> zero at this point.
>
> Cc: "Michael S. Tsirkin" <mst@redhat.com>
> Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
> ---
> hw/block/nvme.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/hw/block/nvme.c b/hw/block/nvme.c
> index c9d10df1f763..a2e6734c7a25 100644
> --- a/hw/block/nvme.c
> +++ b/hw/block/nvme.c
> @@ -657,7 +657,7 @@ static uint16_t nvme_create_cq(NvmeCtrl *n, NvmeCmd *cmd)
> trace_pci_nvme_err_invalid_create_cq_vector(vector);
> return NVME_INVALID_IRQ_VECTOR | NVME_DNR;
> }
> - if (unlikely(vector > n->params.num_queues)) {
> + if (unlikely(vector > PCI_MSIX_FLAGS_QSIZE)) {
> trace_pci_nvme_err_invalid_create_cq_vector(vector);
> return NVME_INVALID_IRQ_VECTOR | NVME_DNR;
> }
>
Is it worth adding this?
--- a/hw/block/nvme.c
+++ b/hw/block/nvme.c
@@ -613,6 +613,8 @@ static uint16_t nvme_del_cq(NvmeCtrl *n, NvmeCmd *cmd)
static void nvme_init_cq(NvmeCQueue *cq, NvmeCtrl *n, uint64_t dma_addr,
uint16_t cqid, uint16_t vector, uint16_t size, uint16_t irq_enabled)
{
+ int ret;
+
cq->ctrl = n;
cq->cqid = cqid;
cq->size = size;
@@ -623,7 +625,8 @@ static void nvme_init_cq(NvmeCQueue *cq, NvmeCtrl
*n, uint64_t dma_addr,
cq->head = cq->tail = 0;
QTAILQ_INIT(&cq->req_list);
QTAILQ_INIT(&cq->sq_list);
- msix_vector_use(&n->parent_obj, cq->vector);
+ ret = msix_vector_use(&n->parent_obj, cq->vector);
+ assert(ret == 0);
n->cq[cqid] = cq;
cq->timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, nvme_post_cqes, cq);
}
Otherwise:
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
- [PATCH v6 00/20] nvme: small fixes, refactoring and cleanups, Klaus Jensen, 2020/05/14
- [PATCH v6 01/20] hw/block/nvme: fix pci doorbell size calculation, Klaus Jensen, 2020/05/14
- [PATCH v6 03/20] hw/block/nvme: remove superfluous breaks, Klaus Jensen, 2020/05/14
- [PATCH v6 04/20] hw/block/nvme: move device parameters to separate struct, Klaus Jensen, 2020/05/14
- [PATCH v6 02/20] hw/block/nvme: rename trace events to pci_nvme, Klaus Jensen, 2020/05/14
- [PATCH v6 08/20] hw/block/nvme: allow use of any valid msix vector, Klaus Jensen, 2020/05/14
- Re: [PATCH v6 08/20] hw/block/nvme: allow use of any valid msix vector,
Philippe Mathieu-Daudé <=
- [PATCH v6 09/20] hw/block/nvme: add max_ioqpairs device parameter, Klaus Jensen, 2020/05/14
- [PATCH v6 10/20] hw/block/nvme: remove redundant cmbloc/cmbsz members, Klaus Jensen, 2020/05/14
- [PATCH v6 07/20] hw/block/nvme: fix pin-based interrupt behavior, Klaus Jensen, 2020/05/14
- [PATCH v6 06/20] hw/block/nvme: refactor nvme_addr_read, Klaus Jensen, 2020/05/14
- [PATCH v6 05/20] hw/block/nvme: use constants in identify, Klaus Jensen, 2020/05/14
- [PATCH v6 12/20] hw/block/nvme: factor out device state setup, Klaus Jensen, 2020/05/14
- [PATCH v6 11/20] hw/block/nvme: factor out property/constraint checks, Klaus Jensen, 2020/05/14