int mem_access_send_req(struct domain *d, mem_event_request_t *req) { int rc = mem_event_claim_slot(d, &d->mem_event->access); if ( rc < 0 ) return rc; mem_event_put_request(d, &d->mem_event->access, req); return 0; }
* @gfn: guest page to drop * * p2m_mem_paging_drop_page() will notify the pager that a paged-out gfn was * released by the guest. The pager is supposed to drop its reference of the * gfn. */ void p2m_mem_paging_drop_page(struct domain *d, unsigned long gfn, p2m_type_t p2mt) { mem_event_request_t req = { .gfn = gfn }; /* We allow no ring in this unique case, because it won't affect * correctness of the guest execution at this point. If this is the only * page that happens to be paged-out, we'll be okay.. but it's likely the * guest will crash shortly anyways. */ int rc = mem_event_claim_slot(d, &d->mem_event->paging); if ( rc < 0 ) return; /* Send release notification to pager */ req.flags = MEM_EVENT_FLAG_DROP_PAGE; /* Update stats unless the page hasn't yet been evicted */ if ( p2mt != p2m_ram_paging_out ) atomic_dec(&d->paged_pages); else /* Evict will fail now, tag this request for pager */ req.flags |= MEM_EVENT_FLAG_EVICT_FAIL; mem_event_put_request(d, &d->mem_event->paging, &req); }