@@ -592,7 +592,8 @@ failsafe_eth_rmv_event_callback(uint16_t port_id __rte_unused,
{
struct sub_device *sdev = cb_arg;
- fs_lock(fs_dev(sdev), 0);
+ if (fs_lock(fs_dev(sdev), 0) != 0)
+ return -1;
/* Switch as soon as possible tx_dev. */
fs_switch_dev(fs_dev(sdev), sdev);
/* Use safe bursts in any case. */
@@ -72,7 +72,9 @@ fs_flow_validate(struct rte_eth_dev *dev,
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
DEBUG("Calling rte_flow_validate on sub_device %d", i);
ret = rte_flow_validate(PORT_ID(sdev),
@@ -99,7 +101,8 @@ fs_flow_create(struct rte_eth_dev *dev,
struct rte_flow *flow;
uint8_t i;
- fs_lock(dev, 0);
+ if (fs_lock(dev, 0) != 0)
+ return NULL;
flow = fs_flow_allocate(attr, patterns, actions);
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
flow->flows[i] = rte_flow_create(PORT_ID(sdev),
@@ -137,8 +140,9 @@ fs_flow_destroy(struct rte_eth_dev *dev,
ERROR("Invalid flow");
return -EINVAL;
}
- ret = 0;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
int local_ret;
@@ -169,7 +173,9 @@ fs_flow_flush(struct rte_eth_dev *dev,
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
DEBUG("Calling rte_flow_flush on sub_device %d", i);
ret = rte_flow_flush(PORT_ID(sdev), error);
@@ -197,7 +203,8 @@ fs_flow_query(struct rte_eth_dev *dev,
{
struct sub_device *sdev;
- fs_lock(dev, 0);
+ if (fs_lock(dev, 0) != 0)
+ return -1;
sdev = TX_SUBDEV(dev);
if (sdev != NULL) {
int ret = rte_flow_query(PORT_ID(sdev),
@@ -223,7 +230,9 @@ fs_flow_isolate(struct rte_eth_dev *dev,
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV(sdev, i, dev) {
if (sdev->state < DEV_PROBED)
continue;
@@ -28,7 +28,9 @@ fs_dev_configure(struct rte_eth_dev *dev)
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV(sdev, i, dev) {
int rmv_interrupt = 0;
int lsc_interrupt = 0;
@@ -129,7 +131,9 @@ fs_dev_start(struct rte_eth_dev *dev)
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
ret = failsafe_rx_intr_install(dev);
if (ret) {
fs_unlock(dev, 0);
@@ -189,7 +193,9 @@ fs_dev_stop(struct rte_eth_dev *dev)
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
PRIV(dev)->state = DEV_STARTED - 1;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_STARTED) {
ret = rte_eth_dev_stop(PORT_ID(sdev));
@@ -217,7 +223,9 @@ fs_dev_set_link_up(struct rte_eth_dev *dev)
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
DEBUG("Calling rte_eth_dev_set_link_up on sub_device %d", i);
ret = rte_eth_dev_set_link_up(PORT_ID(sdev));
@@ -239,7 +247,9 @@ fs_dev_set_link_down(struct rte_eth_dev *dev)
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
DEBUG("Calling rte_eth_dev_set_link_down on sub_device %d", i);
ret = rte_eth_dev_set_link_down(PORT_ID(sdev));
@@ -263,7 +273,9 @@ fs_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id)
int err = 0;
bool failure = true;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
uint16_t port_id = ETH(sdev)->data->port_id;
@@ -289,7 +301,9 @@ fs_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id)
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
uint16_t port_id = ETH(sdev)->data->port_id;
@@ -316,7 +330,9 @@ fs_tx_queue_stop(struct rte_eth_dev *dev, uint16_t tx_queue_id)
int err = 0;
bool failure = true;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
uint16_t port_id = ETH(sdev)->data->port_id;
@@ -342,7 +358,9 @@ fs_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id)
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
uint16_t port_id = ETH(sdev)->data->port_id;
@@ -369,7 +387,8 @@ fs_rx_queue_release(struct rte_eth_dev *dev, uint16_t qid)
if (rxq == NULL)
return;
- fs_lock(dev, 0);
+ if (fs_lock(dev, 0) != 0)
+ return;
if (rxq->event_fd >= 0)
close(rxq->event_fd);
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
@@ -395,7 +414,9 @@ fs_rx_queue_setup(struct rte_eth_dev *dev,
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
if (rx_conf->rx_deferred_start) {
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_PROBED) {
if (SUBOPS(sdev, rx_queue_start) == NULL) {
@@ -466,7 +487,9 @@ fs_rx_intr_enable(struct rte_eth_dev *dev, uint16_t idx)
int ret;
int rc = 0;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
if (idx >= dev->data->nb_rx_queues) {
rc = -EINVAL;
goto unlock;
@@ -506,7 +529,9 @@ fs_rx_intr_disable(struct rte_eth_dev *dev, uint16_t idx)
int rc = 0;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
if (idx >= dev->data->nb_rx_queues) {
rc = -EINVAL;
goto unlock;
@@ -542,7 +567,8 @@ fs_tx_queue_release(struct rte_eth_dev *dev, uint16_t qid)
if (txq == NULL)
return;
- fs_lock(dev, 0);
+ if (fs_lock(dev, 0) != 0)
+ return;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
if (ETH(sdev)->data->tx_queues != NULL &&
ETH(sdev)->data->tx_queues[txq->qid] != NULL)
@@ -565,7 +591,9 @@ fs_tx_queue_setup(struct rte_eth_dev *dev,
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
if (tx_conf->tx_deferred_start) {
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_PROBED) {
if (SUBOPS(sdev, tx_queue_start) == NULL) {
@@ -639,7 +667,9 @@ failsafe_eth_dev_close(struct rte_eth_dev *dev)
uint8_t i;
int err, ret = 0;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
failsafe_hotplug_alarm_cancel(dev);
if (PRIV(dev)->state == DEV_STARTED) {
ret = dev->dev_ops->dev_stop(dev);
@@ -693,7 +723,9 @@ fs_promiscuous_enable(struct rte_eth_dev *dev)
uint8_t i;
int ret = 0;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
ret = rte_eth_promiscuous_enable(PORT_ID(sdev));
ret = fs_err(sdev, ret);
@@ -725,7 +757,9 @@ fs_promiscuous_disable(struct rte_eth_dev *dev)
uint8_t i;
int ret = 0;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
ret = rte_eth_promiscuous_disable(PORT_ID(sdev));
ret = fs_err(sdev, ret);
@@ -757,7 +791,9 @@ fs_allmulticast_enable(struct rte_eth_dev *dev)
uint8_t i;
int ret = 0;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
ret = rte_eth_allmulticast_enable(PORT_ID(sdev));
ret = fs_err(sdev, ret);
@@ -789,7 +825,9 @@ fs_allmulticast_disable(struct rte_eth_dev *dev)
uint8_t i;
int ret = 0;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
ret = rte_eth_allmulticast_disable(PORT_ID(sdev));
ret = fs_err(sdev, ret);
@@ -822,7 +860,9 @@ fs_link_update(struct rte_eth_dev *dev,
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
DEBUG("Calling link_update on sub_device %d", i);
ret = (SUBOPS(sdev, link_update))(ETH(sdev), wait_to_complete);
@@ -859,7 +899,9 @@ fs_stats_get(struct rte_eth_dev *dev,
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
rte_memcpy(stats, &PRIV(dev)->stats_accumulator, sizeof(*stats));
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
struct rte_eth_stats *snapshot = &sdev->stats_snapshot.stats;
@@ -893,7 +935,9 @@ fs_stats_reset(struct rte_eth_dev *dev)
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
ret = rte_eth_stats_reset(PORT_ID(sdev));
if (ret) {
@@ -983,7 +1027,9 @@ fs_xstats_get_names(struct rte_eth_dev *dev,
{
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
ret = __fs_xstats_get_names(dev, xstats_names, limit);
fs_unlock(dev, 0);
return ret;
@@ -1035,7 +1081,9 @@ fs_xstats_get(struct rte_eth_dev *dev,
{
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
ret = __fs_xstats_get(dev, xstats, n);
fs_unlock(dev, 0);
@@ -1048,9 +1096,11 @@ fs_xstats_reset(struct rte_eth_dev *dev)
{
struct sub_device *sdev;
uint8_t i;
- int r = 0;
+ int r;
- fs_lock(dev, 0);
+ r = fs_lock(dev, 0);
+ if (r != 0)
+ return r;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
r = rte_eth_xstats_reset(PORT_ID(sdev));
if (r < 0)
@@ -1238,7 +1288,8 @@ fs_dev_supported_ptypes_get(struct rte_eth_dev *dev)
struct rte_eth_dev *edev;
const uint32_t *ret;
- fs_lock(dev, 0);
+ if (fs_lock(dev, 0) != 0)
+ return NULL;
sdev = TX_SUBDEV(dev);
if (sdev == NULL) {
ret = NULL;
@@ -1270,7 +1321,9 @@ fs_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
DEBUG("Calling rte_eth_dev_set_mtu on sub_device %d", i);
ret = rte_eth_dev_set_mtu(PORT_ID(sdev), mtu);
@@ -1292,7 +1345,9 @@ fs_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
DEBUG("Calling rte_eth_dev_vlan_filter on sub_device %d", i);
ret = rte_eth_dev_vlan_filter(PORT_ID(sdev), vlan_id, on);
@@ -1314,7 +1369,9 @@ fs_flow_ctrl_get(struct rte_eth_dev *dev,
struct sub_device *sdev;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
sdev = TX_SUBDEV(dev);
if (sdev == NULL) {
ret = 0;
@@ -1338,7 +1395,9 @@ fs_flow_ctrl_set(struct rte_eth_dev *dev,
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
DEBUG("Calling rte_eth_dev_flow_ctrl_set on sub_device %d", i);
ret = rte_eth_dev_flow_ctrl_set(PORT_ID(sdev), fc_conf);
@@ -1359,7 +1418,8 @@ fs_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index)
struct sub_device *sdev;
uint8_t i;
- fs_lock(dev, 0);
+ if (fs_lock(dev, 0) != 0)
+ return;
/* No check: already done within the rte_eth_dev_mac_addr_remove
* call for the fail-safe device.
*/
@@ -1381,7 +1441,9 @@ fs_mac_addr_add(struct rte_eth_dev *dev,
uint8_t i;
RTE_ASSERT(index < FAILSAFE_MAX_ETHADDR);
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
ret = rte_eth_dev_mac_addr_add(PORT_ID(sdev), mac_addr, vmdq);
if ((ret = fs_err(sdev, ret))) {
@@ -1407,7 +1469,9 @@ fs_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr)
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
ret = rte_eth_dev_default_mac_addr_set(PORT_ID(sdev), mac_addr);
ret = fs_err(sdev, ret);
@@ -1432,7 +1496,9 @@ fs_set_mc_addr_list(struct rte_eth_dev *dev,
int ret;
void *mcast_addrs;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
ret = rte_eth_dev_set_mc_addr_list(PORT_ID(sdev),
@@ -1480,7 +1546,9 @@ fs_rss_hash_update(struct rte_eth_dev *dev,
uint8_t i;
int ret;
- fs_lock(dev, 0);
+ ret = fs_lock(dev, 0);
+ if (ret != 0)
+ return ret;
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
ret = rte_eth_dev_rss_hash_update(PORT_ID(sdev), rss_conf);
ret = fs_err(sdev, ret);