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
add prefix to cache line macros
[dpdk.git]
/
lib
/
librte_pmd_virtio
/
virtio_rxtx.c
diff --git
a/lib/librte_pmd_virtio/virtio_rxtx.c
b/lib/librte_pmd_virtio/virtio_rxtx.c
index
132ee45
..
c013f97
100644
(file)
--- a/
lib/librte_pmd_virtio/virtio_rxtx.c
+++ b/
lib/librte_pmd_virtio/virtio_rxtx.c
@@
-118,7
+118,7
@@
virtqueue_dequeue_burst_rx(struct virtqueue *vq, struct rte_mbuf **rx_pkts,
}
rte_prefetch0(cookie);
}
rte_prefetch0(cookie);
- rte_packet_prefetch(
cookie->data
);
+ rte_packet_prefetch(
rte_pktmbuf_mtod(cookie, void *)
);
rx_pkts[i] = cookie;
vq->vq_used_cons_idx++;
vq_ring_free_chain(vq, desc_idx);
rx_pkts[i] = cookie;
vq->vq_used_cons_idx++;
vq_ring_free_chain(vq, desc_idx);
@@
-328,8
+328,10
@@
virtio_dev_cq_start(struct rte_eth_dev *dev)
struct virtio_hw *hw
= VIRTIO_DEV_PRIVATE_TO_HW(dev->data->dev_private);
struct virtio_hw *hw
= VIRTIO_DEV_PRIVATE_TO_HW(dev->data->dev_private);
- virtio_dev_vring_start(hw->cvq, VTNET_CQ);
- VIRTQUEUE_DUMP((struct virtqueue *)hw->cvq);
+ if (hw->cvq) {
+ virtio_dev_vring_start(hw->cvq, VTNET_CQ);
+ VIRTQUEUE_DUMP((struct virtqueue *)hw->cvq);
+ }
}
void
}
void
@@
-439,7
+441,7
@@
virtio_discard_rxbuf(struct virtqueue *vq, struct rte_mbuf *m)
}
#define VIRTIO_MBUF_BURST_SZ 64
}
#define VIRTIO_MBUF_BURST_SZ 64
-#define DESC_PER_CACHELINE (CACHE_LINE_SIZE / sizeof(struct vring_desc))
+#define DESC_PER_CACHELINE (
RTE_
CACHE_LINE_SIZE / sizeof(struct vring_desc))
uint16_t
virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
{
uint16_t
virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
{
@@
-480,7
+482,7
@@
virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
}
rxm->port = rxvq->port_id;
}
rxm->port = rxvq->port_id;
- rxm->data
= (char *)rxm->buf_addr +
RTE_PKTMBUF_HEADROOM;
+ rxm->data
_off =
RTE_PKTMBUF_HEADROOM;
rxm->nb_segs = 1;
rxm->next = NULL;
rxm->nb_segs = 1;
rxm->next = NULL;
@@
-584,7
+586,7
@@
virtio_recv_mergeable_pkts(void *rx_queue,
if (seg_num == 0)
seg_num = 1;
if (seg_num == 0)
seg_num = 1;
- rxm->data
= (char *)rxm->buf_addr +
RTE_PKTMBUF_HEADROOM;
+ rxm->data
_off =
RTE_PKTMBUF_HEADROOM;
rxm->nb_segs = seg_num;
rxm->next = NULL;
rxm->pkt_len = (uint32_t)(len[0] - hdr_size);
rxm->nb_segs = seg_num;
rxm->next = NULL;
rxm->pkt_len = (uint32_t)(len[0] - hdr_size);
@@
-622,9
+624,7
@@
virtio_recv_mergeable_pkts(void *rx_queue,
while (extra_idx < rcv_cnt) {
rxm = rcv_pkts[extra_idx];
while (extra_idx < rcv_cnt) {
rxm = rcv_pkts[extra_idx];
- rxm->data =
- (char *)rxm->buf_addr +
- RTE_PKTMBUF_HEADROOM - hdr_size;
+ rxm->data_off = RTE_PKTMBUF_HEADROOM - hdr_size;
rxm->next = NULL;
rxm->pkt_len = (uint32_t)(len[extra_idx]);
rxm->data_len = (uint16_t)(len[extra_idx]);
rxm->next = NULL;
rxm->pkt_len = (uint32_t)(len[extra_idx]);
rxm->data_len = (uint16_t)(len[extra_idx]);
@@
-699,7
+699,8
@@
virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
num = (uint16_t)(likely(nb_used < VIRTIO_MBUF_BURST_SZ) ? nb_used : VIRTIO_MBUF_BURST_SZ);
while (nb_tx < nb_pkts) {
num = (uint16_t)(likely(nb_used < VIRTIO_MBUF_BURST_SZ) ? nb_used : VIRTIO_MBUF_BURST_SZ);
while (nb_tx < nb_pkts) {
- int need = tx_pkts[nb_tx]->nb_segs - txvq->vq_free_cnt;
+ /* Need one more descriptor for virtio header. */
+ int need = tx_pkts[nb_tx]->nb_segs - txvq->vq_free_cnt + 1;
int deq_cnt = RTE_MIN(need, (int)num);
num -= (deq_cnt > 0) ? deq_cnt : 0;
int deq_cnt = RTE_MIN(need, (int)num);
num -= (deq_cnt > 0) ? deq_cnt : 0;
@@
-708,7
+709,12
@@
virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
deq_cnt--;
}
deq_cnt--;
}
- if (tx_pkts[nb_tx]->nb_segs <= txvq->vq_free_cnt) {
+ need = (int)tx_pkts[nb_tx]->nb_segs - txvq->vq_free_cnt + 1;
+ /*
+ * Zero or negative value indicates it has enough free
+ * descriptors to use for transmitting.
+ */
+ if (likely(need <= 0)) {
txm = tx_pkts[nb_tx];
/* Enqueue Packet buffers */
error = virtqueue_enqueue_xmit(txvq, txm);
txm = tx_pkts[nb_tx];
/* Enqueue Packet buffers */
error = virtqueue_enqueue_xmit(txvq, txm);