virtio-net.c (333ec4ca6a9f604331e2349cb91e9635f65d6462) | virtio-net.c (ba7eadb5927633d487064b518bf6fd001369e30c) |
---|---|
1/* 2 * Virtio Network Device 3 * 4 * Copyright IBM, Corp. 2007 5 * 6 * Authors: 7 * Anthony Liguori <aliguori@us.ibm.com> 8 * --- 866 unchanged lines hidden (view full) --- 875 n->curr_queues = queues; 876 /* stop the backend before changing the number of queues to avoid handling a 877 * disabled queue */ 878 virtio_net_set_status(vdev, vdev->status); 879 virtio_net_set_queues(n); 880 881 return VIRTIO_NET_OK; 882} | 1/* 2 * Virtio Network Device 3 * 4 * Copyright IBM, Corp. 2007 5 * 6 * Authors: 7 * Anthony Liguori <aliguori@us.ibm.com> 8 * --- 866 unchanged lines hidden (view full) --- 875 n->curr_queues = queues; 876 /* stop the backend before changing the number of queues to avoid handling a 877 * disabled queue */ 878 virtio_net_set_status(vdev, vdev->status); 879 virtio_net_set_queues(n); 880 881 return VIRTIO_NET_OK; 882} |
883 |
|
883static void virtio_net_handle_ctrl(VirtIODevice *vdev, VirtQueue *vq) 884{ 885 VirtIONet *n = VIRTIO_NET(vdev); 886 struct virtio_net_ctrl_hdr ctrl; 887 virtio_net_ctrl_ack status = VIRTIO_NET_ERR; 888 VirtQueueElement *elem; 889 size_t s; 890 struct iovec *iov, *iov2; 891 unsigned int iov_cnt; 892 893 for (;;) { 894 elem = virtqueue_pop(vq, sizeof(VirtQueueElement)); 895 if (!elem) { 896 break; 897 } 898 if (iov_size(elem->in_sg, elem->in_num) < sizeof(status) || 899 iov_size(elem->out_sg, elem->out_num) < sizeof(ctrl)) { | 884static void virtio_net_handle_ctrl(VirtIODevice *vdev, VirtQueue *vq) 885{ 886 VirtIONet *n = VIRTIO_NET(vdev); 887 struct virtio_net_ctrl_hdr ctrl; 888 virtio_net_ctrl_ack status = VIRTIO_NET_ERR; 889 VirtQueueElement *elem; 890 size_t s; 891 struct iovec *iov, *iov2; 892 unsigned int iov_cnt; 893 894 for (;;) { 895 elem = virtqueue_pop(vq, sizeof(VirtQueueElement)); 896 if (!elem) { 897 break; 898 } 899 if (iov_size(elem->in_sg, elem->in_num) < sizeof(status) || 900 iov_size(elem->out_sg, elem->out_num) < sizeof(ctrl)) { |
900 error_report("virtio-net ctrl missing headers"); 901 exit(1); | 901 virtio_error(vdev, "virtio-net ctrl missing headers"); 902 virtqueue_detach_element(vq, elem, 0); 903 g_free(elem); 904 break; |
902 } 903 904 iov_cnt = elem->out_num; 905 iov2 = iov = g_memdup(elem->out_sg, sizeof(struct iovec) * elem->out_num); 906 s = iov_to_buf(iov, iov_cnt, 0, &ctrl, sizeof(ctrl)); 907 iov_discard_front(&iov, &iov_cnt, sizeof(ctrl)); 908 if (s != sizeof(ctrl)) { 909 status = VIRTIO_NET_ERR; --- 1037 unchanged lines hidden --- | 905 } 906 907 iov_cnt = elem->out_num; 908 iov2 = iov = g_memdup(elem->out_sg, sizeof(struct iovec) * elem->out_num); 909 s = iov_to_buf(iov, iov_cnt, 0, &ctrl, sizeof(ctrl)); 910 iov_discard_front(&iov, &iov_cnt, sizeof(ctrl)); 911 if (s != sizeof(ctrl)) { 912 status = VIRTIO_NET_ERR; --- 1037 unchanged lines hidden --- |