libs/guest: Set console as disconnected on resume

There is currently an asymmetry between HVM where the page is cleared
and PV where the contents are restored.

Add xc_dom_console_set_disconnected() to only set the connection flag
for PV guests.

xenconsoled is responsible for setting the console connected when it
attaches.

Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Release-Acked-By: Oleksii Kurochko <oleksii.kurochko@gmail.com>
Acked-by: Anthony PERARD <anthony.perard@vates.tech>
This commit is contained in:
Jason Andryuk authored and Anthony PERARD committed 2025-10-03 15:50:32 +02:00
1 parent 971b7d5ecb
commit b6fc307b0b
4 files changed
+22 -3

No files matched your search

+2
View File
@@ -337,6 +337,8 @@ 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_console_set_disconnected(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,
+18 -2
View File
@@ -428,9 +428,10 @@ int xc_dom_gnttab_init(struct xc_dom_image *dom)
dom->console_domid, dom->xenstore_domid);
}
int xc_dom_console_init(xc_interface *xch,
static int dom_console_init(xc_interface *xch,
uint32_t domid,
unsigned long dst_pfn)
unsigned long dst_pfn,
bool clear)
{
const size_t size = PAGE_SIZE;
struct xencons_interface *xencons = xc_map_foreign_range(
@@ -439,6 +440,7 @@ int xc_dom_console_init(xc_interface *xch,
if ( xencons == NULL )
return -1;
if (clear)
memset(xencons, 0, size);
xencons->connection = XENCONSOLE_DISCONNECTED;
@@ -447,6 +449,20 @@ int xc_dom_console_init(xc_interface *xch,
return 0;
}
int xc_dom_console_init(xc_interface *xch,
uint32_t domid,
unsigned long dst_pfn)
{
return dom_console_init(xch, domid, dst_pfn, true);
}
int xc_dom_console_set_disconnected(xc_interface *xch,
uint32_t domid,
unsigned long dst_pfn)
{
return dom_console_init(xch, domid, dst_pfn, false);
}
/*
* Local variables:
* mode: C
+1 -1
View File
@@ -62,7 +62,7 @@ static int handle_hvm_params(struct xc_sr_context *ctx,
{
case HVM_PARAM_CONSOLE_PFN:
ctx->restore.console_gfn = entry->value;
xc_clear_domain_page(xch, ctx->domid, entry->value);
xc_dom_console_init(xch, ctx->domid, entry->value);
break;
case HVM_PARAM_STORE_PFN:
ctx->restore.xenstore_gfn = entry->value;
+1
View File
@@ -208,6 +208,7 @@ static int process_start_info(struct xc_sr_context *ctx,
goto err;
}
xc_dom_console_set_disconnected(xch, ctx->domid, mfn);
ctx->restore.console_gfn = mfn;
SET_FIELD(guest_start_info, console.domU.mfn, mfn, ctx->x86.pv.width);
SET_FIELD(guest_start_info, console.domU.evtchn,
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.