Lines Matching defs:chan

122 	struct virtio_chan *chan = client->trans;
125 if (chan)
126 chan->inuse = false;
145 struct virtio_chan *chan = vq->vdev->priv;
154 spin_lock_irqsave(&chan->lock, flags);
155 rc = virtqueue_get_buf(chan->vq, &len);
157 spin_unlock_irqrestore(&chan->lock, flags);
160 chan->ring_bufs_avail = 1;
161 spin_unlock_irqrestore(&chan->lock, flags);
163 wake_up(chan->vc_wq);
166 req = p9_tag_lookup(chan->client, rc->tag);
167 p9_client_cb(chan->client, req, REQ_STATUS_RCVD);
268 struct virtio_chan *chan = client->trans;
275 spin_lock_irqsave(&chan->lock, flags);
279 out = pack_sg_list(chan->sg, 0,
282 sgs[out_sgs++] = chan->sg;
284 in = pack_sg_list(chan->sg, out,
287 sgs[out_sgs + in_sgs++] = chan->sg + out;
289 err = virtqueue_add_sgs(chan->vq, sgs, out_sgs, in_sgs, req->tc,
293 chan->ring_bufs_avail = 0;
294 spin_unlock_irqrestore(&chan->lock, flags);
295 err = wait_event_interruptible(*chan->vc_wq,
296 chan->ring_bufs_avail);
303 spin_unlock_irqrestore(&chan->lock, flags);
309 virtqueue_kick(chan->vq);
310 spin_unlock_irqrestore(&chan->lock, flags);
316 static int p9_get_mapped_pages(struct virtio_chan *chan,
326 if (atomic_read(&vp_pinned) >= chan->p9_max_pages) {
328 (atomic_read(&vp_pinned) < chan->p9_max_pages));
374 struct virtio_chan *chan = client->trans;
387 out_nr_pages = p9_get_mapped_pages(chan, out_pages, uodata,
404 in_nr_pages = p9_get_mapped_pages(chan, in_pages, uidata,
415 spin_lock_irqsave(&chan->lock, flags);
420 out = pack_sg_list(chan->sg, 0,
424 sgs[out_sgs++] = chan->sg;
427 sgs[out_sgs++] = chan->sg + out;
428 out += pack_sg_list_p(chan->sg, out, VIRTQUEUE_NUM,
439 in = pack_sg_list(chan->sg, out,
442 sgs[out_sgs + in_sgs++] = chan->sg + out;
445 sgs[out_sgs + in_sgs++] = chan->sg + out + in;
446 in += pack_sg_list_p(chan->sg, out + in, VIRTQUEUE_NUM,
451 err = virtqueue_add_sgs(chan->vq, sgs, out_sgs, in_sgs, req->tc,
455 chan->ring_bufs_avail = 0;
456 spin_unlock_irqrestore(&chan->lock, flags);
457 err = wait_event_interruptible(*chan->vc_wq,
458 chan->ring_bufs_avail);
465 spin_unlock_irqrestore(&chan->lock, flags);
472 virtqueue_kick(chan->vq);
473 spin_unlock_irqrestore(&chan->lock, flags);
501 struct virtio_chan *chan;
505 chan = vdev->priv;
507 return snprintf(buf, chan->tag_len + 1, "%s", chan->tag);
525 struct virtio_chan *chan;
527 chan = kmalloc(sizeof(struct virtio_chan), GFP_KERNEL);
528 if (!chan) {
534 chan->vdev = vdev;
537 chan->vq = virtio_find_single_vq(vdev, req_done, "requests");
538 if (IS_ERR(chan->vq)) {
539 err = PTR_ERR(chan->vq);
542 chan->vq->vdev->priv = chan;
543 spin_lock_init(&chan->lock);
545 sg_init_table(chan->sg, VIRTQUEUE_NUM);
547 chan->inuse = false;
562 chan->tag = tag;
563 chan->tag_len = tag_len;
568 chan->vc_wq = kmalloc(sizeof(wait_queue_head_t), GFP_KERNEL);
569 if (!chan->vc_wq) {
573 init_waitqueue_head(chan->vc_wq);
574 chan->ring_bufs_avail = 1;
576 chan->p9_max_pages = nr_free_buffer_pages()/4;
581 list_add_tail(&chan->chan_list, &virtio_chan_list);
593 kfree(chan);
616 struct virtio_chan *chan;
621 list_for_each_entry(chan, &virtio_chan_list, chan_list) {
622 if (!strncmp(devname, chan->tag, chan->tag_len) &&
623 strlen(devname) == chan->tag_len) {
624 if (!chan->inuse) {
625 chan->inuse = true;
639 client->trans = (void *)chan;
641 chan->client = client;
654 struct virtio_chan *chan = vdev->priv;
656 if (chan->inuse)
657 p9_virtio_close(chan->client);
661 list_del(&chan->chan_list);
665 kfree(chan->tag);
666 kfree(chan->vc_wq);
667 kfree(chan);