Revert "vhost_net: start/stop guest notifiers properly"
This reverts commit aad4dce934649b3a398396fc2a76f215bb194ea4. I accidentally merged the wrong version of a pull request which had a buggy version of this patch. Reverting the buggy version means we can then cleanly merge in the correct pull with the corrected change. Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
		
							parent
							
								
									f2426947de
								
							
						
					
					
						commit
						4771b02512
					
				| @ -188,19 +188,16 @@ bool vhost_net_query(VHostNetState *net, VirtIODevice *dev) | ||||
|     return vhost_dev_query(&net->dev, dev); | ||||
| } | ||||
| 
 | ||||
| static void vhost_net_set_vq_index(struct vhost_net *net, int vq_index) | ||||
| { | ||||
|     net->dev.vq_index = vq_index; | ||||
| } | ||||
| 
 | ||||
| static int vhost_net_start_one(struct vhost_net *net, | ||||
|                                VirtIODevice *dev) | ||||
|                                VirtIODevice *dev, | ||||
|                                int vq_index) | ||||
| { | ||||
|     struct vhost_vring_file file = { }; | ||||
|     int r; | ||||
| 
 | ||||
|     net->dev.nvqs = 2; | ||||
|     net->dev.vqs = net->vqs; | ||||
|     net->dev.vq_index = vq_index; | ||||
| 
 | ||||
|     r = vhost_dev_enable_notifiers(&net->dev, dev); | ||||
|     if (r < 0) { | ||||
| @ -304,7 +301,11 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs, | ||||
|     } | ||||
| 
 | ||||
|     for (i = 0; i < total_queues; i++) { | ||||
|         vhost_net_set_vq_index(get_vhost_net(ncs[i].peer), i * 2); | ||||
|         r = vhost_net_start_one(get_vhost_net(ncs[i].peer), dev, i * 2); | ||||
| 
 | ||||
|         if (r < 0) { | ||||
|             goto err; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     r = k->set_guest_notifiers(qbus->parent, total_queues * 2, true); | ||||
| @ -313,14 +314,6 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs, | ||||
|         goto err; | ||||
|     } | ||||
| 
 | ||||
|     for (i = 0; i < total_queues; i++) { | ||||
|         r = vhost_net_start_one(get_vhost_net(ncs[i].peer), dev); | ||||
| 
 | ||||
|         if (r < 0) { | ||||
|             goto err; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return 0; | ||||
| 
 | ||||
| err: | ||||
| @ -338,16 +331,16 @@ void vhost_net_stop(VirtIODevice *dev, NetClientState *ncs, | ||||
|     VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(vbus); | ||||
|     int i, r; | ||||
| 
 | ||||
|     for (i = 0; i < total_queues; i++) { | ||||
|         vhost_net_stop_one(get_vhost_net(ncs[i].peer), dev); | ||||
|     } | ||||
| 
 | ||||
|     r = k->set_guest_notifiers(qbus->parent, total_queues * 2, false); | ||||
|     if (r < 0) { | ||||
|         fprintf(stderr, "vhost guest notifier cleanup failed: %d\n", r); | ||||
|         fflush(stderr); | ||||
|     } | ||||
|     assert(r >= 0); | ||||
| 
 | ||||
|     for (i = 0; i < total_queues; i++) { | ||||
|         vhost_net_stop_one(get_vhost_net(ncs[i].peer), dev); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void vhost_net_cleanup(struct vhost_net *net) | ||||
|  | ||||
| @ -976,6 +976,7 @@ void vhost_dev_disable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev) | ||||
| bool vhost_virtqueue_pending(struct vhost_dev *hdev, int n) | ||||
| { | ||||
|     struct vhost_virtqueue *vq = hdev->vqs + n - hdev->vq_index; | ||||
|     assert(hdev->started); | ||||
|     assert(n >= hdev->vq_index && n < hdev->vq_index + hdev->nvqs); | ||||
|     return event_notifier_test_and_clear(&vq->masked_notifier); | ||||
| } | ||||
| @ -987,6 +988,7 @@ void vhost_virtqueue_mask(struct vhost_dev *hdev, VirtIODevice *vdev, int n, | ||||
|     struct VirtQueue *vvq = virtio_get_queue(vdev, n); | ||||
|     int r, index = n - hdev->vq_index; | ||||
| 
 | ||||
|     assert(hdev->started); | ||||
|     assert(n >= hdev->vq_index && n < hdev->vq_index + hdev->nvqs); | ||||
| 
 | ||||
|     struct vhost_vring_file file = { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Peter Maydell
						Peter Maydell