mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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:
1 parent
971b7d5ecb
commit
b6fc307b0b
4 files changed
+24
-5
No files matched your search
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
uint32_t domid,
|
||||
unsigned long dst_pfn)
|
||||
static int dom_console_init(xc_interface *xch,
|
||||
uint32_t domid,
|
||||
unsigned long dst_pfn,
|
||||
bool clear)
|
||||
{
|
||||
const size_t size = PAGE_SIZE;
|
||||
struct xencons_interface *xencons = xc_map_foreign_range(
|
||||
@@ -439,7 +440,8 @@ int xc_dom_console_init(xc_interface *xch,
|
||||
if ( xencons == NULL )
|
||||
return -1;
|
||||
|
||||
memset(xencons, 0, size);
|
||||
if (clear)
|
||||
memset(xencons, 0, size);
|
||||
xencons->connection = XENCONSOLE_DISCONNECTED;
|
||||
|
||||
munmap(xencons, size);
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||