| From b9d934f27c91b878c4b2e64299d6e419a4022f8d Mon Sep 17 00:00:00 2001 |
| From: Boris Ostrovsky <boris.ostrovsky@oracle.com> |
| Date: Wed, 29 Apr 2015 17:10:14 -0400 |
| Subject: xen/console: Update console event channel on resume |
| |
| From: Boris Ostrovsky <boris.ostrovsky@oracle.com> |
| |
| commit b9d934f27c91b878c4b2e64299d6e419a4022f8d upstream. |
| |
| After a resume the hypervisor/tools may change console event |
| channel number. We should re-query it. |
| |
| Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> |
| Signed-off-by: David Vrabel <david.vrabel@citrix.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/tty/hvc/hvc_xen.c | 18 +++++++++++++++++- |
| 1 file changed, 17 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/tty/hvc/hvc_xen.c |
| +++ b/drivers/tty/hvc/hvc_xen.c |
| @@ -299,11 +299,27 @@ static int xen_initial_domain_console_in |
| return 0; |
| } |
| |
| +static void xen_console_update_evtchn(struct xencons_info *info) |
| +{ |
| + if (xen_hvm_domain()) { |
| + uint64_t v; |
| + int err; |
| + |
| + err = hvm_get_parameter(HVM_PARAM_CONSOLE_EVTCHN, &v); |
| + if (!err && v) |
| + info->evtchn = v; |
| + } else |
| + info->evtchn = xen_start_info->console.domU.evtchn; |
| +} |
| + |
| void xen_console_resume(void) |
| { |
| struct xencons_info *info = vtermno_to_xencons(HVC_COOKIE); |
| - if (info != NULL && info->irq) |
| + if (info != NULL && info->irq) { |
| + if (!xen_initial_domain()) |
| + xen_console_update_evtchn(info); |
| rebind_evtchn_irq(info->evtchn, info->irq); |
| + } |
| } |
| |
| static void xencons_disconnect_backend(struct xencons_info *info) |