mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 12:57:06 +09:00
UPSTREAM: vhost: correctly check the iova range when waking virtqueue
[ Upstream commit2d66f997f0] We don't wakeup the virtqueue if the first byte of pending iova range is the last byte of the range we just got updated. This will lead a virtqueue to wait for IOTLB updating forever. Fixing by correct the check and wake up the virtqueue in this case. Fixes:6b1e6cc785("vhost: new device IOTLB API") Reported-by: Peter Xu <peterx@redhat.com> Signed-off-by: Jason Wang <jasowang@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> Tested-by: Peter Xu <peterx@redhat.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> (cherry picked from commita21a39a9c3) Bug: 121166534 Test: Ran cuttlefish with android-4.4 + VSOCKETS, VMWARE_VMCI_VSOCKETS Signed-off-by: Alistair Strachan <astrachan@google.com> Change-Id: I2cd64a1d7e195a508a3385e3afe4ecf22632770f
This commit is contained in:
committed by
Alistair Strachan
parent
732e0b13c5
commit
eb2ca3c196
@@ -906,7 +906,7 @@ static void vhost_iotlb_notify_vq(struct vhost_dev *d,
|
||||
list_for_each_entry_safe(node, n, &d->pending_list, node) {
|
||||
struct vhost_iotlb_msg *vq_msg = &node->msg.iotlb;
|
||||
if (msg->iova <= vq_msg->iova &&
|
||||
msg->iova + msg->size - 1 > vq_msg->iova &&
|
||||
msg->iova + msg->size - 1 >= vq_msg->iova &&
|
||||
vq_msg->type == VHOST_IOTLB_MISS) {
|
||||
vhost_poll_queue(&node->vq->poll);
|
||||
list_del(&node->node);
|
||||
|
||||
Reference in New Issue
Block a user