X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fxen%2Fconsole%2Fxencons_ring.c;h=aafc6b23158f008294ed7fb7d2309a756e5187cf;hb=refs%2Fheads%2Fvserver;hp=454fe42275f9c58d7ce6f4a36e89b356c50cd9da;hpb=1db395853d4f30d6120458bd279ede1f882a8525;p=linux-2.6.git diff --git a/drivers/xen/console/xencons_ring.c b/drivers/xen/console/xencons_ring.c index 454fe4227..aafc6b231 100644 --- a/drivers/xen/console/xencons_ring.c +++ b/drivers/xen/console/xencons_ring.c @@ -52,13 +52,13 @@ static int xencons_irq; static inline struct xencons_interface *xencons_interface(void) { - return mfn_to_virt(xen_start_info->console_mfn); + return mfn_to_virt(xen_start_info->console.domU.mfn); } static inline void notify_daemon(void) { /* Use evtchn: this is called early, before irq is set up. */ - notify_remote_via_evtchn(xen_start_info->console_evtchn); + notify_remote_via_evtchn(xen_start_info->console.domU.evtchn); } int xencons_ring_send(const char *data, unsigned len) @@ -83,7 +83,7 @@ int xencons_ring_send(const char *data, unsigned len) return sent; } -static irqreturn_t handle_input(int irq, void *unused, struct pt_regs *regs) +static irqreturn_t handle_input(int irq, void *unused) { struct xencons_interface *intf = xencons_interface(); XENCONS_RING_IDX cons, prod; @@ -94,7 +94,7 @@ static irqreturn_t handle_input(int irq, void *unused, struct pt_regs *regs) BUG_ON((prod - cons) > sizeof(intf->in)); while (cons != prod) { - xencons_rx(intf->in+MASK_XENCONS_IDX(cons,intf->in), 1, regs); + xencons_rx(intf->in+MASK_XENCONS_IDX(cons,intf->in), 1); cons++; } @@ -110,24 +110,26 @@ static irqreturn_t handle_input(int irq, void *unused, struct pt_regs *regs) int xencons_ring_init(void) { - int err; + int irq; if (xencons_irq) unbind_from_irqhandler(xencons_irq, NULL); xencons_irq = 0; - if (!xen_start_info->console_evtchn) - return 0; + if (!is_running_on_xen() || + is_initial_xendomain() || + !xen_start_info->console.domU.evtchn) + return -ENODEV; - err = bind_evtchn_to_irqhandler( - xen_start_info->console_evtchn, + irq = bind_evtchn_to_irqhandler( + xen_start_info->console.domU.evtchn, handle_input, 0, "xencons", NULL); - if (err <= 0) { - printk(KERN_ERR "XEN console request irq failed %i\n", err); - return err; + if (irq < 0) { + printk(KERN_ERR "XEN console request irq failed %i\n", irq); + return irq; } - xencons_irq = err; + xencons_irq = irq; /* In case we have in-flight data after save/restore... */ notify_daemon();