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;
openSUSE Build Service is sponsored by