bedata 125 drivers/xen/pvcalls-front.c static inline int get_request(struct pvcalls_bedata *bedata, int *req_id) bedata 127 drivers/xen/pvcalls-front.c *req_id = bedata->ring.req_prod_pvt & (RING_SIZE(&bedata->ring) - 1); bedata 128 drivers/xen/pvcalls-front.c if (RING_FULL(&bedata->ring) || bedata 129 drivers/xen/pvcalls-front.c bedata->rsp[*req_id].req_id != PVCALLS_INVALID_ID) bedata 168 drivers/xen/pvcalls-front.c struct pvcalls_bedata *bedata; bedata 177 drivers/xen/pvcalls-front.c bedata = dev_get_drvdata(&dev->dev); bedata 178 drivers/xen/pvcalls-front.c if (bedata == NULL) { bedata 184 drivers/xen/pvcalls-front.c while (RING_HAS_UNCONSUMED_RESPONSES(&bedata->ring)) { bedata 185 drivers/xen/pvcalls-front.c rsp = RING_GET_RESPONSE(&bedata->ring, bedata->ring.rsp_cons); bedata 203 drivers/xen/pvcalls-front.c dst = (uint8_t *)&bedata->rsp[req_id] + bedata 212 drivers/xen/pvcalls-front.c bedata->rsp[req_id].req_id = req_id; bedata 216 drivers/xen/pvcalls-front.c bedata->ring.rsp_cons++; bedata 219 drivers/xen/pvcalls-front.c RING_FINAL_CHECK_FOR_RESPONSES(&bedata->ring, more); bedata 223 drivers/xen/pvcalls-front.c wake_up(&bedata->inflight_req); bedata 228 drivers/xen/pvcalls-front.c static void pvcalls_front_free_map(struct pvcalls_bedata *bedata, bedata 235 drivers/xen/pvcalls-front.c spin_lock(&bedata->socket_lock); bedata 238 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 262 drivers/xen/pvcalls-front.c struct pvcalls_bedata *bedata; bedata 282 drivers/xen/pvcalls-front.c bedata = dev_get_drvdata(&pvcalls_front_dev->dev); bedata 290 drivers/xen/pvcalls-front.c spin_lock(&bedata->socket_lock); bedata 292 drivers/xen/pvcalls-front.c ret = get_request(bedata, &req_id); bedata 295 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 307 drivers/xen/pvcalls-front.c list_add_tail(&map->list, &bedata->socket_mappings); bedata 309 drivers/xen/pvcalls-front.c req = RING_GET_REQUEST(&bedata->ring, req_id); bedata 317 drivers/xen/pvcalls-front.c bedata->ring.req_prod_pvt++; bedata 318 drivers/xen/pvcalls-front.c RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify); bedata 319 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 321 drivers/xen/pvcalls-front.c notify_remote_via_irq(bedata->irq); bedata 323 drivers/xen/pvcalls-front.c wait_event(bedata->inflight_req, bedata 324 drivers/xen/pvcalls-front.c READ_ONCE(bedata->rsp[req_id].req_id) == req_id); bedata 328 drivers/xen/pvcalls-front.c ret = bedata->rsp[req_id].ret; bedata 329 drivers/xen/pvcalls-front.c bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID; bedata 415 drivers/xen/pvcalls-front.c struct pvcalls_bedata *bedata; bedata 427 drivers/xen/pvcalls-front.c bedata = dev_get_drvdata(&pvcalls_front_dev->dev); bedata 434 drivers/xen/pvcalls-front.c spin_lock(&bedata->socket_lock); bedata 435 drivers/xen/pvcalls-front.c ret = get_request(bedata, &req_id); bedata 437 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 444 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 450 drivers/xen/pvcalls-front.c req = RING_GET_REQUEST(&bedata->ring, req_id); bedata 462 drivers/xen/pvcalls-front.c bedata->ring.req_prod_pvt++; bedata 463 drivers/xen/pvcalls-front.c RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify); bedata 464 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 467 drivers/xen/pvcalls-front.c notify_remote_via_irq(bedata->irq); bedata 469 drivers/xen/pvcalls-front.c wait_event(bedata->inflight_req, bedata 470 drivers/xen/pvcalls-front.c READ_ONCE(bedata->rsp[req_id].req_id) == req_id); bedata 474 drivers/xen/pvcalls-front.c ret = bedata->rsp[req_id].ret; bedata 475 drivers/xen/pvcalls-front.c bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID; bedata 662 drivers/xen/pvcalls-front.c struct pvcalls_bedata *bedata; bedata 673 drivers/xen/pvcalls-front.c bedata = dev_get_drvdata(&pvcalls_front_dev->dev); bedata 675 drivers/xen/pvcalls-front.c spin_lock(&bedata->socket_lock); bedata 676 drivers/xen/pvcalls-front.c ret = get_request(bedata, &req_id); bedata 678 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 682 drivers/xen/pvcalls-front.c req = RING_GET_REQUEST(&bedata->ring, req_id); bedata 694 drivers/xen/pvcalls-front.c bedata->ring.req_prod_pvt++; bedata 695 drivers/xen/pvcalls-front.c RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify); bedata 696 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 698 drivers/xen/pvcalls-front.c notify_remote_via_irq(bedata->irq); bedata 700 drivers/xen/pvcalls-front.c wait_event(bedata->inflight_req, bedata 701 drivers/xen/pvcalls-front.c READ_ONCE(bedata->rsp[req_id].req_id) == req_id); bedata 705 drivers/xen/pvcalls-front.c ret = bedata->rsp[req_id].ret; bedata 706 drivers/xen/pvcalls-front.c bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID; bedata 715 drivers/xen/pvcalls-front.c struct pvcalls_bedata *bedata; bedata 723 drivers/xen/pvcalls-front.c bedata = dev_get_drvdata(&pvcalls_front_dev->dev); bedata 730 drivers/xen/pvcalls-front.c spin_lock(&bedata->socket_lock); bedata 731 drivers/xen/pvcalls-front.c ret = get_request(bedata, &req_id); bedata 733 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 737 drivers/xen/pvcalls-front.c req = RING_GET_REQUEST(&bedata->ring, req_id); bedata 743 drivers/xen/pvcalls-front.c bedata->ring.req_prod_pvt++; bedata 744 drivers/xen/pvcalls-front.c RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify); bedata 745 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 747 drivers/xen/pvcalls-front.c notify_remote_via_irq(bedata->irq); bedata 749 drivers/xen/pvcalls-front.c wait_event(bedata->inflight_req, bedata 750 drivers/xen/pvcalls-front.c READ_ONCE(bedata->rsp[req_id].req_id) == req_id); bedata 754 drivers/xen/pvcalls-front.c ret = bedata->rsp[req_id].ret; bedata 755 drivers/xen/pvcalls-front.c bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID; bedata 764 drivers/xen/pvcalls-front.c struct pvcalls_bedata *bedata; bedata 773 drivers/xen/pvcalls-front.c bedata = dev_get_drvdata(&pvcalls_front_dev->dev); bedata 789 drivers/xen/pvcalls-front.c READ_ONCE(bedata->rsp[req_id].req_id) == req_id) { bedata 820 drivers/xen/pvcalls-front.c spin_lock(&bedata->socket_lock); bedata 821 drivers/xen/pvcalls-front.c ret = get_request(bedata, &req_id); bedata 825 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 838 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 842 drivers/xen/pvcalls-front.c list_add_tail(&map2->list, &bedata->socket_mappings); bedata 844 drivers/xen/pvcalls-front.c req = RING_GET_REQUEST(&bedata->ring, req_id); bedata 853 drivers/xen/pvcalls-front.c bedata->ring.req_prod_pvt++; bedata 854 drivers/xen/pvcalls-front.c RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify); bedata 855 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 857 drivers/xen/pvcalls-front.c notify_remote_via_irq(bedata->irq); bedata 865 drivers/xen/pvcalls-front.c if (wait_event_interruptible(bedata->inflight_req, bedata 866 drivers/xen/pvcalls-front.c READ_ONCE(bedata->rsp[req_id].req_id) == req_id)) { bedata 877 drivers/xen/pvcalls-front.c bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID; bedata 881 drivers/xen/pvcalls-front.c pvcalls_front_free_map(bedata, map2); bedata 887 drivers/xen/pvcalls-front.c ret = bedata->rsp[req_id].ret; bedata 888 drivers/xen/pvcalls-front.c bedata->rsp[req_id].req_id = PVCALLS_INVALID_ID; bedata 899 drivers/xen/pvcalls-front.c struct pvcalls_bedata *bedata, bedata 911 drivers/xen/pvcalls-front.c READ_ONCE(bedata->rsp[req_id].req_id) == req_id) bedata 930 drivers/xen/pvcalls-front.c poll_wait(file, &bedata->inflight_req, wait); bedata 934 drivers/xen/pvcalls-front.c spin_lock(&bedata->socket_lock); bedata 935 drivers/xen/pvcalls-front.c ret = get_request(bedata, &req_id); bedata 937 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 940 drivers/xen/pvcalls-front.c req = RING_GET_REQUEST(&bedata->ring, req_id); bedata 945 drivers/xen/pvcalls-front.c bedata->ring.req_prod_pvt++; bedata 946 drivers/xen/pvcalls-front.c RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify); bedata 947 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 949 drivers/xen/pvcalls-front.c notify_remote_via_irq(bedata->irq); bedata 951 drivers/xen/pvcalls-front.c poll_wait(file, &bedata->inflight_req, wait); bedata 956 drivers/xen/pvcalls-front.c struct pvcalls_bedata *bedata, bedata 981 drivers/xen/pvcalls-front.c struct pvcalls_bedata *bedata; bedata 988 drivers/xen/pvcalls-front.c bedata = dev_get_drvdata(&pvcalls_front_dev->dev); bedata 991 drivers/xen/pvcalls-front.c ret = pvcalls_front_poll_active(file, bedata, map, wait); bedata 993 drivers/xen/pvcalls-front.c ret = pvcalls_front_poll_passive(file, bedata, map, wait); bedata 1000 drivers/xen/pvcalls-front.c struct pvcalls_bedata *bedata; bedata 1015 drivers/xen/pvcalls-front.c bedata = dev_get_drvdata(&pvcalls_front_dev->dev); bedata 1017 drivers/xen/pvcalls-front.c spin_lock(&bedata->socket_lock); bedata 1018 drivers/xen/pvcalls-front.c ret = get_request(bedata, &req_id); bedata 1020 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 1026 drivers/xen/pvcalls-front.c req = RING_GET_REQUEST(&bedata->ring, req_id); bedata 1031 drivers/xen/pvcalls-front.c bedata->ring.req_prod_pvt++; bedata 1032 drivers/xen/pvcalls-front.c RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&bedata->ring, notify); bedata 1033 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 1035 drivers/xen/pvcalls-front.c notify_remote_via_irq(bedata->irq); bedata 1037 drivers/xen/pvcalls-front.c wait_event(bedata->inflight_req, bedata 1038 drivers/xen/pvcalls-front.c READ_ONCE(bedata->rsp[req_id].req_id) == req_id); bedata 1057 drivers/xen/pvcalls-front.c pvcalls_front_free_map(bedata, map); bedata 1059 drivers/xen/pvcalls-front.c wake_up(&bedata->inflight_req); bedata 1065 drivers/xen/pvcalls-front.c spin_lock(&bedata->socket_lock); bedata 1067 drivers/xen/pvcalls-front.c spin_unlock(&bedata->socket_lock); bedata 1070 drivers/xen/pvcalls-front.c pvcalls_front_free_map(bedata, bedata 1075 drivers/xen/pvcalls-front.c WRITE_ONCE(bedata->rsp[req_id].req_id, PVCALLS_INVALID_ID); bedata 1088 drivers/xen/pvcalls-front.c struct pvcalls_bedata *bedata; bedata 1091 drivers/xen/pvcalls-front.c bedata = dev_get_drvdata(&pvcalls_front_dev->dev); bedata 1094 drivers/xen/pvcalls-front.c if (bedata->irq >= 0) bedata 1095 drivers/xen/pvcalls-front.c unbind_from_irqhandler(bedata->irq, dev); bedata 1097 drivers/xen/pvcalls-front.c list_for_each_entry_safe(map, n, &bedata->socket_mappings, list) { bedata 1108 drivers/xen/pvcalls-front.c list_for_each_entry_safe(map, n, &bedata->socket_mappings, list) { bedata 1111 drivers/xen/pvcalls-front.c pvcalls_front_free_map(bedata, map); bedata 1117 drivers/xen/pvcalls-front.c if (bedata->ref != -1) bedata 1118 drivers/xen/pvcalls-front.c gnttab_end_foreign_access(bedata->ref, 0, 0); bedata 1119 drivers/xen/pvcalls-front.c kfree(bedata->ring.sring); bedata 1120 drivers/xen/pvcalls-front.c kfree(bedata); bedata 1133 drivers/xen/pvcalls-front.c struct pvcalls_bedata *bedata = NULL; bedata 1162 drivers/xen/pvcalls-front.c bedata = kzalloc(sizeof(struct pvcalls_bedata), GFP_KERNEL); bedata 1163 drivers/xen/pvcalls-front.c if (!bedata) bedata 1166 drivers/xen/pvcalls-front.c dev_set_drvdata(&dev->dev, bedata); bedata 1168 drivers/xen/pvcalls-front.c init_waitqueue_head(&bedata->inflight_req); bedata 1169 drivers/xen/pvcalls-front.c INIT_LIST_HEAD(&bedata->socket_mappings); bedata 1170 drivers/xen/pvcalls-front.c spin_lock_init(&bedata->socket_lock); bedata 1171 drivers/xen/pvcalls-front.c bedata->irq = -1; bedata 1172 drivers/xen/pvcalls-front.c bedata->ref = -1; bedata 1175 drivers/xen/pvcalls-front.c bedata->rsp[i].req_id = PVCALLS_INVALID_ID; bedata 1182 drivers/xen/pvcalls-front.c FRONT_RING_INIT(&bedata->ring, sring, XEN_PAGE_SIZE); bedata 1188 drivers/xen/pvcalls-front.c bedata->irq = bind_evtchn_to_irqhandler(evtchn, bedata 1191 drivers/xen/pvcalls-front.c if (bedata->irq < 0) { bedata 1192 drivers/xen/pvcalls-front.c ret = bedata->irq; bedata 1202 drivers/xen/pvcalls-front.c bedata->ref = ret; bedata 1203 drivers/xen/pvcalls-front.c gnttab_grant_foreign_access_ref(bedata->ref, dev->otherend_id, bedata 1215 drivers/xen/pvcalls-front.c ret = xenbus_printf(xbt, dev->nodename, "ring-ref", "%d", bedata->ref);