|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] libs/guest: Set console page to disconnected
commit 971b7d5ecbcdbd3151c9cba1ca467c86ecb67e69
Author: Jason Andryuk <jason.andryuk@xxxxxxx>
AuthorDate: Fri Aug 22 17:39:44 2025 -0400
Commit: Anthony PERARD <anthony.perard@xxxxxxxxxx>
CommitDate: Fri Oct 3 15:50:32 2025 +0200
libs/guest: Set console page to disconnected
Initialize xencons_interface's connection field to
XENCONSOLE_DISCONNECTED. xenconsoled will mark the page as connected
when it establishes the connection.
Signed-off-by: Jason Andryuk <jason.andryuk@xxxxxxx>
Reviewed-by: Juergen Gross <jgross@xxxxxxxx>
Release-Acked-By: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
Acked-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
---
tools/include/xenguest.h | 2 ++
tools/libs/guest/xg_dom_arm.c | 2 +-
tools/libs/guest/xg_dom_boot.c | 20 ++++++++++++++++++++
tools/libs/guest/xg_dom_x86.c | 6 +++---
4 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h
index e01f494b77..1d5a6d3509 100644
--- a/tools/include/xenguest.h
+++ b/tools/include/xenguest.h
@@ -335,6 +335,8 @@ void *xc_dom_boot_domU_map(struct xc_dom_image *dom,
xen_pfn_t pfn,
xen_pfn_t count);
int xc_dom_boot_image(struct xc_dom_image *dom);
int xc_dom_compat_check(struct xc_dom_image *dom);
+int xc_dom_console_init(xc_interface *xch, uint32_t guest_domid,
+ xen_pfn_t console_gfn);
int xc_dom_gnttab_init(struct xc_dom_image *dom);
int xc_dom_gnttab_seed(xc_interface *xch, uint32_t guest_domid,
bool is_hvm,
diff --git a/tools/libs/guest/xg_dom_arm.c b/tools/libs/guest/xg_dom_arm.c
index 2fd8ee7ad4..c8d0918506 100644
--- a/tools/libs/guest/xg_dom_arm.c
+++ b/tools/libs/guest/xg_dom_arm.c
@@ -70,7 +70,7 @@ static int alloc_magic_pages(struct xc_dom_image *dom)
dom->xenstore_pfn = base + XENSTORE_PFN_OFFSET;
dom->vuart_gfn = base + VUART_PFN_OFFSET;
- xc_clear_domain_page(dom->xch, dom->guest_domid, dom->console_pfn);
+ xc_dom_console_init(dom->xch, dom->guest_domid, dom->console_pfn);
xc_clear_domain_page(dom->xch, dom->guest_domid, dom->xenstore_pfn);
xc_clear_domain_page(dom->xch, dom->guest_domid, base +
MEMACCESS_PFN_OFFSET);
xc_clear_domain_page(dom->xch, dom->guest_domid, dom->vuart_gfn);
diff --git a/tools/libs/guest/xg_dom_boot.c b/tools/libs/guest/xg_dom_boot.c
index 5c7e12221d..b5f248e642 100644
--- a/tools/libs/guest/xg_dom_boot.c
+++ b/tools/libs/guest/xg_dom_boot.c
@@ -34,6 +34,7 @@
#include "xg_core.h"
#include <xen/hvm/params.h>
#include <xen/grant_table.h>
+#include <xen/io/console.h>
/* ------------------------------------------------------------------------ */
@@ -427,6 +428,25 @@ int xc_dom_gnttab_init(struct xc_dom_image *dom)
dom->console_domid, dom->xenstore_domid);
}
+int xc_dom_console_init(xc_interface *xch,
+ uint32_t domid,
+ unsigned long dst_pfn)
+{
+ const size_t size = PAGE_SIZE;
+ struct xencons_interface *xencons = xc_map_foreign_range(
+ xch, domid, size, PROT_WRITE, dst_pfn);
+
+ if ( xencons == NULL )
+ return -1;
+
+ memset(xencons, 0, size);
+ xencons->connection = XENCONSOLE_DISCONNECTED;
+
+ munmap(xencons, size);
+ xc_domain_cacheflush(xch, domid, dst_pfn, 1);
+ return 0;
+}
+
/*
* Local variables:
* mode: C
diff --git a/tools/libs/guest/xg_dom_x86.c b/tools/libs/guest/xg_dom_x86.c
index cba01384ae..a82b481a12 100644
--- a/tools/libs/guest/xg_dom_x86.c
+++ b/tools/libs/guest/xg_dom_x86.c
@@ -587,8 +587,8 @@ static int alloc_magic_pages_pv(struct xc_dom_image *dom)
dom->console_pfn = xc_dom_alloc_page(dom, "console");
if ( dom->console_pfn == INVALID_PFN )
return -1;
- xc_clear_domain_page(dom->xch, dom->guest_domid,
- xc_dom_p2m(dom, dom->console_pfn));
+ xc_dom_console_init(dom->xch, dom->guest_domid,
+ xc_dom_p2m(dom, dom->console_pfn));
dom->alloc_bootstack = 1;
@@ -734,7 +734,7 @@ static int alloc_magic_pages_hvm(struct xc_dom_image *dom)
special_pfn(SPECIALPAGE_IDENT_PT) << PAGE_SHIFT);
dom->console_pfn = special_pfn(SPECIALPAGE_CONSOLE);
- xc_clear_domain_page(dom->xch, dom->guest_domid, dom->console_pfn);
+ xc_dom_console_init(dom->xch, dom->guest_domid, dom->console_pfn);
dom->xenstore_pfn = special_pfn(SPECIALPAGE_XENSTORE);
xc_clear_domain_page(dom->xch, dom->guest_domid, dom->xenstore_pfn);
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |