Lines Matching refs:ring
127 static bool p9_xen_write_todo(struct xen_9pfs_dataring *ring, RING_IDX size) in p9_xen_write_todo() argument
131 cons = ring->intf->out_cons; in p9_xen_write_todo()
132 prod = ring->intf->out_prod; in p9_xen_write_todo()
145 struct xen_9pfs_dataring *ring; in p9_xen_request() local
158 ring = &priv->rings[num]; in p9_xen_request()
161 while (wait_event_killable(ring->wq, in p9_xen_request()
162 p9_xen_write_todo(ring, size)) != 0) in p9_xen_request()
165 spin_lock_irqsave(&ring->lock, flags); in p9_xen_request()
166 cons = ring->intf->out_cons; in p9_xen_request()
167 prod = ring->intf->out_prod; in p9_xen_request()
172 spin_unlock_irqrestore(&ring->lock, flags); in p9_xen_request()
179 xen_9pfs_write_packet(ring->data.out, p9_req->tc.sdata, size, in p9_xen_request()
185 ring->intf->out_prod = prod; in p9_xen_request()
186 spin_unlock_irqrestore(&ring->lock, flags); in p9_xen_request()
187 notify_remote_via_irq(ring->irq); in p9_xen_request()
196 struct xen_9pfs_dataring *ring; in p9_xen_response() local
202 ring = container_of(work, struct xen_9pfs_dataring, work); in p9_xen_response()
203 priv = ring->priv; in p9_xen_response()
206 cons = ring->intf->in_cons; in p9_xen_response()
207 prod = ring->intf->in_prod; in p9_xen_response()
212 notify_remote_via_irq(ring->irq); in p9_xen_response()
220 xen_9pfs_read_packet(&h, ring->data.in, sizeof(h), in p9_xen_response()
229 ring->intf->in_cons = cons; in p9_xen_response()
238 xen_9pfs_read_packet(req->rc.sdata, ring->data.in, h.size, in p9_xen_response()
244 ring->intf->in_cons = cons; in p9_xen_response()
255 struct xen_9pfs_dataring *ring = r; in xen_9pfs_front_event_handler() local
257 if (!ring || !ring->priv->client) { in xen_9pfs_front_event_handler()
262 wake_up_interruptible(&ring->wq); in xen_9pfs_front_event_handler()
263 schedule_work(&ring->work); in xen_9pfs_front_event_handler()
326 struct xen_9pfs_dataring *ring) in xen_9pfs_front_alloc_dataring() argument
332 init_waitqueue_head(&ring->wq); in xen_9pfs_front_alloc_dataring()
333 spin_lock_init(&ring->lock); in xen_9pfs_front_alloc_dataring()
334 INIT_WORK(&ring->work, p9_xen_response); in xen_9pfs_front_alloc_dataring()
336 ring->intf = (struct xen_9pfs_data_intf *)get_zeroed_page(GFP_KERNEL); in xen_9pfs_front_alloc_dataring()
337 if (!ring->intf) in xen_9pfs_front_alloc_dataring()
340 virt_to_gfn(ring->intf), 0); in xen_9pfs_front_alloc_dataring()
343 ring->ref = ret; in xen_9pfs_front_alloc_dataring()
355 ring->intf->ref[i] = ret; in xen_9pfs_front_alloc_dataring()
357 ring->intf->ring_order = XEN_9PFS_RING_ORDER; in xen_9pfs_front_alloc_dataring()
358 ring->data.in = bytes; in xen_9pfs_front_alloc_dataring()
359 ring->data.out = bytes + XEN_9PFS_RING_SIZE; in xen_9pfs_front_alloc_dataring()
361 ret = xenbus_alloc_evtchn(dev, &ring->evtchn); in xen_9pfs_front_alloc_dataring()
364 ring->irq = bind_evtchn_to_irqhandler(ring->evtchn, in xen_9pfs_front_alloc_dataring()
366 0, "xen_9pfs-frontend", ring); in xen_9pfs_front_alloc_dataring()
367 if (ring->irq >= 0) in xen_9pfs_front_alloc_dataring()
370 xenbus_free_evtchn(dev, ring->evtchn); in xen_9pfs_front_alloc_dataring()
371 ret = ring->irq; in xen_9pfs_front_alloc_dataring()
375 gnttab_end_foreign_access(ring->intf->ref[i], 0, 0); in xen_9pfs_front_alloc_dataring()
380 gnttab_end_foreign_access(ring->ref, 0, 0); in xen_9pfs_front_alloc_dataring()
381 free_page((unsigned long)ring->intf); in xen_9pfs_front_alloc_dataring()