int gnttab_grant_foreign_transfer(domid_t domid, unsigned long pfn) { int ref; ref = get_free_entries(1); if (unlikely(ref < 0)) return -ENOSPC; gnttab_grant_foreign_transfer_ref(ref, domid, pfn); return ref; }
int gnttab_alloc_grant_references(u16 count, grant_ref_t *head) { int h = get_free_entries(count); if (h < 0) return -ENOSPC; *head = h; return 0; }
int gnttab_alloc_grant_references(uint16_t count, grant_ref_t *head) { int ref, error; error = get_free_entries(count, &ref); if (__predict_false(error)) return (error); *head = ref; return (0); }
int gnttab_grant_foreign_access(domid_t domid, unsigned long frame, int readonly) { int ref; ref = get_free_entries(1); if (unlikely(ref < 0)) return -ENOSPC; gnttab_grant_foreign_access_ref(ref, domid, frame, readonly); return ref; }
int gnttab_grant_foreign_transfer(domid_t domid, unsigned long pfn, grant_ref_t *result) { int error, ref; error = get_free_entries(1, &ref); if (__predict_false(error)) return (error); gnttab_grant_foreign_transfer_ref(ref, domid, pfn); *result = ref; return (0); }
int gnttab_grant_foreign_access_trans(domid_t domid, int flags, domid_t trans_domid, grant_ref_t trans_gref) { int ref, rc; ref = get_free_entries(1); if (unlikely(ref < 0)) return -ENOSPC; rc = gnttab_grant_foreign_access_trans_ref(ref, domid, flags, trans_domid, trans_gref); if (rc < 0) { put_free_entry(ref); return rc; } return ref; }
int gnttab_grant_foreign_access_subpage(domid_t domid, unsigned long frame, int flags, unsigned page_off, unsigned length) { int ref, rc; ref = get_free_entries(1); if (unlikely(ref < 0)) return -ENOSPC; rc = gnttab_grant_foreign_access_subpage_ref(ref, domid, frame, flags, page_off, length); if (rc < 0) { put_free_entry(ref); return rc; } return ref; }
int gnttab_grant_foreign_access(domid_t domid, unsigned long frame, int readonly, grant_ref_t *result) { int error, ref; error = get_free_entries(1, &ref); if (__predict_false(error)) return (error); shared[ref].frame = frame; shared[ref].domid = domid; wmb(); shared[ref].flags = GTF_permit_access | (readonly ? GTF_readonly : 0); if (result) *result = ref; return (0); }