mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
[MINIOS] Fix to use new event-channel API properly.
Signed-off-by: Mark Williamson <mark.williamson@cl.cam.ac.uk>
This commit is contained in:
1 parent
eff691edc0
commit
d1423b2882
3 files changed
+20
-24
No files matched your search
+15
-18
@@ -88,19 +88,18 @@ void unbind_evtchn(evtchn_port_t port )
|
||||
|
||||
int bind_virq(uint32_t virq, evtchn_handler_t handler, void *data)
|
||||
{
|
||||
evtchn_op_t op;
|
||||
evtchn_bind_virq_t op;
|
||||
|
||||
/* Try to bind the virq to a port */
|
||||
op.cmd = EVTCHNOP_bind_virq;
|
||||
op.u.bind_virq.virq = virq;
|
||||
op.u.bind_virq.vcpu = smp_processor_id();
|
||||
op.virq = virq;
|
||||
op.vcpu = smp_processor_id();
|
||||
|
||||
if ( HYPERVISOR_event_channel_op(&op) != 0 )
|
||||
if ( HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq, &op) != 0 )
|
||||
{
|
||||
printk("Failed to bind virtual IRQ %d\n", virq);
|
||||
return 1;
|
||||
}
|
||||
bind_evtchn(op.u.bind_virq.port, handler, data);
|
||||
bind_evtchn(op.port, handler, data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -151,14 +150,13 @@ void default_handler(evtchn_port_t port, struct pt_regs *regs, void *ignore)
|
||||
int evtchn_alloc_unbound(domid_t pal, evtchn_handler_t handler,
|
||||
void *data, evtchn_port_t *port)
|
||||
{
|
||||
evtchn_op_t op;
|
||||
op.cmd = EVTCHNOP_alloc_unbound;
|
||||
op.u.alloc_unbound.dom = DOMID_SELF;
|
||||
op.u.alloc_unbound.remote_dom = pal;
|
||||
int err = HYPERVISOR_event_channel_op(&op);
|
||||
evtchn_alloc_unbound_t op;
|
||||
op.dom = DOMID_SELF;
|
||||
op.remote_dom = pal;
|
||||
int err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, &op);
|
||||
if (err)
|
||||
return err;
|
||||
*port = bind_evtchn(op.u.alloc_unbound.port, handler, data);
|
||||
*port = bind_evtchn(op.port, handler, data);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -169,14 +167,13 @@ int evtchn_bind_interdomain(domid_t pal, evtchn_port_t remote_port,
|
||||
evtchn_handler_t handler, void *data,
|
||||
evtchn_port_t *local_port)
|
||||
{
|
||||
evtchn_op_t op;
|
||||
op.cmd = EVTCHNOP_bind_interdomain;
|
||||
op.u.bind_interdomain.remote_dom = pal;
|
||||
op.u.bind_interdomain.remote_port = remote_port;
|
||||
int err = HYPERVISOR_event_channel_op(&op);
|
||||
evtchn_bind_interdomain_t op;
|
||||
op.remote_dom = pal;
|
||||
op.remote_port = remote_port;
|
||||
int err = HYPERVISOR_event_channel_op(EVTCHNOP_bind_interdomain, &op);
|
||||
if (err)
|
||||
return err;
|
||||
evtchn_port_t port = op.u.bind_interdomain.local_port;
|
||||
evtchn_port_t port = op.local_port;
|
||||
clear_evtchn(port); /* Without, handler gets invoked now! */
|
||||
*local_port = bind_evtchn(port, handler, data);
|
||||
return err;
|
||||
|
||||
@@ -39,10 +39,9 @@ int evtchn_bind_interdomain(domid_t pal, evtchn_port_t remote_port,
|
||||
|
||||
static inline int notify_remote_via_evtchn(evtchn_port_t port)
|
||||
{
|
||||
evtchn_op_t op;
|
||||
op.cmd = EVTCHNOP_send;
|
||||
op.u.send.port = port;
|
||||
return HYPERVISOR_event_channel_op(&op);
|
||||
evtchn_send_t op;
|
||||
op.port = port;
|
||||
return HYPERVISOR_event_channel_op(EVTCHNOP_send, &op);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -238,9 +238,9 @@ HYPERVISOR_update_va_mapping(
|
||||
|
||||
static inline int
|
||||
HYPERVISOR_event_channel_op(
|
||||
void *op)
|
||||
int cmd, void *op)
|
||||
{
|
||||
return _hypercall1(int, event_channel_op, op);
|
||||
return _hypercall2(int, event_channel_op, cmd, op);
|
||||
}
|
||||
|
||||
static inline int
|
||||
|
||||