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);
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;
425 struct pvcalls_bedata *bedata;
438 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
451 spin_lock(&bedata->socket_lock);
452 ret = get_request(bedata, &req_id);
454 spin_unlock(&bedata->socket_lock);
460 req = RING_GET_REQUEST(&bedata->ring, req_id);
472 bedata->ring.req_prod_pvt++;
473 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
474 spin_unlock(&bedata->socket_lock);
477 notify_remote_via_irq(bedata->irq);
479 wait_event(bedata->inflight_req,
480 READ_ONCE(bedata->rsp[req_id].req_id) == req_id);
484 ret = bedata->rsp[req_id].ret;
485 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
672 struct pvcalls_bedata *bedata;
683 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
685 spin_lock(&bedata->socket_lock);
686 ret = get_request(bedata, &req_id);
688 spin_unlock(&bedata->socket_lock);
692 req = RING_GET_REQUEST(&bedata->ring, req_id);
704 bedata->ring.req_prod_pvt++;
705 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
706 spin_unlock(&bedata->socket_lock);
708 notify_remote_via_irq(bedata->irq);
710 wait_event(bedata->inflight_req,
711 READ_ONCE(bedata->rsp[req_id].req_id) == req_id);
715 ret = bedata->rsp[req_id].ret;
716 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
725 struct pvcalls_bedata *bedata;
733 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
740 spin_lock(&bedata->socket_lock);
741 ret = get_request(bedata, &req_id);
743 spin_unlock(&bedata->socket_lock);
747 req = RING_GET_REQUEST(&bedata->ring, req_id);
753 bedata->ring.req_prod_pvt++;
754 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
755 spin_unlock(&bedata->socket_lock);
757 notify_remote_via_irq(bedata->irq);
759 wait_event(bedata->inflight_req,
760 READ_ONCE(bedata->rsp[req_id].req_id) == req_id);
764 ret = bedata->rsp[req_id].ret;
765 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
774 struct pvcalls_bedata *bedata;
784 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
800 READ_ONCE(bedata->rsp[req_id].req_id) == req_id) {
841 spin_lock(&bedata->socket_lock);
842 ret = get_request(bedata, &req_id);
846 spin_unlock(&bedata->socket_lock);
847 pvcalls_front_free_map(bedata, map2);
852 list_add_tail(&map2->list, &bedata->socket_mappings);
854 req = RING_GET_REQUEST(&bedata->ring, req_id);
863 bedata->ring.req_prod_pvt++;
864 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
865 spin_unlock(&bedata->socket_lock);
867 notify_remote_via_irq(bedata->irq);
875 if (wait_event_interruptible(bedata->inflight_req,
876 READ_ONCE(bedata->rsp[req_id].req_id) == req_id)) {
887 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
891 pvcalls_front_free_map(bedata, map2);
897 ret = bedata->rsp[req_id].ret;
898 bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID;
909 struct pvcalls_bedata *bedata,
921 READ_ONCE(bedata->rsp[req_id].req_id) == req_id)
940 poll_wait(file, &bedata->inflight_req, wait);
944 spin_lock(&bedata->socket_lock);
945 ret = get_request(bedata, &req_id);
947 spin_unlock(&bedata->socket_lock);
950 req = RING_GET_REQUEST(&bedata->ring, req_id);
955 bedata->ring.req_prod_pvt++;
956 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
957 spin_unlock(&bedata->socket_lock);
959 notify_remote_via_irq(bedata->irq);
961 poll_wait(file, &bedata->inflight_req, wait);
966 struct pvcalls_bedata *bedata,
991 struct pvcalls_bedata *bedata;
998 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
1001 ret = pvcalls_front_poll_active(file, bedata, map, wait);
1003 ret = pvcalls_front_poll_passive(file, bedata, map, wait);
1010 struct pvcalls_bedata *bedata;
1025 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
1027 spin_lock(&bedata->socket_lock);
1028 ret = get_request(bedata, &req_id);
1030 spin_unlock(&bedata->socket_lock);
1036 req = RING_GET_REQUEST(&bedata->ring, req_id);
1041 bedata->ring.req_prod_pvt++;
1042 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify);
1043 spin_unlock(&bedata->socket_lock);
1045 notify_remote_via_irq(bedata->irq);
1047 wait_event(bedata->inflight_req,
1048 READ_ONCE(bedata->rsp[req_id].req_id) == req_id);
1067 pvcalls_front_free_map(bedata, map);
1069 wake_up(&bedata->inflight_req);
1075 spin_lock(&bedata->socket_lock);
1077 spin_unlock(&bedata->socket_lock);
1080 pvcalls_front_free_map(bedata,
1085 WRITE_ONCE(bedata->rsp[req_id].req_id, PVCALLS_INVALID_ID);
1098 struct pvcalls_bedata *bedata;
1101 bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
1104 if (bedata->irq >= 0)
1105 unbind_from_irqhandler(bedata->irq, dev);
1107 list_for_each_entry_safe(map, n, &bedata->socket_mappings, list) {
1118 list_for_each_entry_safe(map, n, &bedata->socket_mappings, list) {
1121 pvcalls_front_free_map(bedata, map);
1127 if (bedata->ref != -1)
1128 gnttab_end_foreign_access(bedata->ref, NULL);
1129 kfree(bedata->ring.sring);
1130 kfree(bedata);
1143 struct pvcalls_bedata *bedata = NULL;
1172 bedata = kzalloc(sizeof(struct pvcalls_bedata), GFP_KERNEL);
1173 if (!bedata)
1176 dev_set_drvdata(&dev->dev, bedata);
1178 init_waitqueue_head(&bedata->inflight_req);
1179 INIT_LIST_HEAD(&bedata->socket_mappings);
1180 spin_lock_init(&bedata->socket_lock);
1181 bedata->irq = -1;
1182 bedata->ref = -1;
1185 bedata->rsp[i].req_id = PVCALLS_INVALID_ID;
1192 FRONT_RING_INIT(&bedata->ring, sring, XEN_PAGE_SIZE);
1198 bedata->irq = bind_evtchn_to_irqhandler(evtchn,
1201 if (bedata->irq < 0) {
1202 ret = bedata->irq;
1212 bedata->ref = ret;
1213 gnttab_grant_foreign_access_ref(bedata->ref, dev->otherend_id,
1225 ret = xenbus_printf(xbt, dev->nodename, "ring-ref", "%d", bedata->ref);