File xen.trc-ioreq_server_alloc_mfn.patch of Package xen
From: Olaf Hering <olaf@aepfle.de>
Date: Thu, 15 Jun 2023 08:41:16 +0000
Subject: trc ioreq_server_alloc_mfn
Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
xen/common/ioreq.c | 6 ++++++
1 file changed, 6 insertions(+)
--- a/xen/common/ioreq.c
+++ b/xen/common/ioreq.c
@@ -335,24 +335,28 @@ bool vcpu_ioreq_handle_completion(struct vcpu *v)
out:
trc.out = true;
trc.res = res;
trc.state = vio->req.state;
TRACE_trc(TRC_IOREQ_vcpu_ioreq_handle_completion);
return res;
}
static int ioreq_server_alloc_mfn(struct ioreq_server *s, bool buf)
{
struct ioreq_page *iorp = buf ? &s->bufioreq : &s->ioreq;
struct page_info *page;
+ trc_ioreq_server_alloc_mfn_t trc = {
+ .buf = buf,
+ .s = TRC_ePTR(s),
+ };
if ( iorp->page )
{
/*
* If a guest frame has already been mapped (which may happen
* on demand if ioreq_server_get_info() is called), then
* allocating a page is not permitted.
*/
if ( !gfn_eq(iorp->gfn, INVALID_GFN) )
return -EPERM;
return 0;
@@ -370,24 +374,26 @@ static int ioreq_server_alloc_mfn(struct ioreq_server *s, bool buf)
* here is a clear indication of something fishy going on.
*/
domain_crash(s->emulator);
return -ENODATA;
}
iorp->va = __map_domain_page_global(page);
if ( !iorp->va )
goto fail;
iorp->page = page;
clear_page(iorp->va);
+ trc.mfn = mfn_x(page_to_mfn(page));
+ TRACE_trc(TRC_IOREQ_ioreq_server_alloc_mfn);
return 0;
fail:
put_page_alloc_ref(page);
put_page_and_type(page);
return -ENOMEM;
}
static void ioreq_server_free_mfn(struct ioreq_server *s, bool buf)
{
struct ioreq_page *iorp = buf ? &s->bufioreq : &s->ioreq;