mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
[MINI-OS] Extend alloc_unbound so that the remote domain isn't always dom0.
Signed-off-by: John D. Ramsdell <ramsdell@mitre.org> Signed-off-by: Steven Smith <sos22@cam.ac.uk>
This commit is contained in:
1 parent
a0f55d516b
commit
194a6f6b1f
2 files changed
+17
-19
No files matched your search
+15
-17
@@ -141,25 +141,23 @@ void default_handler(evtchn_port_t port, struct pt_regs *regs, void *ignore)
|
||||
printk("[Port %d] - event received\n", port);
|
||||
}
|
||||
|
||||
/* Create a port available to the pal for exchanging notifications.
|
||||
Returns the result of the hypervisor call. */
|
||||
|
||||
/* Unfortunate confusion of terminology: the port is unbound as far
|
||||
as Xen is concerned, but we automatically bind a handler to it
|
||||
from inside mini-os. */
|
||||
evtchn_port_t evtchn_alloc_unbound(evtchn_handler_t handler, void *data)
|
||||
|
||||
int evtchn_alloc_unbound(domid_t pal, evtchn_handler_t handler,
|
||||
void *data, evtchn_port_t *port)
|
||||
{
|
||||
evtchn_port_t port;
|
||||
evtchn_op_t op;
|
||||
int err;
|
||||
|
||||
op.cmd = EVTCHNOP_alloc_unbound;
|
||||
op.u.alloc_unbound.dom = DOMID_SELF;
|
||||
op.u.alloc_unbound.remote_dom = 0;
|
||||
|
||||
err = HYPERVISOR_event_channel_op(&op);
|
||||
if (err) {
|
||||
printk("Failed to alloc unbound evtchn: %d.\n", err);
|
||||
return -1;
|
||||
}
|
||||
port = op.u.alloc_unbound.port;
|
||||
bind_evtchn(port, handler, data);
|
||||
return 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);
|
||||
if (err)
|
||||
return err;
|
||||
*port = bind_evtchn(op.u.alloc_unbound.port, handler, data);
|
||||
return err;
|
||||
}
|
||||
@@ -31,8 +31,8 @@ evtchn_port_t bind_evtchn(evtchn_port_t port, evtchn_handler_t handler,
|
||||
void *data);
|
||||
void unbind_evtchn(evtchn_port_t port);
|
||||
void init_events(void);
|
||||
evtchn_port_t evtchn_alloc_unbound(evtchn_handler_t handler,
|
||||
void *data);
|
||||
int evtchn_alloc_unbound(domid_t pal, evtchn_handler_t handler,
|
||||
void *data, evtchn_port_t *port);
|
||||
|
||||
static inline int notify_remote_via_evtchn(evtchn_port_t port)
|
||||
{
|
||||
|
||||