xen: implement support for secondary consoles in the console backend
This patch corresponds to commit 840184a106bc24e745beda5c77e392f6cecd2bc9 from git://xenbits.xensource.com/qemu-xen-unstable.git. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
This commit is contained in:
parent
a8a826a3c3
commit
2c1d4d15f0
@ -184,7 +184,11 @@ static int con_init(struct XenDevice *xendev)
|
||||
|
||||
/* setup */
|
||||
dom = xs_get_domain_path(xenstore, con->xendev.dom);
|
||||
snprintf(con->console, sizeof(con->console), "%s/console", dom);
|
||||
if (!xendev->dev) {
|
||||
snprintf(con->console, sizeof(con->console), "%s/console", dom);
|
||||
} else {
|
||||
snprintf(con->console, sizeof(con->console), "%s/device/console/%d", dom, xendev->dev);
|
||||
}
|
||||
free(dom);
|
||||
|
||||
type = xenstore_read_str(con->console, "type");
|
||||
@ -223,10 +227,16 @@ static int con_initialise(struct XenDevice *xendev)
|
||||
if (xenstore_read_int(con->console, "limit", &limit) == 0)
|
||||
con->buffer.max_capacity = limit;
|
||||
|
||||
con->sring = xc_map_foreign_range(xen_xc, con->xendev.dom,
|
||||
XC_PAGE_SIZE,
|
||||
PROT_READ|PROT_WRITE,
|
||||
con->ring_ref);
|
||||
if (!xendev->dev) {
|
||||
con->sring = xc_map_foreign_range(xen_xc, con->xendev.dom,
|
||||
XC_PAGE_SIZE,
|
||||
PROT_READ|PROT_WRITE,
|
||||
con->ring_ref);
|
||||
} else {
|
||||
con->sring = xc_gnttab_map_grant_ref(xendev->gnttabdev, con->xendev.dom,
|
||||
con->ring_ref,
|
||||
PROT_READ|PROT_WRITE);
|
||||
}
|
||||
if (!con->sring)
|
||||
return -1;
|
||||
|
||||
@ -255,7 +265,11 @@ static void con_disconnect(struct XenDevice *xendev)
|
||||
xen_be_unbind_evtchn(&con->xendev);
|
||||
|
||||
if (con->sring) {
|
||||
munmap(con->sring, XC_PAGE_SIZE);
|
||||
if (!xendev->gnttabdev) {
|
||||
munmap(con->sring, XC_PAGE_SIZE);
|
||||
} else {
|
||||
xc_gnttab_munmap(xendev->gnttabdev, con->sring, 1);
|
||||
}
|
||||
con->sring = NULL;
|
||||
}
|
||||
}
|
||||
@ -273,7 +287,7 @@ static void con_event(struct XenDevice *xendev)
|
||||
|
||||
struct XenDevOps xen_console_ops = {
|
||||
.size = sizeof(struct XenConsole),
|
||||
.flags = DEVOPS_FLAG_IGNORE_STATE,
|
||||
.flags = DEVOPS_FLAG_IGNORE_STATE|DEVOPS_FLAG_NEED_GNTDEV,
|
||||
.init = con_init,
|
||||
.initialise = con_initialise,
|
||||
.event = con_event,
|
||||
|
Loading…
x
Reference in New Issue
Block a user