virtio: remove ioeventfd_disabled altogether
Now that there is not anymore a switch from the generic ioeventfd handler to the dataplane handler, virtio_bus_set_host_notifier(assign=true) is always called with !bus->ioeventfd_started, hence virtio_bus_stop_ioeventfd does nothing in this case. Move the invocation to vhost.c, which is the only place that needs it. Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
		
							parent
							
								
									6019f3b966
								
							
						
					
					
						commit
						e616c2f390
					
				| @ -1196,6 +1196,7 @@ int vhost_dev_enable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev) | ||||
|         goto fail; | ||||
|     } | ||||
| 
 | ||||
|     virtio_device_stop_ioeventfd(vdev); | ||||
|     for (i = 0; i < hdev->nvqs; ++i) { | ||||
|         r = virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), hdev->vq_index + i, | ||||
|                                          true); | ||||
| @ -1215,6 +1216,7 @@ fail_vq: | ||||
|         } | ||||
|         assert (e >= 0); | ||||
|     } | ||||
|     virtio_device_start_ioeventfd(vdev); | ||||
| fail: | ||||
|     return r; | ||||
| } | ||||
| @ -1237,6 +1239,7 @@ void vhost_dev_disable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev) | ||||
|         } | ||||
|         assert (r >= 0); | ||||
|     } | ||||
|     virtio_device_start_ioeventfd(vdev); | ||||
| } | ||||
| 
 | ||||
| /* Test and clear event pending status.
 | ||||
|  | ||||
| @ -190,7 +190,7 @@ int virtio_bus_start_ioeventfd(VirtioBusState *bus) | ||||
|     if (!k->ioeventfd_assign || !k->ioeventfd_enabled(proxy)) { | ||||
|         return -ENOSYS; | ||||
|     } | ||||
|     if (bus->ioeventfd_started || bus->ioeventfd_disabled) { | ||||
|     if (bus->ioeventfd_started) { | ||||
|         return 0; | ||||
|     } | ||||
|     r = vdc->start_ioeventfd(vdev); | ||||
| @ -226,8 +226,8 @@ bool virtio_bus_ioeventfd_enabled(VirtioBusState *bus) | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * This function switches from/to the generic ioeventfd handler. | ||||
|  * assign==false means 'use generic ioeventfd handler'. | ||||
|  * This function switches ioeventfd on/off in the device. | ||||
|  * The caller must set or clear the handlers for the EventNotifier. | ||||
|  */ | ||||
| int virtio_bus_set_host_notifier(VirtioBusState *bus, int n, bool assign) | ||||
| { | ||||
| @ -237,19 +237,12 @@ int virtio_bus_set_host_notifier(VirtioBusState *bus, int n, bool assign) | ||||
|     if (!k->ioeventfd_assign) { | ||||
|         return -ENOSYS; | ||||
|     } | ||||
|     bus->ioeventfd_disabled = assign; | ||||
|     if (assign) { | ||||
|         /*
 | ||||
|          * Stop using the generic ioeventfd, we are doing eventfd handling | ||||
|          * ourselves below | ||||
|          * | ||||
|          * FIXME: We should just switch the handler and not deassign the | ||||
|          * ioeventfd. | ||||
|          * Otherwise, there's a window where we don't have an | ||||
|          * ioeventfd and we may end up with a notification where | ||||
|          * we don't expect one. | ||||
|          */ | ||||
|         virtio_bus_stop_ioeventfd(bus); | ||||
|         assert(!bus->ioeventfd_started); | ||||
|     } else { | ||||
|         if (!bus->ioeventfd_started) { | ||||
|             return 0; | ||||
|         } | ||||
|     } | ||||
|     return set_host_notifier_internal(proxy, bus, n, assign); | ||||
| } | ||||
|  | ||||
| @ -93,12 +93,6 @@ typedef struct VirtioBusClass { | ||||
| struct VirtioBusState { | ||||
|     BusState parent_obj; | ||||
| 
 | ||||
|     /*
 | ||||
|      * Set if the default ioeventfd handlers are disabled by vhost | ||||
|      * or dataplane. | ||||
|      */ | ||||
|     bool ioeventfd_disabled; | ||||
| 
 | ||||
|     /*
 | ||||
|      * Set if ioeventfd has been started. | ||||
|      */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Paolo Bonzini
						Paolo Bonzini