virtio: avoid using guest_notifier_mask in vhost-user mode
Because guest mask notifier cannot be used in vhost-user mode, a boolean flag "use_guest_notifier_mask" was added in commit 5669655aafd to disable the use of guest mask notifier under virtio-pci. However this flag wasn't checked in other virtio devices, such as virtio-mmio. In our tests, it caused assertion error under "vhost-user + virtio-mmio". This patch addresses this problem by adding a check before guest_notifier_mask is called. Signed-off-by: Wei Huang <wei@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
							
								
									d93ddfb1f8
								
							
						
					
					
						commit
						2858bc6870
					
				@ -1098,7 +1098,7 @@ static int virtio_ccw_set_guest_notifier(VirtioCcwDevice *dev, int n,
 | 
				
			|||||||
         * We do not support individual masking for channel devices, so we
 | 
					         * We do not support individual masking for channel devices, so we
 | 
				
			||||||
         * need to manually trigger any guest masking callbacks here.
 | 
					         * need to manually trigger any guest masking callbacks here.
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
        if (k->guest_notifier_mask) {
 | 
					        if (k->guest_notifier_mask && vdev->use_guest_notifier_mask) {
 | 
				
			||||||
            k->guest_notifier_mask(vdev, n, false);
 | 
					            k->guest_notifier_mask(vdev, n, false);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        /* get lost events and re-inject */
 | 
					        /* get lost events and re-inject */
 | 
				
			||||||
@ -1107,7 +1107,7 @@ static int virtio_ccw_set_guest_notifier(VirtioCcwDevice *dev, int n,
 | 
				
			|||||||
            event_notifier_set(notifier);
 | 
					            event_notifier_set(notifier);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        if (k->guest_notifier_mask) {
 | 
					        if (k->guest_notifier_mask && vdev->use_guest_notifier_mask) {
 | 
				
			||||||
            k->guest_notifier_mask(vdev, n, true);
 | 
					            k->guest_notifier_mask(vdev, n, true);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (with_irqfd) {
 | 
					        if (with_irqfd) {
 | 
				
			||||||
 | 
				
			|||||||
@ -402,7 +402,7 @@ static int virtio_mmio_set_guest_notifier(DeviceState *d, int n, bool assign,
 | 
				
			|||||||
        event_notifier_cleanup(notifier);
 | 
					        event_notifier_cleanup(notifier);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (vdc->guest_notifier_mask) {
 | 
					    if (vdc->guest_notifier_mask && vdev->use_guest_notifier_mask) {
 | 
				
			||||||
        vdc->guest_notifier_mask(vdev, n, !assign);
 | 
					        vdc->guest_notifier_mask(vdev, n, !assign);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user