|
|
|
@ -143,7 +143,6 @@ static void p9_virtio_close(struct p9_client *client) |
|
|
|
|
static void req_done(struct virtqueue *vq) |
|
|
|
|
{ |
|
|
|
|
struct virtio_chan *chan = vq->vdev->priv; |
|
|
|
|
struct p9_fcall *rc; |
|
|
|
|
unsigned int len; |
|
|
|
|
struct p9_req_t *req; |
|
|
|
|
unsigned long flags; |
|
|
|
@ -152,8 +151,8 @@ static void req_done(struct virtqueue *vq) |
|
|
|
|
|
|
|
|
|
while (1) { |
|
|
|
|
spin_lock_irqsave(&chan->lock, flags); |
|
|
|
|
rc = virtqueue_get_buf(chan->vq, &len); |
|
|
|
|
if (rc == NULL) { |
|
|
|
|
req = virtqueue_get_buf(chan->vq, &len); |
|
|
|
|
if (req == NULL) { |
|
|
|
|
spin_unlock_irqrestore(&chan->lock, flags); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
@ -161,9 +160,6 @@ static void req_done(struct virtqueue *vq) |
|
|
|
|
spin_unlock_irqrestore(&chan->lock, flags); |
|
|
|
|
/* Wakeup if anyone waiting for VirtIO ring space. */ |
|
|
|
|
wake_up(chan->vc_wq); |
|
|
|
|
p9_debug(P9_DEBUG_TRANS, ": rc %p\n", rc); |
|
|
|
|
p9_debug(P9_DEBUG_TRANS, ": lookup tag %d\n", rc->tag); |
|
|
|
|
req = p9_tag_lookup(chan->client, rc->tag); |
|
|
|
|
p9_client_cb(chan->client, req, REQ_STATUS_RCVD); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -284,7 +280,7 @@ req_retry: |
|
|
|
|
if (in) |
|
|
|
|
sgs[out_sgs + in_sgs++] = chan->sg + out; |
|
|
|
|
|
|
|
|
|
err = virtqueue_add_sgs(chan->vq, sgs, out_sgs, in_sgs, req->tc, |
|
|
|
|
err = virtqueue_add_sgs(chan->vq, sgs, out_sgs, in_sgs, req, |
|
|
|
|
GFP_ATOMIC); |
|
|
|
|
if (err < 0) { |
|
|
|
|
if (err == -ENOSPC) { |
|
|
|
@ -469,7 +465,7 @@ req_retry_pinned: |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
BUG_ON(out_sgs + in_sgs > ARRAY_SIZE(sgs)); |
|
|
|
|
err = virtqueue_add_sgs(chan->vq, sgs, out_sgs, in_sgs, req->tc, |
|
|
|
|
err = virtqueue_add_sgs(chan->vq, sgs, out_sgs, in_sgs, req, |
|
|
|
|
GFP_ATOMIC); |
|
|
|
|
if (err < 0) { |
|
|
|
|
if (err == -ENOSPC) { |
|
|
|
|