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/mvpp2: remove CRC length from MRU validation
[dpdk.git]
/
drivers
/
net
/
mvpp2
/
mrvl_ethdev.c
diff --git
a/drivers/net/mvpp2/mrvl_ethdev.c
b/drivers/net/mvpp2/mrvl_ethdev.c
index
b98b1fd
..
476227b
100644
(file)
--- a/
drivers/net/mvpp2/mrvl_ethdev.c
+++ b/
drivers/net/mvpp2/mrvl_ethdev.c
@@
-5,7
+5,7
@@
*/
#include <rte_string_fns.h>
*/
#include <rte_string_fns.h>
-#include <
rte_
ethdev_driver.h>
+#include <ethdev_driver.h>
#include <rte_kvargs.h>
#include <rte_log.h>
#include <rte_malloc.h>
#include <rte_kvargs.h>
#include <rte_log.h>
#include <rte_malloc.h>
@@
-84,8
+84,6
@@
static struct pp2_bpool *mrvl_port_to_bpool_lookup[RTE_MAX_ETHPORTS];
static int mrvl_port_bpool_size[PP2_NUM_PKT_PROC][PP2_BPOOL_NUM_POOLS][RTE_MAX_LCORE];
static uint64_t cookie_addr_high = MRVL_COOKIE_ADDR_INVALID;
static int mrvl_port_bpool_size[PP2_NUM_PKT_PROC][PP2_BPOOL_NUM_POOLS][RTE_MAX_LCORE];
static uint64_t cookie_addr_high = MRVL_COOKIE_ADDR_INVALID;
-int mrvl_logtype;
-
struct mrvl_ifnames {
const char *names[PP2_NUM_ETH_PPIO * PP2_NUM_PKT_PROC];
int idx;
struct mrvl_ifnames {
const char *names[PP2_NUM_ETH_PPIO * PP2_NUM_PKT_PROC];
int idx;
@@
-443,8
+441,8
@@
mrvl_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
* when this feature has not been enabled/supported so far
* (TODO check scattered_rx flag here once scattered RX is supported).
*/
* when this feature has not been enabled/supported so far
* (TODO check scattered_rx flag here once scattered RX is supported).
*/
- if (mru + MRVL_PKT_OFFS > mbuf_data_size) {
- mru = mbuf_data_size - MRVL_PKT_OFFS;
+ if (mru
- RTE_ETHER_CRC_LEN
+ MRVL_PKT_OFFS > mbuf_data_size) {
+ mru = mbuf_data_size
+ RTE_ETHER_CRC_LEN
- MRVL_PKT_OFFS;
mtu = MRVL_PP2_MRU_TO_MTU(mru);
MRVL_LOG(WARNING, "MTU too big, max MTU possible limitted "
"by current mbuf size: %u. Set MTU to %u, MRU to %u",
mtu = MRVL_PP2_MRU_TO_MTU(mru);
MRVL_LOG(WARNING, "MTU too big, max MTU possible limitted "
"by current mbuf size: %u. Set MTU to %u, MRU to %u",
@@
-673,18
+671,6
@@
mrvl_dev_start(struct rte_eth_dev *dev)
priv->uc_mc_flushed = 1;
}
priv->uc_mc_flushed = 1;
}
- if (!priv->vlan_flushed) {
- ret = pp2_ppio_flush_vlan(priv->ppio);
- if (ret) {
- MRVL_LOG(ERR, "Failed to flush vlan list");
- /*
- * TODO
- * once pp2_ppio_flush_vlan() is supported jump to out
- * goto out;
- */
- }
- priv->vlan_flushed = 1;
- }
ret = mrvl_mtu_set(dev, dev->data->mtu);
if (ret)
MRVL_LOG(ERR, "Failed to set MTU to %d", dev->data->mtu);
ret = mrvl_mtu_set(dev, dev->data->mtu);
if (ret)
MRVL_LOG(ERR, "Failed to set MTU to %d", dev->data->mtu);
@@
-816,7
+802,7
@@
mrvl_flush_bpool(struct rte_eth_dev *dev)
unsigned int core_id = rte_lcore_id();
if (core_id == LCORE_ID_ANY)
unsigned int core_id = rte_lcore_id();
if (core_id == LCORE_ID_ANY)
- core_id =
0
;
+ core_id =
rte_get_main_lcore()
;
hif = mrvl_get_hif(priv, core_id);
hif = mrvl_get_hif(priv, core_id);
@@
-845,10
+831,10
@@
mrvl_flush_bpool(struct rte_eth_dev *dev)
* @param dev
* Pointer to Ethernet device structure.
*/
* @param dev
* Pointer to Ethernet device structure.
*/
-static
void
+static
int
mrvl_dev_stop(struct rte_eth_dev *dev)
{
mrvl_dev_stop(struct rte_eth_dev *dev)
{
- mrvl_dev_set_link_down(dev);
+
return
mrvl_dev_set_link_down(dev);
}
/**
}
/**
@@
-857,12
+843,15
@@
mrvl_dev_stop(struct rte_eth_dev *dev)
* @param dev
* Pointer to Ethernet device structure.
*/
* @param dev
* Pointer to Ethernet device structure.
*/
-static
void
+static
int
mrvl_dev_close(struct rte_eth_dev *dev)
{
struct mrvl_priv *priv = dev->data->dev_private;
size_t i;
mrvl_dev_close(struct rte_eth_dev *dev)
{
struct mrvl_priv *priv = dev->data->dev_private;
size_t i;
+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+ return 0;
+
mrvl_flush_rx_queues(dev);
mrvl_flush_tx_shadow_queues(dev);
mrvl_flow_deinit(dev);
mrvl_flush_rx_queues(dev);
mrvl_flush_tx_shadow_queues(dev);
mrvl_flow_deinit(dev);
@@
-917,6
+906,8
@@
mrvl_dev_close(struct rte_eth_dev *dev)
mrvl_deinit_pp2();
rte_mvep_deinit(MVEP_MOD_T_PP2);
}
mrvl_deinit_pp2();
rte_mvep_deinit(MVEP_MOD_T_PP2);
}
+
+ return 0;
}
/**
}
/**
@@
-1611,8
+1602,8
@@
mrvl_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
static int
mrvl_fill_bpool(struct mrvl_rxq *rxq, int num)
{
static int
mrvl_fill_bpool(struct mrvl_rxq *rxq, int num)
{
- struct buff_release_entry entries[
MRVL_PP2_RXD_MAX
];
- struct rte_mbuf *mbufs[
MRVL_PP2_RXD_MAX
];
+ struct buff_release_entry entries[
num
];
+ struct rte_mbuf *mbufs[
num
];
int i, ret;
unsigned int core_id;
struct pp2_hif *hif;
int i, ret;
unsigned int core_id;
struct pp2_hif *hif;
@@
-1620,7
+1611,7
@@
mrvl_fill_bpool(struct mrvl_rxq *rxq, int num)
core_id = rte_lcore_id();
if (core_id == LCORE_ID_ANY)
core_id = rte_lcore_id();
if (core_id == LCORE_ID_ANY)
- core_id =
0
;
+ core_id =
rte_get_main_lcore()
;
hif = mrvl_get_hif(rxq->priv, core_id);
if (!hif)
hif = mrvl_get_hif(rxq->priv, core_id);
if (!hif)
@@
-1770,7
+1761,7
@@
mrvl_rx_queue_release(void *rxq)
unsigned int core_id = rte_lcore_id();
if (core_id == LCORE_ID_ANY)
unsigned int core_id = rte_lcore_id();
if (core_id == LCORE_ID_ANY)
- core_id =
0
;
+ core_id =
rte_get_main_lcore()
;
if (!q)
return;
if (!q)
return;
@@
-2168,7
+2159,6
@@
mrvl_desc_to_packet_type_and_offset(struct pp2_ppio_desc *desc,
*l4_offset = *l3_offset + MRVL_ARP_LENGTH;
break;
default:
*l4_offset = *l3_offset + MRVL_ARP_LENGTH;
break;
default:
- MRVL_LOG(DEBUG, "Failed to recognise l3 packet type");
break;
}
break;
}
@@
-2180,7
+2170,6
@@
mrvl_desc_to_packet_type_and_offset(struct pp2_ppio_desc *desc,
packet_type |= RTE_PTYPE_L4_UDP;
break;
default:
packet_type |= RTE_PTYPE_L4_UDP;
break;
default:
- MRVL_LOG(DEBUG, "Failed to recognise l4 packet type");
break;
}
break;
}
@@
-2250,10
+2239,9
@@
mrvl_rx_pkt_burst(void *rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
ret = pp2_ppio_recv(q->priv->ppio, q->priv->rxq_map[q->queue_id].tc,
q->priv->rxq_map[q->queue_id].inq, descs, &nb_pkts);
ret = pp2_ppio_recv(q->priv->ppio, q->priv->rxq_map[q->queue_id].tc,
q->priv->rxq_map[q->queue_id].inq, descs, &nb_pkts);
- if (unlikely(ret < 0)) {
- MRVL_LOG(ERR, "Failed to receive packets");
+ if (unlikely(ret < 0))
return 0;
return 0;
- }
+
mrvl_port_bpool_size[bpool->pp2_id][bpool->id][core_id] -= nb_pkts;
for (i = 0; i < nb_pkts; i++) {
mrvl_port_bpool_size[bpool->pp2_id][bpool->id][core_id] -= nb_pkts;
for (i = 0; i < nb_pkts; i++) {
@@
-2316,21
+2304,13
@@
mrvl_rx_pkt_burst(void *rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
if (unlikely(num <= q->priv->bpool_min_size ||
(!rx_done && num < q->priv->bpool_init_size))) {
if (unlikely(num <= q->priv->bpool_min_size ||
(!rx_done && num < q->priv->bpool_init_size))) {
- ret = mrvl_fill_bpool(q, MRVL_BURST_SIZE);
- if (ret)
- MRVL_LOG(ERR, "Failed to fill bpool");
+ mrvl_fill_bpool(q, MRVL_BURST_SIZE);
} else if (unlikely(num > q->priv->bpool_max_size)) {
int i;
int pkt_to_remove = num - q->priv->bpool_init_size;
struct rte_mbuf *mbuf;
struct pp2_buff_inf buff;
} else if (unlikely(num > q->priv->bpool_max_size)) {
int i;
int pkt_to_remove = num - q->priv->bpool_init_size;
struct rte_mbuf *mbuf;
struct pp2_buff_inf buff;
- MRVL_LOG(DEBUG,
- "port-%d:%d: bpool %d oversize - remove %d buffers (pool size: %d -> %d)",
- bpool->pp2_id, q->priv->ppio->port_id,
- bpool->id, pkt_to_remove, num,
- q->priv->bpool_init_size);
-
for (i = 0; i < pkt_to_remove; i++) {
ret = pp2_bpool_get_buff(hif, bpool, &buff);
if (ret)
for (i = 0; i < pkt_to_remove; i++) {
ret = pp2_bpool_get_buff(hif, bpool, &buff);
if (ret)
@@
-2523,12
+2503,8
@@
mrvl_tx_pkt_burst(void *txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
sq, q->queue_id, 0);
sq_free_size = MRVL_PP2_TX_SHADOWQ_SIZE - sq->size - 1;
sq, q->queue_id, 0);
sq_free_size = MRVL_PP2_TX_SHADOWQ_SIZE - sq->size - 1;
- if (unlikely(nb_pkts > sq_free_size)) {
- MRVL_LOG(DEBUG,
- "No room in shadow queue for %d packets! %d packets will be sent.",
- nb_pkts, sq_free_size);
+ if (unlikely(nb_pkts > sq_free_size))
nb_pkts = sq_free_size;
nb_pkts = sq_free_size;
- }
for (i = 0; i < nb_pkts; i++) {
struct rte_mbuf *mbuf = tx_pkts[i];
for (i = 0; i < nb_pkts; i++) {
struct rte_mbuf *mbuf = tx_pkts[i];
@@
-2645,10
+2621,6
@@
mrvl_tx_sg_pkt_burst(void *txq, struct rte_mbuf **tx_pkts,
*/
if (unlikely(total_descs > sq_free_size)) {
total_descs -= nb_segs;
*/
if (unlikely(total_descs > sq_free_size)) {
total_descs -= nb_segs;
- RTE_LOG(DEBUG, PMD,
- "No room in shadow queue for %d packets! "
- "%d packets will be sent.\n",
- nb_pkts, i);
break;
}
break;
}
@@
-2858,14
+2830,11
@@
mrvl_eth_dev_create(struct rte_vdev_device *vdev, const char *name)
memcpy(eth_dev->data->mac_addrs[0].addr_bytes,
req.ifr_addr.sa_data, RTE_ETHER_ADDR_LEN);
memcpy(eth_dev->data->mac_addrs[0].addr_bytes,
req.ifr_addr.sa_data, RTE_ETHER_ADDR_LEN);
- eth_dev->data->kdrv = RTE_KDRV_NONE;
eth_dev->device = &vdev->device;
eth_dev->rx_pkt_burst = mrvl_rx_pkt_burst;
mrvl_set_tx_function(eth_dev);
eth_dev->dev_ops = &mrvl_ops;
eth_dev->device = &vdev->device;
eth_dev->rx_pkt_burst = mrvl_rx_pkt_burst;
mrvl_set_tx_function(eth_dev);
eth_dev->dev_ops = &mrvl_ops;
-
- /* Flag to call rte_eth_dev_release_port() in rte_eth_dev_close(). */
- eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
+ eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
rte_eth_dev_probing_finish(eth_dev);
return 0;
rte_eth_dev_probing_finish(eth_dev);
return 0;
@@
-3023,14
+2992,15
@@
static int
rte_pmd_mrvl_remove(struct rte_vdev_device *vdev)
{
uint16_t port_id;
rte_pmd_mrvl_remove(struct rte_vdev_device *vdev)
{
uint16_t port_id;
+ int ret = 0;
RTE_ETH_FOREACH_DEV(port_id) {
if (rte_eth_devices[port_id].device != &vdev->device)
continue;
RTE_ETH_FOREACH_DEV(port_id) {
if (rte_eth_devices[port_id].device != &vdev->device)
continue;
- rte_eth_dev_close(port_id);
+ r
et |= r
te_eth_dev_close(port_id);
}
}
- return
0
;
+ return
ret == 0 ? 0 : -EIO
;
}
static struct rte_vdev_driver pmd_mrvl_drv = {
}
static struct rte_vdev_driver pmd_mrvl_drv = {
@@
-3040,10
+3010,4
@@
static struct rte_vdev_driver pmd_mrvl_drv = {
RTE_PMD_REGISTER_VDEV(net_mvpp2, pmd_mrvl_drv);
RTE_PMD_REGISTER_ALIAS(net_mvpp2, eth_mvpp2);
RTE_PMD_REGISTER_VDEV(net_mvpp2, pmd_mrvl_drv);
RTE_PMD_REGISTER_ALIAS(net_mvpp2, eth_mvpp2);
-
-RTE_INIT(mrvl_init_log)
-{
- mrvl_logtype = rte_log_register("pmd.net.mvpp2");
- if (mrvl_logtype >= 0)
- rte_log_set_level(mrvl_logtype, RTE_LOG_NOTICE);
-}
+RTE_LOG_REGISTER(mrvl_logtype, pmd.net.mvpp2, NOTICE);