mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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@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
ddc2dd1264
commit
971b7d5ecb
4 files changed
+26
-4
No files matched your search
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||