net/virtio: do not depend on PCI device of ethdev
We don't need to depend on rte_eth_dev->pci_dev to differentiate between the virtio_user and the virtio_pci case. Instead we can use the private virtio_hw struct to get that information. Signed-off-by: Jan Blunck <jblunck@infradead.org> Acked-by: Shreyansh Jain <shreyansh.jain@nxp.com>
This commit is contained in:
parent
f5880e1f29
commit
6a7c0dfcdf
@ -483,11 +483,11 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
|
|||||||
hw->cvq = cvq;
|
hw->cvq = cvq;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For virtio_user case (that is when dev->pci_dev is NULL), we use
|
/* For virtio_user case (that is when hw->dev is NULL), we use
|
||||||
* virtual address. And we need properly set _offset_, please see
|
* virtual address. And we need properly set _offset_, please see
|
||||||
* VIRTIO_MBUF_DATA_DMA_ADDR in virtqueue.h for more information.
|
* VIRTIO_MBUF_DATA_DMA_ADDR in virtqueue.h for more information.
|
||||||
*/
|
*/
|
||||||
if (dev->pci_dev)
|
if (hw->dev)
|
||||||
vq->offset = offsetof(struct rte_mbuf, buf_physaddr);
|
vq->offset = offsetof(struct rte_mbuf, buf_physaddr);
|
||||||
else {
|
else {
|
||||||
vq->vq_ring_mem = (uintptr_t)mz->addr;
|
vq->vq_ring_mem = (uintptr_t)mz->addr;
|
||||||
@ -1190,7 +1190,7 @@ virtio_init_device(struct rte_eth_dev *eth_dev, uint64_t req_features)
|
|||||||
struct virtio_hw *hw = eth_dev->data->dev_private;
|
struct virtio_hw *hw = eth_dev->data->dev_private;
|
||||||
struct virtio_net_config *config;
|
struct virtio_net_config *config;
|
||||||
struct virtio_net_config local_config;
|
struct virtio_net_config local_config;
|
||||||
struct rte_pci_device *pci_dev = eth_dev->pci_dev;
|
struct rte_pci_device *pci_dev = hw->dev;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* Reset the device although not necessary at startup */
|
/* Reset the device although not necessary at startup */
|
||||||
@ -1210,6 +1210,7 @@ virtio_init_device(struct rte_eth_dev *eth_dev, uint64_t req_features)
|
|||||||
else
|
else
|
||||||
eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC;
|
eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC;
|
||||||
|
|
||||||
|
if (pci_dev)
|
||||||
rte_eth_copy_pci_info(eth_dev, pci_dev);
|
rte_eth_copy_pci_info(eth_dev, pci_dev);
|
||||||
|
|
||||||
rx_func_get(eth_dev);
|
rx_func_get(eth_dev);
|
||||||
@ -1294,7 +1295,6 @@ int
|
|||||||
eth_virtio_dev_init(struct rte_eth_dev *eth_dev)
|
eth_virtio_dev_init(struct rte_eth_dev *eth_dev)
|
||||||
{
|
{
|
||||||
struct virtio_hw *hw = eth_dev->data->dev_private;
|
struct virtio_hw *hw = eth_dev->data->dev_private;
|
||||||
struct rte_pci_device *pci_dev;
|
|
||||||
uint32_t dev_flags = RTE_ETH_DEV_DETACHABLE;
|
uint32_t dev_flags = RTE_ETH_DEV_DETACHABLE;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -1317,10 +1317,11 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
pci_dev = eth_dev->pci_dev;
|
/* For virtio_user case the hw->virtio_user_dev is populated by
|
||||||
|
* virtio_user_eth_dev_alloc() before eth_virtio_dev_init() is called.
|
||||||
if (pci_dev) {
|
*/
|
||||||
ret = vtpci_init(pci_dev, hw, &dev_flags);
|
if (!hw->virtio_user_dev) {
|
||||||
|
ret = vtpci_init(eth_dev->pci_dev, hw, &dev_flags);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -1343,7 +1344,6 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev)
|
|||||||
static int
|
static int
|
||||||
eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev)
|
eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev)
|
||||||
{
|
{
|
||||||
struct rte_pci_device *pci_dev;
|
|
||||||
struct virtio_hw *hw = eth_dev->data->dev_private;
|
struct virtio_hw *hw = eth_dev->data->dev_private;
|
||||||
|
|
||||||
PMD_INIT_FUNC_TRACE();
|
PMD_INIT_FUNC_TRACE();
|
||||||
@ -1353,7 +1353,6 @@ eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev)
|
|||||||
|
|
||||||
virtio_dev_stop(eth_dev);
|
virtio_dev_stop(eth_dev);
|
||||||
virtio_dev_close(eth_dev);
|
virtio_dev_close(eth_dev);
|
||||||
pci_dev = eth_dev->pci_dev;
|
|
||||||
|
|
||||||
eth_dev->dev_ops = NULL;
|
eth_dev->dev_ops = NULL;
|
||||||
eth_dev->tx_pkt_burst = NULL;
|
eth_dev->tx_pkt_burst = NULL;
|
||||||
@ -1367,7 +1366,8 @@ eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev)
|
|||||||
rte_intr_callback_unregister(vtpci_intr_handle(hw),
|
rte_intr_callback_unregister(vtpci_intr_handle(hw),
|
||||||
virtio_interrupt_handler,
|
virtio_interrupt_handler,
|
||||||
eth_dev);
|
eth_dev);
|
||||||
rte_eal_pci_unmap_device(pci_dev);
|
if (hw->dev)
|
||||||
|
rte_eal_pci_unmap_device(hw->dev);
|
||||||
|
|
||||||
PMD_INIT_LOG(DEBUG, "dev_uninit completed");
|
PMD_INIT_LOG(DEBUG, "dev_uninit completed");
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user