Lines Matching refs:bedata

125 static inline int get_request(struct pvcalls_bedata *bedata, int *req_id)
127 *req_id = bedata->ring.req_prod_pvt & (RING_SIZE(&bedata->ring) - 1);
128 if (RING_FULL(&bedata->ring) ||
129 bedata->rsp[*req_id].req_id != PVCALLS_INVALID_ID)
168 struct pvcalls_bedata *bedata;
177 bedata = dev_get_drvdata(&dev->dev);
178 if (bedata == NULL) {
184 while (RING_HAS_UNCONSUMED_RESPONSES(&bedata->ring)) {
185 rsp = RING_GET_RESPONSE(&bedata->ring, bedata->ring.rsp_cons);
203 dst = (uint8_t *)&bedata->rsp[req_id] +
209 * paired with the barrier when accessing bedata->rsp.
212 bedata->rsp[req_id].req_id = req_id;
216 bedata->ring.rsp_cons++;
219 RING_FINAL_CHECK_FOR_RESPONSES(&bedata->ring, more);
223 wake_up(&bedata->inflight_req);
230 static void pvcalls_front_destroy_active(struct pvcalls_bedata *bedata,
237 if (bedata) {
238 spin_lock(&bedata->socket_lock);
241 spin_unlock(&bedata->socket_lock);
250 static void pvcalls_front_free_map(struct pvcalls_bedata *bedata,
253 pvcalls_front_destroy_active(bedata, map);
272 struct pvcalls_bedata *bedata;
292 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
300 spin_lock(&bedata->socket_lock);
302 ret = get_request(bedata, &req_id);
305 spin_unlock(&bedata->socket_lock);
317 list_add_tail(&map->list, &bedata->socket_mappings);
319 req = RING_GET_REQUEST(&bedata->ring, req_id);
327 bedata->ring.req_prod_pvt++;
328 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
329 spin_unlock(&bedata->socket_lock);
331 notify_remote_via_irq(bedata->irq);
333 wait_event(bedata->inflight_req,
334 READ_ONCE(bedata->rsp[req_id].req_id) == req_id);
338 ret = bedata->rsp[req_id].ret;
339 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
426 struct pvcalls_bedata *bedata;
439 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
452 spin_lock(&bedata->socket_lock);
453 ret = get_request(bedata, &req_id);
455 spin_unlock(&bedata->socket_lock);
461 req = RING_GET_REQUEST(&bedata->ring, req_id);
473 bedata->ring.req_prod_pvt++;
474 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
475 spin_unlock(&bedata->socket_lock);
478 notify_remote_via_irq(bedata->irq);
480 wait_event(bedata->inflight_req,
481 READ_ONCE(bedata->rsp[req_id].req_id) == req_id);
485 ret = bedata->rsp[req_id].ret;
486 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
676 struct pvcalls_bedata *bedata;
687 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
689 spin_lock(&bedata->socket_lock);
690 ret = get_request(bedata, &req_id);
692 spin_unlock(&bedata->socket_lock);
696 req = RING_GET_REQUEST(&bedata->ring, req_id);
708 bedata->ring.req_prod_pvt++;
709 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
710 spin_unlock(&bedata->socket_lock);
712 notify_remote_via_irq(bedata->irq);
714 wait_event(bedata->inflight_req,
715 READ_ONCE(bedata->rsp[req_id].req_id) == req_id);
719 ret = bedata->rsp[req_id].ret;
720 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
730 struct pvcalls_bedata *bedata;
738 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
745 spin_lock(&bedata->socket_lock);
746 ret = get_request(bedata, &req_id);
748 spin_unlock(&bedata->socket_lock);
752 req = RING_GET_REQUEST(&bedata->ring, req_id);
758 bedata->ring.req_prod_pvt++;
759 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
760 spin_unlock(&bedata->socket_lock);
762 notify_remote_via_irq(bedata->irq);
764 wait_event(bedata->inflight_req,
765 READ_ONCE(bedata->rsp[req_id].req_id) == req_id);
769 ret = bedata->rsp[req_id].ret;
770 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
781 struct pvcalls_bedata *bedata;
791 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
807 READ_ONCE(bedata->rsp[req_id].req_id) == req_id) {
848 spin_lock(&bedata->socket_lock);
849 ret = get_request(bedata, &req_id);
853 spin_unlock(&bedata->socket_lock);
854 pvcalls_front_free_map(bedata, map2);
859 list_add_tail(&map2->list, &bedata->socket_mappings);
861 req = RING_GET_REQUEST(&bedata->ring, req_id);
870 bedata->ring.req_prod_pvt++;
871 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
872 spin_unlock(&bedata->socket_lock);
874 notify_remote_via_irq(bedata->irq);
882 if (wait_event_interruptible(bedata->inflight_req,
883 READ_ONCE(bedata->rsp[req_id].req_id) == req_id)) {
894 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
898 pvcalls_front_free_map(bedata, map2);
904 ret = bedata->rsp[req_id].ret;
905 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
917 struct pvcalls_bedata *bedata,
929 READ_ONCE(bedata->rsp[req_id].req_id) == req_id)
948 poll_wait(file, &bedata->inflight_req, wait);
952 spin_lock(&bedata->socket_lock);
953 ret = get_request(bedata, &req_id);
955 spin_unlock(&bedata->socket_lock);
958 req = RING_GET_REQUEST(&bedata->ring, req_id);
963 bedata->ring.req_prod_pvt++;
964 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
965 spin_unlock(&bedata->socket_lock);
967 notify_remote_via_irq(bedata->irq);
969 poll_wait(file, &bedata->inflight_req, wait);
974 struct pvcalls_bedata *bedata,
999 struct pvcalls_bedata *bedata;
1006 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
1009 ret = pvcalls_front_poll_active(file, bedata, map, wait);
1011 ret = pvcalls_front_poll_passive(file, bedata, map, wait);
1019 struct pvcalls_bedata *bedata;
1034 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
1036 spin_lock(&bedata->socket_lock);
1037 ret = get_request(bedata, &req_id);
1039 spin_unlock(&bedata->socket_lock);
1045 req = RING_GET_REQUEST(&bedata->ring, req_id);
1050 bedata->ring.req_prod_pvt++;
1051 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
1052 spin_unlock(&bedata->socket_lock);
1054 notify_remote_via_irq(bedata->irq);
1056 wait_event(bedata->inflight_req,
1057 READ_ONCE(bedata->rsp[req_id].req_id) == req_id);
1076 pvcalls_front_free_map(bedata, map);
1078 wake_up(&bedata->inflight_req);
1084 spin_lock(&bedata->socket_lock);
1086 spin_unlock(&bedata->socket_lock);
1089 pvcalls_front_free_map(bedata,
1094 WRITE_ONCE(bedata->rsp[req_id].req_id, PVCALLS_INVALID_ID);
1108 struct pvcalls_bedata *bedata;
1111 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
1114 if (bedata->irq >= 0)
1115 unbind_from_irqhandler(bedata->irq, dev);
1117 list_for_each_entry_safe(map, n, &bedata->socket_mappings, list) {
1128 list_for_each_entry_safe(map, n, &bedata->socket_mappings, list) {
1131 pvcalls_front_free_map(bedata, map);
1137 if (bedata->ref != -1)
1138 gnttab_end_foreign_access(bedata->ref, NULL);
1139 kfree(bedata->ring.sring);
1140 kfree(bedata);
1153 struct pvcalls_bedata *bedata = NULL;
1182 bedata = kzalloc(sizeof(struct pvcalls_bedata), GFP_KERNEL);
1183 if (!bedata)
1186 dev_set_drvdata(&dev->dev, bedata);
1188 init_waitqueue_head(&bedata->inflight_req);
1189 INIT_LIST_HEAD(&bedata->socket_mappings);
1190 spin_lock_init(&bedata->socket_lock);
1191 bedata->irq = -1;
1192 bedata->ref = -1;
1195 bedata->rsp[i].req_id = PVCALLS_INVALID_ID;
1202 FRONT_RING_INIT(&bedata->ring, sring, XEN_PAGE_SIZE);
1208 bedata->irq = bind_evtchn_to_irqhandler(evtchn,
1211 if (bedata->irq < 0) {
1212 ret = bedata->irq;
1222 bedata->ref = ret;
1223 gnttab_grant_foreign_access_ref(bedata->ref, dev->otherend_id,
1235 ret = xenbus_printf(xbt, dev->nodename, "ring-ref", "%d", bedata->ref);