qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH PULL v2 09/10] hw/rdma: Implementation of PVRDMA


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH PULL v2 09/10] hw/rdma: Implementation of PVRDMA device
Date: Fri, 27 Apr 2018 15:55:16 +0100

On 19 February 2018 at 11:43, Marcel Apfelbaum <address@hidden> wrote:
> From: Yuval Shaia <address@hidden>
>
> PVRDMA is the QEMU implementation of VMware's paravirtualized RDMA device.
> It works with its Linux Kernel driver AS IS, no need for any special
> guest modifications.
>
> While it complies with the VMware device, it can also communicate with
> bare metal RDMA-enabled machines and does not require an RDMA HCA in the
> host, it can work with Soft-RoCE (rxe).
>
> It does not require the whole guest RAM to be pinned allowing memory
> over-commit and, even if not implemented yet, migration support will be
> possible with some HW assistance.
>
> Implementation is divided into 2 components, rdma general and pvRDMA
> specific functions and structures.
>
> The second PVRDMA sub-module - interaction with PCI layer.
> - Device configuration and setup (MSIX, BARs etc).
> - Setup of DSR (Device Shared Resources)
> - Setup of device ring.
> - Device management.
>
> Reviewed-by: Dotan Barak <address@hidden>
> Reviewed-by: Zhu Yanjun <address@hidden>
> Signed-off-by: Yuval Shaia <address@hidden>
> Signed-off-by: Marcel Apfelbaum <address@hidden>


> +static void free_ports(PVRDMADev *dev)
> +{
> +    int i;
> +
> +    for (i = 0; i < MAX_PORTS; i++) {
> +        g_free(dev->rdma_dev_res.ports[i].gid_tbl);

Coverity (CID 1390628) points out that this is attempting to
call free on an array, which is not valid...

> +    }
> +}
> +
> +static void init_ports(PVRDMADev *dev, Error **errp)
> +{
> +    int i;
> +
> +    memset(dev->rdma_dev_res.ports, 0, sizeof(dev->rdma_dev_res.ports));
> +
> +    for (i = 0; i < MAX_PORTS; i++) {
> +        dev->rdma_dev_res.ports[i].state = PVRDMA_PORT_DOWN;
> +
> +        dev->rdma_dev_res.ports[i].pkey_tbl =
> +            g_malloc0(sizeof(*dev->rdma_dev_res.ports[i].pkey_tbl) *
> +                      MAX_PORT_PKEYS);

...init_ports() is allocated memory into ports[i].pkey_tbl,
so maybe this is what free_ports() is intended to be freeing ?

> +    }
> +}

thanks
-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]