Hi all, Today's linux-next merge of the vhost tree got a conflict in: drivers/virtio/virtio_ring.c between commit: 138fd2514863 ("virtio_ring: add _split suffix for split ring functions") and various other commits from Linus' tree and commit: 7f86a211fabe ("virtio: use dependent_ptr_mb") from the vhost tree. I fixed it up (I think, basically I added the changes form the latter to the _split and _packed versions of the function - see below) and can carry the fix as necessary. This is now fixed as far as linux-next is concerned, but any non trivial conflicts should be mentioned to your upstream maintainer when your tree is submitted for merging. You may also want to consider cooperating with the maintainer of the conflicting tree to minimise any particularly complex conflicts. -- Cheers, Stephen Rothwell diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index cd7e755484e3..982e1ed4ecdf 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -676,6 +676,7 @@ static void *virtqueue_get_buf_ctx_split(struct virtqueue *_vq, void *ret; unsigned int i; u16 last_used; + bool more; START_USE(vq); @@ -684,14 +685,15 @@ static void *virtqueue_get_buf_ctx_split(struct virtqueue *_vq, return NULL; } - if (!more_used_split(vq)) { + more = more_used_split(vq); + if (!more) { pr_debug("No more buffers in queue\n"); END_USE(vq); return NULL; } /* Only get used array entries after they have been exposed by host. */ - virtio_rmb(vq->weak_barriers); + vq = dependent_ptr_mb(vq, more); last_used = (vq->last_used_idx & (vq->split.vring.num - 1)); i = virtio32_to_cpu(_vq->vdev, @@ -1340,6 +1342,7 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, struct vring_virtqueue *vq = to_vvq(_vq); u16 last_used, id; void *ret; + bool more; START_USE(vq); @@ -1348,14 +1351,15 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, return NULL; } - if (!more_used_packed(vq)) { + more = more_used_packed(vq); + if (!more) { pr_debug("No more buffers in queue\n"); END_USE(vq); return NULL; } /* Only get used elements after they have been exposed by host. */ - virtio_rmb(vq->weak_barriers); + vq = dependent_ptr_mb(vq, more); last_used = vq->last_used_idx; id = le16_to_cpu(vq->packed.vring.desc[last_used].id);
Attachment:
pgp76scZKvsrT.pgp
Description: OpenPGP digital signature