#define PrintDebug(fmt, args...)
#endif
-#ifdef CONFIG_VNET_PROFILE
-#define VIRTIO_NIC_PROFILE
-#endif
-
#define VIRTIO_NET_S_LINK_UP 1 /* Link is up */
#define VIRTIO_NET_MAX_BUFSIZE (sizeof(struct virtio_net_hdr) + (64 << 10))
struct virtio_queue * q = &(virtio_state->tx_vq);
struct virtio_net_hdr * hdr = NULL;
+ PrintDebug("Virtio NIC: TX: running on cpu: %d\n", V3_Get_CPU());
while (q->cur_avail_idx != q->avail->index) {
struct vring_desc * hdr_desc = NULL;
hdr = (struct virtio_net_hdr*)hdr_addr;
desc_idx = hdr_desc->next;
-
+
for (i = 0; i < desc_cnt - 1; i++) {
struct vring_desc * buf_desc = &(q->desc[desc_idx]);
if (pkt_tx(core, virtio_state, buf_desc) == -1) {
virtio_state->virtio_cfg.pci_isr = 0x1;
}
-#ifdef VIRTIO_NIC_PROFILE
- if(virtio_state->pkt_sent % 10000 == 0)
- PrintError("Virtio NIC: %p, pkt_sent: %ld\n", virtio_state, virtio_state->pkt_sent);
-#endif
-
#ifdef CONFIG_VNET_PROFILE
- uint64_t time;
- rdtscll(time);
- core->vnet_times.total_handle_time = time - core->vnet_times.virtio_handle_start;
- core->vnet_times.print = true;
+ if (virtio_state->pkt_sent % 10000 == 0){
+ PrintError("Virtio NIC: sent: %ld, rxed: %ld, dropped: %ld\n",
+ virtio_state->pkt_sent,
+ virtio_state->pkt_recv,
+ virtio_state->pkt_drop);
+ }
#endif
return 0;
struct virtio_net_state * virtio = (struct virtio_net_state *)private_data;
int port_idx = port % virtio->io_range_size;
-#ifdef CONFIG_VNET_PROFILE
- uint64_t time;
- rdtscll(time);
- core->vnet_times.virtio_handle_start = time;
-#endif
PrintDebug("VIRTIO NIC %p Write for port %d (index=%d) len=%d, value=%x\n", private_data,
port, port_idx, length, *(uint32_t *)src);
uint32_t data_len = size;
uint32_t offset = 0;
unsigned long flags;
- int ret_val;
+ int ret_val = -1;
int raw = 1;
flags = v3_lock_irqsave(virtio->lock);
-
- PrintDebug("VIRTIO NIC: receiving packet to virtio nic %p, size:%d\n", virtio, size);
+
+ PrintDebug("VIRTIO NIC: RX on cpu %d to virtio nic %p, size:%d\n", V3_Get_CPU(), virtio, size);
virtio->pkt_recv ++;
if (q->ring_avail_addr == 0) {
PrintError("Queue is not set\n");
- ret_val = -1;
goto exit;
}
q->cur_avail_idx++;
} else {
virtio->pkt_drop++;
-
-#ifdef VIRTIO_NIC_PROFILE
- PrintError("Virtio NIC: %p, one pkt dropped receieved: %ld, dropped: %ld, sent: %ld curidx: %d, avaiIdx: %d\n",
- virtio, virtio->pkt_recv, virtio->pkt_drop, virtio->pkt_sent, q->cur_avail_idx, q->avail->index);
-#endif
+ goto exit;
}
if (!(q->avail->flags & VIRTIO_NO_IRQ_FLAG)) {
virtio->virtio_cfg.pci_isr = 0x1;
}
-#ifdef VIRTIO_NIC_PROFILE
- if ((virtio->pkt_recv % 10000) == 0){
- PrintError("Virtio NIC: %p, receieved: %ld, dropped: %ld, sent: %ld\n",
- virtio, virtio->pkt_recv, virtio->pkt_drop, virtio->pkt_sent);
- }
-#endif
-
ret_val = offset;
exit:
+
+#ifdef CONFIG_VNET_PROFILE
+ if (virtio->pkt_recv % 100000 == 0){
+ PrintError("Virtio NIC: sent: %ld, rxed: %ld, dropped: %ld\n",
+ virtio->pkt_sent,
+ virtio->pkt_recv,
+ virtio->pkt_drop);
+ }
+#endif
v3_unlock_irqrestore(virtio->lock, flags);