git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net/bnxt: fix race between interrupt handler and dev config
[dpdk.git]
/
drivers
/
net
/
af_xdp
/
rte_eth_af_xdp.c
diff --git
a/drivers/net/af_xdp/rte_eth_af_xdp.c
b/drivers/net/af_xdp/rte_eth_af_xdp.c
index
ff8e905
..
f9686c2
100644
(file)
--- a/
drivers/net/af_xdp/rte_eth_af_xdp.c
+++ b/
drivers/net/af_xdp/rte_eth_af_xdp.c
@@
-97,7
+97,6
@@
struct pkt_rx_queue {
struct tx_stats {
uint64_t tx_pkts;
struct tx_stats {
uint64_t tx_pkts;
- uint64_t err_pkts;
uint64_t tx_bytes;
};
uint64_t tx_bytes;
};
@@
-404,7
+403,7
@@
eth_dev_configure(struct rte_eth_dev *dev)
return 0;
}
return 0;
}
-static
void
+static
int
eth_dev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
{
struct pmd_internals *internals = dev->data->dev_private;
eth_dev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
{
struct pmd_internals *internals = dev->data->dev_private;
@@
-422,6
+421,8
@@
eth_dev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
dev_info->default_txportconf.nb_queues = 1;
dev_info->default_rxportconf.ring_size = ETH_AF_XDP_DFLT_NUM_DESCS;
dev_info->default_txportconf.ring_size = ETH_AF_XDP_DFLT_NUM_DESCS;
dev_info->default_txportconf.nb_queues = 1;
dev_info->default_rxportconf.ring_size = ETH_AF_XDP_DFLT_NUM_DESCS;
dev_info->default_txportconf.ring_size = ETH_AF_XDP_DFLT_NUM_DESCS;
+
+ return 0;
}
static int
}
static int
@@
-456,14
+457,13
@@
eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
stats->imissed += xdp_stats.rx_dropped;
stats->opackets += stats->q_opackets[i];
stats->imissed += xdp_stats.rx_dropped;
stats->opackets += stats->q_opackets[i];
- stats->oerrors += txq->stats.err_pkts;
stats->obytes += stats->q_obytes[i];
}
return 0;
}
stats->obytes += stats->q_obytes[i];
}
return 0;
}
-static
void
+static
int
eth_stats_reset(struct rte_eth_dev *dev)
{
struct pmd_internals *internals = dev->data->dev_private;
eth_stats_reset(struct rte_eth_dev *dev)
{
struct pmd_internals *internals = dev->data->dev_private;
@@
-475,6
+475,8
@@
eth_stats_reset(struct rte_eth_dev *dev)
memset(&internals->tx_queues[i].stats, 0,
sizeof(struct tx_stats));
}
memset(&internals->tx_queues[i].stats, 0,
sizeof(struct tx_stats));
}
+
+ return 0;
}
static void
}
static void
@@
-746,41
+748,47
@@
eth_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
return (ret < 0) ? -errno : 0;
}
return (ret < 0) ? -errno : 0;
}
-static
void
+static
int
eth_dev_change_flags(char *if_name, uint32_t flags, uint32_t mask)
{
struct ifreq ifr;
eth_dev_change_flags(char *if_name, uint32_t flags, uint32_t mask)
{
struct ifreq ifr;
+ int ret = 0;
int s;
s = socket(PF_INET, SOCK_DGRAM, 0);
if (s < 0)
int s;
s = socket(PF_INET, SOCK_DGRAM, 0);
if (s < 0)
- return;
+ return
-errno
;
strlcpy(ifr.ifr_name, if_name, IFNAMSIZ);
strlcpy(ifr.ifr_name, if_name, IFNAMSIZ);
- if (ioctl(s, SIOCGIFFLAGS, &ifr) < 0)
+ if (ioctl(s, SIOCGIFFLAGS, &ifr) < 0) {
+ ret = -errno;
goto out;
goto out;
+ }
ifr.ifr_flags &= mask;
ifr.ifr_flags |= flags;
ifr.ifr_flags &= mask;
ifr.ifr_flags |= flags;
- if (ioctl(s, SIOCSIFFLAGS, &ifr) < 0)
+ if (ioctl(s, SIOCSIFFLAGS, &ifr) < 0) {
+ ret = -errno;
goto out;
goto out;
+ }
out:
close(s);
out:
close(s);
+ return ret;
}
}
-static
void
+static
int
eth_dev_promiscuous_enable(struct rte_eth_dev *dev)
{
struct pmd_internals *internals = dev->data->dev_private;
eth_dev_promiscuous_enable(struct rte_eth_dev *dev)
{
struct pmd_internals *internals = dev->data->dev_private;
- eth_dev_change_flags(internals->if_name, IFF_PROMISC, ~0);
+
return
eth_dev_change_flags(internals->if_name, IFF_PROMISC, ~0);
}
}
-static
void
+static
int
eth_dev_promiscuous_disable(struct rte_eth_dev *dev)
{
struct pmd_internals *internals = dev->data->dev_private;
eth_dev_promiscuous_disable(struct rte_eth_dev *dev)
{
struct pmd_internals *internals = dev->data->dev_private;
- eth_dev_change_flags(internals->if_name, 0, ~IFF_PROMISC);
+
return
eth_dev_change_flags(internals->if_name, 0, ~IFF_PROMISC);
}
static const struct eth_dev_ops ops = {
}
static const struct eth_dev_ops ops = {
@@
-852,9
+860,13
@@
xdp_get_channels_info(const char *if_name, int *max_queues,
ifr.ifr_data = (void *)&channels;
strncpy(ifr.ifr_name, if_name, IFNAMSIZ);
ret = ioctl(fd, SIOCETHTOOL, &ifr);
ifr.ifr_data = (void *)&channels;
strncpy(ifr.ifr_name, if_name, IFNAMSIZ);
ret = ioctl(fd, SIOCETHTOOL, &ifr);
- if (ret && errno != EOPNOTSUPP) {
- ret = -errno;
- goto out;
+ if (ret) {
+ if (errno == EOPNOTSUPP) {
+ ret = 0;
+ } else {
+ ret = -errno;
+ goto out;
+ }
}
if (channels.max_combined == 0 || errno == EOPNOTSUPP) {
}
if (channels.max_combined == 0 || errno == EOPNOTSUPP) {