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
mbuf: use pktmbuf helper to create the pool
[dpdk.git]
/
examples
/
tep_termination
/
main.c
diff --git
a/examples/tep_termination/main.c
b/examples/tep_termination/main.c
index
79373b3
..
20dafdb
100644
(file)
--- a/
examples/tep_termination/main.c
+++ b/
examples/tep_termination/main.c
@@
-68,7
+68,7
@@
(nb_switching_cores * MBUF_CACHE_SIZE))
#define MBUF_CACHE_SIZE 128
(nb_switching_cores * MBUF_CACHE_SIZE))
#define MBUF_CACHE_SIZE 128
-#define MBUF_
SIZE (2048 + sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM)
+#define MBUF_
DATA_SIZE RTE_MBUF_DEFAULT_BUF_SIZE
#define MAX_PKT_BURST 32 /* Max burst size for RX/TX */
#define BURST_TX_DRAIN_US 100 /* TX drain every ~100us */
#define MAX_PKT_BURST 32 /* Max burst size for RX/TX */
#define BURST_TX_DRAIN_US 100 /* TX drain every ~100us */
@@
-566,10
+566,9
@@
virtio_tx_route(struct vhost_dev *vdev, struct rte_mbuf *m)
struct rte_mbuf **m_table;
unsigned len, ret = 0;
const uint16_t lcore_id = rte_lcore_id();
struct rte_mbuf **m_table;
unsigned len, ret = 0;
const uint16_t lcore_id = rte_lcore_id();
- struct virtio_net *dev = vdev->dev;
- RTE_LOG(DEBUG, VHOST_DATA, "(%d) TX: MAC address is external\n",
-
dev->device_fh
);
+ RTE_LOG
_DP
(DEBUG, VHOST_DATA, "(%d) TX: MAC address is external\n",
+
vdev->vid
);
/* Add packet to the port tx queue */
tx_q = &lcore_tx_queue[lcore_id];
/* Add packet to the port tx queue */
tx_q = &lcore_tx_queue[lcore_id];
@@
-578,8
+577,8
@@
virtio_tx_route(struct vhost_dev *vdev, struct rte_mbuf *m)
tx_q->m_table[len] = m;
len++;
if (enable_stats) {
tx_q->m_table[len] = m;
len++;
if (enable_stats) {
- dev_statistics[
dev->device_fh
].tx_total++;
- dev_statistics[
dev->device_fh
].tx++;
+ dev_statistics[
vdev->vid
].tx_total++;
+ dev_statistics[
vdev->vid
].tx++;
}
if (unlikely(len == MAX_PKT_BURST)) {
}
if (unlikely(len == MAX_PKT_BURST)) {
@@
-614,7
+613,6
@@
static int
switch_worker(__rte_unused void *arg)
{
struct rte_mempool *mbuf_pool = arg;
switch_worker(__rte_unused void *arg)
{
struct rte_mempool *mbuf_pool = arg;
- struct virtio_net *dev = NULL;
struct vhost_dev *vdev = NULL;
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
struct virtio_net_data_ll *dev_ll;
struct vhost_dev *vdev = NULL;
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
struct virtio_net_data_ll *dev_ll;
@@
-651,7
+649,7
@@
switch_worker(__rte_unused void *arg)
if (unlikely(diff_tsc > drain_tsc)) {
if (tx_q->len) {
if (unlikely(diff_tsc > drain_tsc)) {
if (tx_q->len) {
- RTE_LOG(DEBUG, VHOST_DATA, "TX queue drained after "
+ RTE_LOG
_DP
(DEBUG, VHOST_DATA, "TX queue drained after "
"timeout with burst size %u\n",
tx_q->len);
ret = overlay_options.tx_handle(ports[0],
"timeout with burst size %u\n",
tx_q->len);
ret = overlay_options.tx_handle(ports[0],
@@
-688,7
+686,6
@@
switch_worker(__rte_unused void *arg)
while (dev_ll != NULL) {
vdev = dev_ll->vdev;
while (dev_ll != NULL) {
vdev = dev_ll->vdev;
- dev = vdev->dev;
if (unlikely(vdev->remove)) {
dev_ll = dev_ll->next;
if (unlikely(vdev->remove)) {
dev_ll = dev_ll->next;
@@
-709,22
+706,22
@@
switch_worker(__rte_unused void *arg)
* must be less than virtio queue size
*/
if (enable_retry && unlikely(rx_count >
* must be less than virtio queue size
*/
if (enable_retry && unlikely(rx_count >
- rte_v
ring_available_entries(dev
, VIRTIO_RXQ))) {
+ rte_v
host_avail_entries(vdev->vid
, VIRTIO_RXQ))) {
for (retry = 0; retry < burst_rx_retry_num;
retry++) {
rte_delay_us(burst_rx_delay_time);
for (retry = 0; retry < burst_rx_retry_num;
retry++) {
rte_delay_us(burst_rx_delay_time);
- if (rx_count <= rte_v
ring_available_entries(dev
, VIRTIO_RXQ))
+ if (rx_count <= rte_v
host_avail_entries(vdev->vid
, VIRTIO_RXQ))
break;
}
}
break;
}
}
- ret_count = overlay_options.rx_handle(
dev
, pkts_burst, rx_count);
+ ret_count = overlay_options.rx_handle(
vdev->vid
, pkts_burst, rx_count);
if (enable_stats) {
rte_atomic64_add(
if (enable_stats) {
rte_atomic64_add(
- &dev_statistics[
dev->device_fh
].rx_total_atomic,
+ &dev_statistics[
vdev->vid
].rx_total_atomic,
rx_count);
rte_atomic64_add(
rx_count);
rte_atomic64_add(
- &dev_statistics[
dev->device_fh
].rx_atomic, ret_count);
+ &dev_statistics[
vdev->vid
].rx_atomic, ret_count);
}
while (likely(rx_count)) {
rx_count--;
}
while (likely(rx_count)) {
rx_count--;
@@
-736,7
+733,7
@@
switch_worker(__rte_unused void *arg)
if (likely(!vdev->remove)) {
/* Handle guest TX*/
if (likely(!vdev->remove)) {
/* Handle guest TX*/
- tx_count = rte_vhost_dequeue_burst(
dev
,
+ tx_count = rte_vhost_dequeue_burst(
vdev->vid
,
VIRTIO_TXQ, mbuf_pool,
pkts_burst, MAX_PKT_BURST);
/* If this is the first received packet we need to learn the MAC */
VIRTIO_TXQ, mbuf_pool,
pkts_burst, MAX_PKT_BURST);
/* If this is the first received packet we need to learn the MAC */
@@
-908,23
+905,27
@@
init_data_ll(void)
/**
* Remove a device from the specific data core linked list and
* from the main linked list. Synchonization occurs through the use
/**
* Remove a device from the specific data core linked list and
* from the main linked list. Synchonization occurs through the use
- * of the lcore dev_removal_flag. Device is made volatile here
- * to avoid re-ordering of dev->remove=1 which can cause an infinite
- * loop in the rte_pause loop.
+ * of the lcore dev_removal_flag.
*/
static void
*/
static void
-destroy_device(
volatile struct virtio_net *dev
)
+destroy_device(
int vid
)
{
struct virtio_net_data_ll *ll_lcore_dev_cur;
struct virtio_net_data_ll *ll_main_dev_cur;
struct virtio_net_data_ll *ll_lcore_dev_last = NULL;
struct virtio_net_data_ll *ll_main_dev_last = NULL;
{
struct virtio_net_data_ll *ll_lcore_dev_cur;
struct virtio_net_data_ll *ll_main_dev_cur;
struct virtio_net_data_ll *ll_lcore_dev_last = NULL;
struct virtio_net_data_ll *ll_main_dev_last = NULL;
- struct vhost_dev *vdev;
+ struct vhost_dev *vdev
= NULL
;
int lcore;
int lcore;
- dev->flags &= ~VIRTIO_DEV_RUNNING;
-
- vdev = (struct vhost_dev *)dev->priv;
+ ll_main_dev_cur = ll_root_used;
+ while (ll_main_dev_cur != NULL) {
+ if (ll_main_dev_cur->vdev->vid == vid) {
+ vdev = ll_main_dev_cur->vdev;
+ break;
+ }
+ }
+ if (!vdev)
+ return;
/* set the remove flag. */
vdev->remove = 1;
/* set the remove flag. */
vdev->remove = 1;
@@
-944,8
+945,7
@@
destroy_device(volatile struct virtio_net *dev)
if (ll_lcore_dev_cur == NULL) {
RTE_LOG(ERR, VHOST_CONFIG,
if (ll_lcore_dev_cur == NULL) {
RTE_LOG(ERR, VHOST_CONFIG,
- "(%d) Failed to find the dev to be destroy.\n",
- dev->device_fh);
+ "(%d) Failed to find the dev to be destroy.\n", vid);
return;
}
return;
}
@@
-993,7
+993,7
@@
destroy_device(volatile struct virtio_net *dev)
lcore_info[vdev->coreid].lcore_ll->device_num--;
RTE_LOG(INFO, VHOST_DATA, "(%d) Device has been removed "
lcore_info[vdev->coreid].lcore_ll->device_num--;
RTE_LOG(INFO, VHOST_DATA, "(%d) Device has been removed "
- "from data core\n",
dev->device_fh
);
+ "from data core\n",
vid
);
rte_free(vdev);
rte_free(vdev);
@@
-1004,7
+1004,7
@@
destroy_device(volatile struct virtio_net *dev)
* to the main linked list and the allocated to a specific data core.
*/
static int
* to the main linked list and the allocated to a specific data core.
*/
static int
-new_device(
struct virtio_net *dev
)
+new_device(
int vid
)
{
struct virtio_net_data_ll *ll_dev;
int lcore, core_add = 0;
{
struct virtio_net_data_ll *ll_dev;
int lcore, core_add = 0;
@@
-1014,18
+1014,16
@@
new_device(struct virtio_net *dev)
vdev = rte_zmalloc("vhost device", sizeof(*vdev), RTE_CACHE_LINE_SIZE);
if (vdev == NULL) {
RTE_LOG(INFO, VHOST_DATA,
vdev = rte_zmalloc("vhost device", sizeof(*vdev), RTE_CACHE_LINE_SIZE);
if (vdev == NULL) {
RTE_LOG(INFO, VHOST_DATA,
- "(%d) Couldn't allocate memory for vhost dev\n",
- dev->device_fh);
+ "(%d) Couldn't allocate memory for vhost dev\n", vid);
return -1;
}
return -1;
}
- vdev->dev = dev;
- dev->priv = vdev;
+ vdev->vid = vid;
/* Add device to main ll */
ll_dev = get_data_ll_free_entry(&ll_root_free);
if (ll_dev == NULL) {
RTE_LOG(INFO, VHOST_DATA, "(%d) No free entry found in"
" linked list Device limit of %d devices per core"
/* Add device to main ll */
ll_dev = get_data_ll_free_entry(&ll_root_free);
if (ll_dev == NULL) {
RTE_LOG(INFO, VHOST_DATA, "(%d) No free entry found in"
" linked list Device limit of %d devices per core"
- " has been reached\n",
dev->device_fh
, nb_devices);
+ " has been reached\n",
vid
, nb_devices);
if (vdev->regions_hpa)
rte_free(vdev->regions_hpa);
rte_free(vdev);
if (vdev->regions_hpa)
rte_free(vdev->regions_hpa);
rte_free(vdev);
@@
-1033,7
+1031,7
@@
new_device(struct virtio_net *dev)
}
ll_dev->vdev = vdev;
add_data_ll_entry(&ll_root_used, ll_dev);
}
ll_dev->vdev = vdev;
add_data_ll_entry(&ll_root_used, ll_dev);
- vdev->rx_q =
dev->device_fh
;
+ vdev->rx_q =
vid
;
/* reset ready flag */
vdev->ready = DEVICE_MAC_LEARNING;
/* reset ready flag */
vdev->ready = DEVICE_MAC_LEARNING;
@@
-1051,9
+1049,9
@@
new_device(struct virtio_net *dev)
if (ll_dev == NULL) {
RTE_LOG(INFO, VHOST_DATA,
"(%d) Failed to add device to data core\n",
if (ll_dev == NULL) {
RTE_LOG(INFO, VHOST_DATA,
"(%d) Failed to add device to data core\n",
-
dev->device_fh
);
+
vid
);
vdev->ready = DEVICE_SAFE_REMOVE;
vdev->ready = DEVICE_SAFE_REMOVE;
- destroy_device(
dev
);
+ destroy_device(
vid
);
rte_free(vdev->regions_hpa);
rte_free(vdev);
return -1;
rte_free(vdev->regions_hpa);
rte_free(vdev);
return -1;
@@
-1065,17
+1063,16
@@
new_device(struct virtio_net *dev)
ll_dev);
/* Initialize device stats */
ll_dev);
/* Initialize device stats */
- memset(&dev_statistics[
dev->device_fh
], 0,
+ memset(&dev_statistics[
vid
], 0,
sizeof(struct device_statistics));
/* Disable notifications. */
sizeof(struct device_statistics));
/* Disable notifications. */
- rte_vhost_enable_guest_notification(
dev
, VIRTIO_RXQ, 0);
- rte_vhost_enable_guest_notification(
dev
, VIRTIO_TXQ, 0);
+ rte_vhost_enable_guest_notification(
vid
, VIRTIO_RXQ, 0);
+ rte_vhost_enable_guest_notification(
vid
, VIRTIO_TXQ, 0);
lcore_info[vdev->coreid].lcore_ll->device_num++;
lcore_info[vdev->coreid].lcore_ll->device_num++;
- dev->flags |= VIRTIO_DEV_RUNNING;
RTE_LOG(INFO, VHOST_DATA, "(%d) Device has been added to data core %d\n",
RTE_LOG(INFO, VHOST_DATA, "(%d) Device has been added to data core %d\n",
-
dev->device_fh
, vdev->coreid);
+
vid
, vdev->coreid);
return 0;
}
return 0;
}
@@
-1099,7
+1096,7
@@
print_stats(void)
struct virtio_net_data_ll *dev_ll;
uint64_t tx_dropped, rx_dropped;
uint64_t tx, tx_total, rx, rx_total, rx_ip_csum, rx_l4_csum;
struct virtio_net_data_ll *dev_ll;
uint64_t tx_dropped, rx_dropped;
uint64_t tx, tx_total, rx, rx_total, rx_ip_csum, rx_l4_csum;
-
uint32_t device_fh
;
+
int vid
;
const char clr[] = { 27, '[', '2', 'J', '\0' };
const char top_left[] = { 27, '[', '1', ';', '1', 'H', '\0' };
const char clr[] = { 27, '[', '2', 'J', '\0' };
const char top_left[] = { 27, '[', '1', ';', '1', 'H', '\0' };
@@
-1113,22
+1110,22
@@
print_stats(void)
dev_ll = ll_root_used;
while (dev_ll != NULL) {
dev_ll = ll_root_used;
while (dev_ll != NULL) {
-
device_fh = (uint32_t)dev_ll->vdev->dev->device_fh
;
- tx_total = dev_statistics[
device_fh
].tx_total;
- tx = dev_statistics[
device_fh
].tx;
+
vid = dev_ll->vdev->vid
;
+ tx_total = dev_statistics[
vid
].tx_total;
+ tx = dev_statistics[
vid
].tx;
tx_dropped = tx_total - tx;
rx_total = rte_atomic64_read(
tx_dropped = tx_total - tx;
rx_total = rte_atomic64_read(
- &dev_statistics[
device_fh
].rx_total_atomic);
+ &dev_statistics[
vid
].rx_total_atomic);
rx = rte_atomic64_read(
rx = rte_atomic64_read(
- &dev_statistics[
device_fh
].rx_atomic);
+ &dev_statistics[
vid
].rx_atomic);
rx_dropped = rx_total - rx;
rx_ip_csum = rte_atomic64_read(
rx_dropped = rx_total - rx;
rx_ip_csum = rte_atomic64_read(
- &dev_statistics[
device_fh
].rx_bad_ip_csum);
+ &dev_statistics[
vid
].rx_bad_ip_csum);
rx_l4_csum = rte_atomic64_read(
rx_l4_csum = rte_atomic64_read(
- &dev_statistics[
device_fh
].rx_bad_l4_csum);
+ &dev_statistics[
vid
].rx_bad_l4_csum);
- printf("\nStatistics for device %
"PRIu32"
----------"
+ printf("\nStatistics for device %
d
----------"
"\nTX total: %"PRIu64""
"\nTX dropped: %"PRIu64""
"\nTX successful: %"PRIu64""
"\nTX total: %"PRIu64""
"\nTX dropped: %"PRIu64""
"\nTX successful: %"PRIu64""
@@
-1137,7
+1134,7
@@
print_stats(void)
"\nRX bad L4 csum: %"PRIu64""
"\nRX dropped: %"PRIu64""
"\nRX successful: %"PRIu64"",
"\nRX bad L4 csum: %"PRIu64""
"\nRX dropped: %"PRIu64""
"\nRX successful: %"PRIu64"",
-
device_fh
,
+
vid
,
tx_total,
tx_dropped,
tx,
tx_total,
tx_dropped,
tx,
@@
-1154,8
+1151,7
@@
print_stats(void)
}
/**
}
/**
- * Main function, does initialisation and calls the per-lcore functions. The CUSE
- * device is also registered here to handle the IOCTLs.
+ * Main function, does initialisation and calls the per-lcore functions.
*/
int
main(int argc, char *argv[])
*/
int
main(int argc, char *argv[])
@@
-1203,15
+1199,13
@@
main(int argc, char *argv[])
MAX_SUP_PORTS);
}
/* Create the mbuf pool. */
MAX_SUP_PORTS);
}
/* Create the mbuf pool. */
- mbuf_pool = rte_
mem
pool_create(
+ mbuf_pool = rte_
pktmbuf_
pool_create(
"MBUF_POOL",
"MBUF_POOL",
- NUM_MBUFS_PER_PORT
- * valid_nb_ports,
- MBUF_SIZE, MBUF_CACHE_SIZE,
- sizeof(struct rte_pktmbuf_pool_private),
- rte_pktmbuf_pool_init, NULL,
- rte_pktmbuf_init, NULL,
- rte_socket_id(), 0);
+ NUM_MBUFS_PER_PORT * valid_nb_ports,
+ MBUF_CACHE_SIZE,
+ 0,
+ MBUF_DATA_SIZE,
+ rte_socket_id());
if (mbuf_pool == NULL)
rte_exit(EXIT_FAILURE, "Cannot create mbuf pool\n");
if (mbuf_pool == NULL)
rte_exit(EXIT_FAILURE, "Cannot create mbuf pool\n");
@@
-1256,14
+1250,12
@@
main(int argc, char *argv[])
}
rte_vhost_feature_disable(1ULL << VIRTIO_NET_F_MRG_RXBUF);
}
rte_vhost_feature_disable(1ULL << VIRTIO_NET_F_MRG_RXBUF);
- /* Register CUSE device to handle IOCTLs. */
- ret = rte_vhost_driver_register((char *)&dev_basename);
+ ret = rte_vhost_driver_register((char *)&dev_basename, 0);
if (ret != 0)
if (ret != 0)
- rte_exit(EXIT_FAILURE, "
CUSE device setup failure
.\n");
+ rte_exit(EXIT_FAILURE, "
failed to register vhost driver
.\n");
rte_vhost_driver_callback_register(&virtio_net_device_ops);
rte_vhost_driver_callback_register(&virtio_net_device_ops);
- /* Start CUSE session. */
rte_vhost_driver_session_start();
return 0;
rte_vhost_driver_session_start();
return 0;