X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_pmd_af_packet%2Frte_eth_af_packet.c;h=bdd9628674cb1974c9afaab57871c67fe37ba700;hb=980ed498eb1dd0dc671e6796cbc9d3138250d0d9;hp=755780a10af537e98b8b6280166bada53588ddd2;hpb=dd6590fe2fd7b08be2e31dd8549ed43f7e5435f2;p=dpdk.git diff --git a/lib/librte_pmd_af_packet/rte_eth_af_packet.c b/lib/librte_pmd_af_packet/rte_eth_af_packet.c index 755780a10a..bdd9628674 100644 --- a/lib/librte_pmd_af_packet/rte_eth_af_packet.c +++ b/lib/librte_pmd_af_packet/rte_eth_af_packet.c @@ -285,8 +285,6 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats) unsigned long rx_total = 0, tx_total = 0, tx_err_total = 0; const struct pmd_internals *internal = dev->data->dev_private; - memset(igb_stats, 0, sizeof(*igb_stats)); - imax = (internal->nb_queues < RTE_ETHDEV_QUEUE_STAT_CNTRS ? internal->nb_queues : RTE_ETHDEV_QUEUE_STAT_CNTRS); for (i = 0; i < imax; i++) { @@ -350,15 +348,13 @@ eth_rx_queue_setup(struct rte_eth_dev *dev, { struct pmd_internals *internals = dev->data->dev_private; struct pkt_rx_queue *pkt_q = &internals->rx_queue[rx_queue_id]; - struct rte_pktmbuf_pool_private *mbp_priv; uint16_t buf_size; pkt_q->mb_pool = mb_pool; /* Now get the space available for data in the mbuf */ - mbp_priv = rte_mempool_get_priv(pkt_q->mb_pool); - buf_size = (uint16_t) (mbp_priv->mbuf_data_room_size - - RTE_PKTMBUF_HEADROOM); + buf_size = (uint16_t)(rte_pktmbuf_data_room_size(pkt_q->mb_pool) - + RTE_PKTMBUF_HEADROOM); if (ETH_FRAME_LEN > buf_size) { RTE_LOG(ERR, PMD, @@ -386,7 +382,7 @@ eth_tx_queue_setup(struct rte_eth_dev *dev, return 0; } -static struct eth_dev_ops ops = { +static const struct eth_dev_ops ops = { .dev_start = eth_dev_start, .dev_stop = eth_dev_stop, .dev_close = eth_dev_close, @@ -444,7 +440,8 @@ rte_pmd_init_internals(const char *name, struct tpacket_req *req; struct pkt_rx_queue *rx_queue; struct pkt_tx_queue *tx_queue; - int rc, qsockfd, tpver, discard; + int rc, tpver, discard; + int qsockfd = -1; unsigned int i, q, rdsize; int fanout_arg __rte_unused, bypass __rte_unused; @@ -651,7 +648,7 @@ rte_pmd_init_internals(const char *name, } /* reserve an ethdev entry */ - *eth_dev = rte_eth_dev_allocate(name); + *eth_dev = rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL); if (*eth_dev == NULL) goto error; @@ -681,21 +678,24 @@ rte_pmd_init_internals(const char *name, return 0; error: - if (data) - rte_free(data); - if (pci_dev) - rte_free(pci_dev); + rte_free(data); + rte_free(pci_dev); + if (*internals) { for (q = 0; q < nb_queues; q++) { munmap((*internals)->rx_queue[q].map, 2 * req->tp_block_size * req->tp_block_nr); - if ((*internals)->rx_queue[q].rd) - rte_free((*internals)->rx_queue[q].rd); - if ((*internals)->tx_queue[q].rd) - rte_free((*internals)->tx_queue[q].rd); + + rte_free((*internals)->rx_queue[q].rd); + rte_free((*internals)->tx_queue[q].rd); + if (((*internals)->rx_queue[q].sockfd != 0) && + ((*internals)->rx_queue[q].sockfd != qsockfd)) + close((*internals)->rx_queue[q].sockfd); } rte_free(*internals); } + if (qsockfd != -1) + close(qsockfd); return -1; } @@ -804,7 +804,7 @@ int rte_pmd_af_packet_devinit(const char *name, const char *params) { unsigned numa_node; - int ret; + int ret = 0; struct rte_kvargs *kvlist; int sockfd = -1; @@ -813,8 +813,10 @@ rte_pmd_af_packet_devinit(const char *name, const char *params) numa_node = rte_socket_id(); kvlist = rte_kvargs_parse(params, valid_arguments); - if (kvlist == NULL) - return -1; + if (kvlist == NULL) { + ret = -1; + goto exit; + } /* * If iface argument is passed we open the NICs and use them for @@ -825,16 +827,15 @@ rte_pmd_af_packet_devinit(const char *name, const char *params) ret = rte_kvargs_process(kvlist, ETH_AF_PACKET_IFACE_ARG, &open_packet_iface, &sockfd); if (ret < 0) - return -1; + goto exit; } ret = rte_eth_from_packet(name, &sockfd, numa_node, kvlist); close(sockfd); /* no longer needed */ - if (ret < 0) - return -1; - - return 0; +exit: + rte_kvargs_free(kvlist); + return ret; } static struct rte_driver pmd_af_packet_drv = {