net/virtio: store PCI operators pointer locally
authorYuanhan Liu <yuanhan.liu@linux.intel.com>
Fri, 6 Jan 2017 10:16:17 +0000 (18:16 +0800)
committerYuanhan Liu <yuanhan.liu@linux.intel.com>
Tue, 17 Jan 2017 08:20:18 +0000 (09:20 +0100)
commit553f45932fb797e9fbd6342016e0dd53e1f61fc7
tree8975e4969acd1144c6bbb556f81bdc18b3805242
parentd4be35a91340b8474bd5f8b6bcaa26084bb30c9f
net/virtio: store PCI operators pointer locally

We used to store the vtpci_ops at virtio_hw structure. The struct,
however, is stored in shared memory. That means only one value is
allowed. For the multiple process model, however, the address of
vtpci_ops should be different among different processes.

Take virtio PMD as example, the vtpci_ops is set by the primary
process, based on its own process space. If we access that address
from the secondary process, that would be an illegal memory access,
A crash then might happen.

To make the multiple process model work, we need store the vtpci_ops
in local memory but not in a shared memory. This is what the patch
does: a local virtio_hw_internal array of size RTE_MAX_ETHPORTS is
allocated. This new structure is used to store all these kind of
info in a non-shared memory. Current, we have:

- vtpci_ops

- rte_pci_ioport

- virtio pci mapped memory, such as common_cfg.

The later two will be done in coming patches. Later patches would also
set them correctly for secondary process, so that the multiple process
model could work.

Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
drivers/net/virtio/virtio_ethdev.c
drivers/net/virtio/virtio_pci.c
drivers/net/virtio/virtio_pci.h
drivers/net/virtio/virtio_user_ethdev.c
drivers/net/virtio/virtqueue.h