net/failsafe: replace local device with shared data
In multiprocess context, the private structure is shared between processes. The back reference from private to generic data was using a pointer to a per process eth_dev. It's now changed to a reference of the shared data. Signed-off-by: Raslan Darawsheh <rasland@mellanox.com> Signed-off-by: Thomas Monjalon <thomas@monjalon.net> Acked-by: Gaetan Rivet <gaetan.rivet@6wind.com>
This commit is contained in:
parent
e3bcaf3a0f
commit
0864701245
@ -181,7 +181,7 @@ fs_eth_dev_create(struct rte_vdev_device *vdev)
|
||||
return -1;
|
||||
}
|
||||
priv = PRIV(dev);
|
||||
priv->dev = dev;
|
||||
priv->data = dev->data;
|
||||
dev->dev_ops = &failsafe_ops;
|
||||
dev->data->mac_addrs = &PRIV(dev)->mac_addrs[0];
|
||||
dev->data->dev_link = eth_link;
|
||||
|
@ -133,8 +133,8 @@ fs_rx_event_proxy_service_install(struct fs_priv *priv)
|
||||
/* prepare service info */
|
||||
memset(&service, 0, sizeof(struct rte_service_spec));
|
||||
snprintf(service.name, sizeof(service.name), "%s_Rx_service",
|
||||
priv->dev->data->name);
|
||||
service.socket_id = priv->dev->data->numa_node;
|
||||
priv->data->name);
|
||||
service.socket_id = priv->data->numa_node;
|
||||
service.callback = fs_rx_event_proxy_routine;
|
||||
service.callback_userdata = priv;
|
||||
|
||||
@ -437,7 +437,7 @@ fs_rx_intr_vec_install(struct fs_priv *priv)
|
||||
unsigned int count;
|
||||
struct rte_intr_handle *intr_handle;
|
||||
|
||||
rxqs_n = priv->dev->data->nb_rx_queues;
|
||||
rxqs_n = priv->data->nb_rx_queues;
|
||||
n = RTE_MIN(rxqs_n, (uint32_t)RTE_MAX_RXTX_INTR_VEC_ID);
|
||||
count = 0;
|
||||
intr_handle = &priv->intr_handle;
|
||||
@ -452,7 +452,7 @@ fs_rx_intr_vec_install(struct fs_priv *priv)
|
||||
return -rte_errno;
|
||||
}
|
||||
for (i = 0; i < n; i++) {
|
||||
struct rxq *rxq = priv->dev->data->rx_queues[i];
|
||||
struct rxq *rxq = priv->data->rx_queues[i];
|
||||
|
||||
/* Skip queues that cannot request interrupts. */
|
||||
if (rxq == NULL || rxq->event_fd < 0) {
|
||||
@ -521,7 +521,7 @@ failsafe_rx_intr_install(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct fs_priv *priv = PRIV(dev);
|
||||
const struct rte_intr_conf *const intr_conf =
|
||||
&priv->dev->data->dev_conf.intr_conf;
|
||||
&priv->data->dev_conf.intr_conf;
|
||||
|
||||
if (intr_conf->rxq == 0 || dev->intr_handle != NULL)
|
||||
return 0;
|
||||
|
@ -452,7 +452,7 @@ fs_rx_queue_release(void *queue)
|
||||
if (queue == NULL)
|
||||
return;
|
||||
rxq = queue;
|
||||
dev = rxq->priv->dev;
|
||||
dev = &rte_eth_devices[rxq->priv->data->port_id];
|
||||
fs_lock(dev, 0);
|
||||
if (rxq->event_fd > 0)
|
||||
close(rxq->event_fd);
|
||||
@ -636,7 +636,7 @@ fs_tx_queue_release(void *queue)
|
||||
if (queue == NULL)
|
||||
return;
|
||||
txq = queue;
|
||||
dev = txq->priv->dev;
|
||||
dev = &rte_eth_devices[txq->priv->data->port_id];
|
||||
fs_lock(dev, 0);
|
||||
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
|
||||
if (ETH(sdev)->data->tx_queues != NULL &&
|
||||
|
@ -128,8 +128,12 @@ struct sub_device {
|
||||
unsigned int lsc_callback:1;
|
||||
};
|
||||
|
||||
/*
|
||||
* This is referenced by eth_dev->data->dev_private
|
||||
* This is shared between processes.
|
||||
*/
|
||||
struct fs_priv {
|
||||
struct rte_eth_dev *dev;
|
||||
struct rte_eth_dev_data *data; /* backreference to shared data. */
|
||||
/*
|
||||
* Set of sub_devices.
|
||||
* subs[0] is the preferred device
|
||||
|
@ -126,7 +126,7 @@ failsafe_tx_burst(void *queue,
|
||||
uint16_t nb_tx;
|
||||
|
||||
txq = queue;
|
||||
sdev = TX_SUBDEV(txq->priv->dev);
|
||||
sdev = TX_SUBDEV(&rte_eth_devices[txq->priv->data->port_id]);
|
||||
if (unlikely(fs_tx_unsafe(sdev)))
|
||||
return 0;
|
||||
sub_txq = ETH(sdev)->data->tx_queues[txq->qid];
|
||||
@ -147,7 +147,7 @@ failsafe_tx_burst_fast(void *queue,
|
||||
uint16_t nb_tx;
|
||||
|
||||
txq = queue;
|
||||
sdev = TX_SUBDEV(txq->priv->dev);
|
||||
sdev = TX_SUBDEV(&rte_eth_devices[txq->priv->data->port_id]);
|
||||
RTE_ASSERT(!fs_tx_unsafe(sdev));
|
||||
sub_txq = ETH(sdev)->data->tx_queues[txq->qid];
|
||||
FS_ATOMIC_P(txq->refcnt[sdev->sid]);
|
||||
|
Loading…
Reference in New Issue
Block a user