From: "Ковалёв Сергей" <valor@list.ru>
To: xen-devel@lists.xenproject.org
Cc: "Jan Beulich" <jbeulich@suse.com>,
"Andrew Cooper" <andrew.cooper3@citrix.com>,
"Roger Pau Monné" <roger.pau@citrix.com>, "Wei Liu" <wl@xen.org>,
"George Dunlap" <george.dunlap@citrix.com>,
"Julien Grall" <julien@xen.org>,
"Stefano Stabellini" <sstabellini@kernel.org>,
"Tamas K Lengyel" <tamas@tklengyel.com>,
"Dmitry Isaykin" <isaikin-dmitry@yandex.ru>
Subject: [XEN PATCH v1 1/1] x86/domctl: add gva_to_gfn command
Date: Mon, 20 Mar 2023 19:32:14 +0300 [thread overview]
Message-ID: <e047a7a7-2e45-48de-2cb4-69001e95e1a8@list.ru> (raw)
gva_to_gfn command used for fast address translation in LibVMI project.
With such a command it is possible to perform address translation in
single call instead of series of queries to get every page table.
Thanks to Dmitry Isaykin for involvement.
Signed-off-by: Sergey Kovalev <valor@list.ru>
---
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: "Roger Pau Monné" <roger.pau@citrix.com>
Cc: Wei Liu <wl@xen.org>
Cc: George Dunlap <george.dunlap@citrix.com>
Cc: Julien Grall <julien@xen.org>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Tamas K Lengyel <tamas@tklengyel.com>
Cc: xen-devel@lists.xenproject.org
---
---
xen/arch/x86/domctl.c | 17 +++++++++++++++++
xen/include/public/domctl.h | 13 +++++++++++++
2 files changed, 30 insertions(+)
diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
index 2118fcad5d..0c9706ea0a 100644
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -1364,6 +1364,23 @@ long arch_do_domctl(
copyback = true;
break;
+ case XEN_DOMCTL_gva_to_gfn:
+ {
+ uint64_t ga = domctl->u.gva_to_gfn.addr;
+ uint64_t cr3 = domctl->u.gva_to_gfn.cr3;
+ struct vcpu* v = d->vcpu[0];
+ uint32_t pfec = PFEC_page_present;
+ unsigned int page_order;
+
+ uint64_t gfn = paging_ga_to_gfn_cr3(v, cr3, ga, &pfec,
&page_order);
+ domctl->u.gva_to_gfn.addr = gfn;
+ domctl->u.gva_to_gfn.page_order = page_order;
+ if ( __copy_to_guest(u_domctl, domctl, 1) )
+ ret = -EFAULT;
+
+ break;
+ }
+
default:
ret = -ENOSYS;
break;
diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h
index 51be28c3de..628dfc68fd 100644
--- a/xen/include/public/domctl.h
+++ b/xen/include/public/domctl.h
@@ -948,6 +948,17 @@ struct xen_domctl_paging_mempool {
uint64_aligned_t size; /* Size in bytes. */
};
+/*
+ * XEN_DOMCTL_gva_to_gfn.
+ *
+ * Get the guest virtual to guest physicall address translated.
+ */
+struct xen_domctl_gva_to_gfn {
+ uint64_aligned_t addr;
+ uint64_aligned_t cr3;
+ uint64_aligned_t page_order;
+};
+
#if defined(__i386__) || defined(__x86_64__)
struct xen_domctl_vcpu_msr {
uint32_t index;
@@ -1278,6 +1289,7 @@ struct xen_domctl {
#define XEN_DOMCTL_vmtrace_op 84
#define XEN_DOMCTL_get_paging_mempool_size 85
#define XEN_DOMCTL_set_paging_mempool_size 86
+#define XEN_DOMCTL_gva_to_gfn 87
#define XEN_DOMCTL_gdbsx_guestmemio 1000
#define XEN_DOMCTL_gdbsx_pausevcpu 1001
#define XEN_DOMCTL_gdbsx_unpausevcpu 1002
@@ -1340,6 +1352,7 @@ struct xen_domctl {
struct xen_domctl_vuart_op vuart_op;
struct xen_domctl_vmtrace_op vmtrace_op;
struct xen_domctl_paging_mempool paging_mempool;
+ struct xen_domctl_gva_to_gfn gva_to_gfn;
uint8_t pad[128];
} u;
};
--
2.38.1
next reply other threads:[~2023-03-20 16:32 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-20 16:32 Ковалёв Сергей [this message]
2023-03-20 19:07 ` [XEN PATCH v1 1/1] x86/domctl: add gva_to_gfn command Andrew Cooper
2023-03-20 19:35 ` Ковалёв Сергей
2023-03-20 19:46 ` Andrew Cooper
2023-03-21 7:28 ` Jan Beulich
2023-03-21 13:46 ` Andrew Cooper
2023-03-20 22:51 ` Tamas K Lengyel
2023-03-20 19:22 ` Ковалёв Сергей
2023-03-20 19:33 ` Andrew Cooper
2023-03-20 23:43 ` Tamas K Lengyel
2023-03-20 23:34 ` Tamas K Lengyel
2023-03-21 7:48 ` Ковалёв Сергей
2023-03-21 13:07 ` Tamas K Lengyel
2023-03-21 7:38 ` Jan Beulich
2023-03-21 15:13 ` Ковалёв Сергей
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e047a7a7-2e45-48de-2cb4-69001e95e1a8@list.ru \
--to=valor@list.ru \
--cc=andrew.cooper3@citrix.com \
--cc=george.dunlap@citrix.com \
--cc=isaikin-dmitry@yandex.ru \
--cc=jbeulich@suse.com \
--cc=julien@xen.org \
--cc=roger.pau@citrix.com \
--cc=sstabellini@kernel.org \
--cc=tamas@tklengyel.com \
--cc=wl@xen.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).