Skip to content

Commit 2e820f5

Browse files
Ian Campbellkonradwilk
authored andcommitted
xen/irq: implement bind_interdomain_evtchn_to_irqhandler for backend drivers
Impact: new Xen-internal API Signed-off-by: Ian Campbell <[email protected]> Signed-off-by: Jeremy Fitzhardinge <[email protected]> Signed-off-by: Konrad Rzeszutek Wilk <[email protected]>
1 parent 1bae4ce commit 2e820f5

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

drivers/xen/events.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -864,6 +864,21 @@ static int bind_ipi_to_irq(unsigned int ipi, unsigned int cpu)
864864
return irq;
865865
}
866866

867+
static int bind_interdomain_evtchn_to_irq(unsigned int remote_domain,
868+
unsigned int remote_port)
869+
{
870+
struct evtchn_bind_interdomain bind_interdomain;
871+
int err;
872+
873+
bind_interdomain.remote_dom = remote_domain;
874+
bind_interdomain.remote_port = remote_port;
875+
876+
err = HYPERVISOR_event_channel_op(EVTCHNOP_bind_interdomain,
877+
&bind_interdomain);
878+
879+
return err ? : bind_evtchn_to_irq(bind_interdomain.local_port);
880+
}
881+
867882

868883
int bind_virq_to_irq(unsigned int virq, unsigned int cpu)
869884
{
@@ -959,6 +974,29 @@ int bind_evtchn_to_irqhandler(unsigned int evtchn,
959974
}
960975
EXPORT_SYMBOL_GPL(bind_evtchn_to_irqhandler);
961976

977+
int bind_interdomain_evtchn_to_irqhandler(unsigned int remote_domain,
978+
unsigned int remote_port,
979+
irq_handler_t handler,
980+
unsigned long irqflags,
981+
const char *devname,
982+
void *dev_id)
983+
{
984+
int irq, retval;
985+
986+
irq = bind_interdomain_evtchn_to_irq(remote_domain, remote_port);
987+
if (irq < 0)
988+
return irq;
989+
990+
retval = request_irq(irq, handler, irqflags, devname, dev_id);
991+
if (retval != 0) {
992+
unbind_from_irq(irq);
993+
return retval;
994+
}
995+
996+
return irq;
997+
}
998+
EXPORT_SYMBOL_GPL(bind_interdomain_evtchn_to_irqhandler);
999+
9621000
int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu,
9631001
irq_handler_t handler,
9641002
unsigned long irqflags, const char *devname, void *dev_id)

include/xen/events.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ int bind_ipi_to_irqhandler(enum ipi_vector ipi,
2323
unsigned long irqflags,
2424
const char *devname,
2525
void *dev_id);
26+
int bind_interdomain_evtchn_to_irqhandler(unsigned int remote_domain,
27+
unsigned int remote_port,
28+
irq_handler_t handler,
29+
unsigned long irqflags,
30+
const char *devname,
31+
void *dev_id);
2632

2733
/*
2834
* Common unbind function for all event sources. Takes IRQ to unbind from.

0 commit comments

Comments
 (0)