Lines Matching defs:gref

105 	struct gntalloc_gref *gref;
110 static void __del_gref(struct gntalloc_gref *gref);
114 struct gntalloc_gref *gref, *n;
115 list_for_each_entry_safe(gref, n, &gref_list, next_gref) {
116 if (!gref->users)
117 __del_gref(gref);
127 struct gntalloc_gref *gref, *next;
131 gref = kzalloc(sizeof(*gref), GFP_KERNEL);
132 if (!gref) {
136 list_add_tail(&gref->next_gref, &queue_gref);
137 list_add_tail(&gref->next_file, &queue_file);
138 gref->users = 1;
139 gref->file_index = op->index + i * PAGE_SIZE;
140 gref->page = alloc_page(GFP_KERNEL|__GFP_ZERO);
141 if (!gref->page) {
148 xen_page_to_gfn(gref->page),
152 gref_ids[i] = gref->gref_id = rc;
155 /* Add to gref lists. */
167 list_for_each_entry_safe(gref, next, &queue_file, next_file) {
168 list_del(&gref->next_file);
169 __del_gref(gref);
176 static void __del_gref(struct gntalloc_gref *gref)
178 if (gref->notify.flags & UNMAP_NOTIFY_CLEAR_BYTE) {
179 uint8_t *tmp = kmap_local_page(gref->page);
180 tmp[gref->notify.pgoff] = 0;
183 if (gref->notify.flags & UNMAP_NOTIFY_SEND_EVENT) {
184 notify_remote_via_evtchn(gref->notify.event);
185 evtchn_put(gref->notify.event);
188 gref->notify.flags = 0;
190 if (gref->gref_id) {
191 if (gref->page)
192 gnttab_end_foreign_access(gref->gref_id, gref->page);
194 gnttab_free_grant_reference(gref->gref_id);
198 list_del(&gref->next_gref);
200 kfree(gref);
207 struct gntalloc_gref *rv = NULL, *gref;
208 list_for_each_entry(gref, &priv->list, next_file) {
209 if (gref->file_index == index && !rv)
210 rv = gref;
212 if (gref->file_index != index)
250 struct gntalloc_gref *gref;
256 gref = list_entry(priv->list.next,
258 list_del(&gref->next_file);
259 gref->users--;
260 if (gref->users == 0)
261 __del_gref(gref);
337 struct gntalloc_gref *gref, *n;
347 gref = find_grefs(priv, op.index, op.count);
348 if (gref) {
354 n = list_entry(gref->next_file.next,
356 list_del(&gref->next_file);
357 gref->users--;
358 gref = n;
375 struct gntalloc_gref *gref;
388 gref = find_grefs(priv, index, 1);
389 if (!gref) {
413 if (gref->notify.flags & UNMAP_NOTIFY_SEND_EVENT)
414 evtchn_put(gref->notify.event);
416 gref->notify.flags = op.action;
417 gref->notify.pgoff = pgoff;
418 gref->notify.event = op.event_channel_port;
463 struct gntalloc_gref *gref, *next;
472 gref = priv->gref;
474 gref->users--;
475 next = list_entry(gref->next_gref.next,
477 if (gref->users == 0)
478 __del_gref(gref);
479 gref = next;
495 struct gntalloc_gref *gref;
513 gref = find_grefs(priv, vma->vm_pgoff << PAGE_SHIFT, count);
514 if (gref == NULL) {
522 vm_priv->gref = gref;
533 gref->users++;
535 gref->page);
539 gref = list_entry(gref->next_file.next,