#endif
-#ifdef CONFIG_VNET
-#include <palacios/vmm_vnet.h>
-#endif
-
-
#ifdef CONFIG_SYMBIOTIC
#include <palacios/vmm_symbiotic.h>
struct v3_sym_core_state;
#include <palacios/vmm_config.h>
-
struct v3_intr_state;
-
struct guest_info {
uint64_t rip;
struct v3_vm_info * vm_info;
// the logical cpu this guest context is executing on
int cpu_id;
-
-#ifdef CONFIG_VNET_PROFILE
- struct v3_vnet_profile vnet_times;
-#endif
};
struct virtio_queue * q = &(virtio_state->tx_vq);
struct virtio_net_hdr * hdr = NULL;
- if (q->avail->index < q->last_avail_idx) {
- q->idx_overflow = true;
- }
-
- q->last_avail_idx = q->avail->index;
- while (q->cur_avail_idx < q->avail->index ||
- (q->idx_overflow && q->cur_avail_idx < (q->avail->index + 65536))) {
+ while (q->cur_avail_idx != q->avail->index) {
struct vring_desc * hdr_desc = NULL;
addr_t hdr_addr = 0;
uint16_t desc_idx = q->avail->ring[q->cur_avail_idx % q->queue_size];
q->used->ring[q->used->index % q->queue_size].length = req_len; // What do we set this to????
q->used->index++;
- int last_idx = q->cur_avail_idx;
-
q->cur_avail_idx ++;
-
- if (q->cur_avail_idx < last_idx) {
- q->idx_overflow = false;
- }
}
if (!(q->avail->flags & VIRTIO_NO_IRQ_FLAG)) {
goto exit;
}
- if (q->last_avail_idx > q->avail->index)
- q->idx_overflow = true;
- q->last_avail_idx = q->avail->index;
-
- if (q->cur_avail_idx < q->avail->index || (q->idx_overflow && q->cur_avail_idx < q->avail->index+65536)){
+ if (q->cur_avail_idx != q->avail->index){
addr_t hdr_addr = 0;
uint16_t hdr_idx = q->avail->ring[q->cur_avail_idx % q->queue_size];
uint16_t buf_idx = 0;
q->used->ring[q->used->index % q->queue_size].length = data_len + hdr_len; // This should be the total length of data sent to guest (header+pkt_data)
q->used->index++;
- int last_idx = q->cur_avail_idx;
q->cur_avail_idx++;
- if (q->cur_avail_idx < last_idx)
- q->idx_overflow = false;
} else {
virtio->pkt_drop++;
v3_print_vmcs();
*/
-#ifdef CONFIG_VNET_PROFILE
- uint64_t start, end;
- rdtscll(start);
-#endif
#ifdef CONFIG_TELEMETRY
if (info->vm_info->enable_telemetry) {
}
#endif
-#ifdef CONFIG_VNET_PROFILE
- rdtscll(end);
- info->vnet_times.total_exit_time = end - start;
- if(info->vnet_times.print)
- PrintError("Vnet_profiling: total_exit_time: %ld, total_handle_time: %ld memcpy_time: %ld copy_from_guest: %ld copy_to_guest: %ld malloc_free: %ld, route_lookup: %ld\n",
- (long)info->vnet_times.total_exit_time,
- (long)info->vnet_times.total_handle_time,
- (long)info->vnet_times.memcpy_time,
- (long)info->vnet_times.time_copy_from_guest,
- (long)info->vnet_times.time_copy_to_guest,
- (long)info->vnet_times.time_mallocfree,
- (long)info->vnet_times.time_route_lookup);
-
- info->vnet_times.print = false;
-#endif
-
return 0;
}