Lines Matching defs: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);
228 static void pvcalls_front_free_map(struct pvcalls_bedata *bedata,
235 spin_lock(&bedata->socket_lock);
238 spin_unlock(&bedata->socket_lock);
262 struct pvcalls_bedata *bedata;
282 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
290 spin_lock(&bedata->socket_lock);
292 ret = get_request(bedata, &req_id);
295 spin_unlock(&bedata->socket_lock);
307 list_add_tail(&map->list, &bedata->socket_mappings);
309 req = RING_GET_REQUEST(&bedata->ring, req_id);
317 bedata->ring.req_prod_pvt++;
318 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
319 spin_unlock(&bedata->socket_lock);
321 notify_remote_via_irq(bedata->irq);
323 wait_event(bedata->inflight_req,
324 READ_ONCE(bedata->rsp[req_id].req_id) == req_id);
328 ret = bedata->rsp[req_id].ret;
329 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
415 struct pvcalls_bedata *bedata;
428 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
435 spin_lock(&bedata->socket_lock);
436 ret = get_request(bedata, &req_id);
438 spin_unlock(&bedata->socket_lock);
445 spin_unlock(&bedata->socket_lock);
451 req = RING_GET_REQUEST(&bedata->ring, req_id);
463 bedata->ring.req_prod_pvt++;
464 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
465 spin_unlock(&bedata->socket_lock);
468 notify_remote_via_irq(bedata->irq);
470 wait_event(bedata->inflight_req,
471 READ_ONCE(bedata->rsp[req_id].req_id) == req_id);
475 ret = bedata->rsp[req_id].ret;
476 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
663 struct pvcalls_bedata *bedata;
674 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
676 spin_lock(&bedata->socket_lock);
677 ret = get_request(bedata, &req_id);
679 spin_unlock(&bedata->socket_lock);
683 req = RING_GET_REQUEST(&bedata->ring, req_id);
695 bedata->ring.req_prod_pvt++;
696 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
697 spin_unlock(&bedata->socket_lock);
699 notify_remote_via_irq(bedata->irq);
701 wait_event(bedata->inflight_req,
702 READ_ONCE(bedata->rsp[req_id].req_id) == req_id);
706 ret = bedata->rsp[req_id].ret;
707 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
716 struct pvcalls_bedata *bedata;
724 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
731 spin_lock(&bedata->socket_lock);
732 ret = get_request(bedata, &req_id);
734 spin_unlock(&bedata->socket_lock);
738 req = RING_GET_REQUEST(&bedata->ring, req_id);
744 bedata->ring.req_prod_pvt++;
745 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
746 spin_unlock(&bedata->socket_lock);
748 notify_remote_via_irq(bedata->irq);
750 wait_event(bedata->inflight_req,
751 READ_ONCE(bedata->rsp[req_id].req_id) == req_id);
755 ret = bedata->rsp[req_id].ret;
756 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
765 struct pvcalls_bedata *bedata;
775 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
791 READ_ONCE(bedata->rsp[req_id].req_id) == req_id) {
822 spin_lock(&bedata->socket_lock);
823 ret = get_request(bedata, &req_id);
827 spin_unlock(&bedata->socket_lock);
840 spin_unlock(&bedata->socket_lock);
844 list_add_tail(&map2->list, &bedata->socket_mappings);
846 req = RING_GET_REQUEST(&bedata->ring, req_id);
855 bedata->ring.req_prod_pvt++;
856 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
857 spin_unlock(&bedata->socket_lock);
859 notify_remote_via_irq(bedata->irq);
867 if (wait_event_interruptible(bedata->inflight_req,
868 READ_ONCE(bedata->rsp[req_id].req_id) == req_id)) {
879 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
883 pvcalls_front_free_map(bedata, map2);
889 ret = bedata->rsp[req_id].ret;
890 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
901 struct pvcalls_bedata *bedata,
913 READ_ONCE(bedata->rsp[req_id].req_id) == req_id)
932 poll_wait(file, &bedata->inflight_req, wait);
936 spin_lock(&bedata->socket_lock);
937 ret = get_request(bedata, &req_id);
939 spin_unlock(&bedata->socket_lock);
942 req = RING_GET_REQUEST(&bedata->ring, req_id);
947 bedata->ring.req_prod_pvt++;
948 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
949 spin_unlock(&bedata->socket_lock);
951 notify_remote_via_irq(bedata->irq);
953 poll_wait(file, &bedata->inflight_req, wait);
958 struct pvcalls_bedata *bedata,
983 struct pvcalls_bedata *bedata;
990 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
993 ret = pvcalls_front_poll_active(file, bedata, map, wait);
995 ret = pvcalls_front_poll_passive(file, bedata, map, wait);
1002 struct pvcalls_bedata *bedata;
1017 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
1019 spin_lock(&bedata->socket_lock);
1020 ret = get_request(bedata, &req_id);
1022 spin_unlock(&bedata->socket_lock);
1028 req = RING_GET_REQUEST(&bedata->ring, req_id);
1033 bedata->ring.req_prod_pvt++;
1034 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
1035 spin_unlock(&bedata->socket_lock);
1037 notify_remote_via_irq(bedata->irq);
1039 wait_event(bedata->inflight_req,
1040 READ_ONCE(bedata->rsp[req_id].req_id) == req_id);
1059 pvcalls_front_free_map(bedata, map);
1061 wake_up(&bedata->inflight_req);
1067 spin_lock(&bedata->socket_lock);
1069 spin_unlock(&bedata->socket_lock);
1072 pvcalls_front_free_map(bedata,
1077 WRITE_ONCE(bedata->rsp[req_id].req_id, PVCALLS_INVALID_ID);
1090 struct pvcalls_bedata *bedata;
1093 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
1096 if (bedata->irq >= 0)
1097 unbind_from_irqhandler(bedata->irq, dev);
1099 list_for_each_entry_safe(map, n, &bedata->socket_mappings, list) {
1110 list_for_each_entry_safe(map, n, &bedata->socket_mappings, list) {
1113 pvcalls_front_free_map(bedata, map);
1119 if (bedata->ref != -1)
1120 gnttab_end_foreign_access(bedata->ref, 0, 0);
1121 kfree(bedata->ring.sring);
1122 kfree(bedata);
1136 struct pvcalls_bedata *bedata = NULL;
1165 bedata = kzalloc(sizeof(struct pvcalls_bedata), GFP_KERNEL);
1166 if (!bedata)
1169 dev_set_drvdata(&dev->dev, bedata);
1171 init_waitqueue_head(&bedata->inflight_req);
1172 INIT_LIST_HEAD(&bedata->socket_mappings);
1173 spin_lock_init(&bedata->socket_lock);
1174 bedata->irq = -1;
1175 bedata->ref = -1;
1178 bedata->rsp[i].req_id = PVCALLS_INVALID_ID;
1185 FRONT_RING_INIT(&bedata->ring, sring, XEN_PAGE_SIZE);
1191 bedata->irq = bind_evtchn_to_irqhandler(evtchn,
1194 if (bedata->irq < 0) {
1195 ret = bedata->irq;
1205 bedata->ref = ret;
1206 gnttab_grant_foreign_access_ref(bedata->ref, dev->otherend_id,
1218 ret = xenbus_printf(xbt, dev->nodename, "ring-ref", "%d", bedata->ref);