Skip to content

Commit

Permalink
xen/evtchn: support more than 4096 ports
Browse files Browse the repository at this point in the history
Remove the check during unbind for NR_EVENT_CHANNELS as this limits
support to less than 4096 ports.

Signed-off-by: David Vrabel <david.vrabel@citrix.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
  • Loading branch information
David Vrabel authored and Konrad Rzeszutek Wilk committed Jan 6, 2014
1 parent fd21069 commit 0dc0064
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 6 deletions.
13 changes: 13 additions & 0 deletions drivers/xen/events/events_base.c
Original file line number Diff line number Diff line change
Expand Up @@ -952,6 +952,19 @@ static int find_virq(unsigned int virq, unsigned int cpu)
return rc;
}

/**
* xen_evtchn_nr_channels - number of usable event channel ports
*
* This may be less than the maximum supported by the current
* hypervisor ABI. Use xen_evtchn_max_channels() for the maximum
* supported.
*/
unsigned xen_evtchn_nr_channels(void)
{
return evtchn_ops->nr_channels();
}
EXPORT_SYMBOL_GPL(xen_evtchn_nr_channels);

int bind_virq_to_irq(unsigned int virq, unsigned int cpu)
{
struct evtchn_bind_virq bind_virq;
Expand Down
5 changes: 0 additions & 5 deletions drivers/xen/events/events_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,6 @@ static inline unsigned xen_evtchn_max_channels(void)
return evtchn_ops->max_channels();
}

static inline unsigned xen_evtchn_nr_channels(void)
{
return evtchn_ops->nr_channels();
}

/*
* Do any ABI specific setup for a bound event channel before it can
* be unmasked and used.
Expand Down
2 changes: 1 addition & 1 deletion drivers/xen/evtchn.c
Original file line number Diff line number Diff line change
Expand Up @@ -417,7 +417,7 @@ static long evtchn_ioctl(struct file *file,
break;

rc = -EINVAL;
if (unbind.port >= NR_EVENT_CHANNELS)
if (unbind.port >= xen_evtchn_nr_channels())
break;

rc = -ENOTCONN;
Expand Down
2 changes: 2 additions & 0 deletions include/xen/events.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
#include <asm/xen/hypercall.h>
#include <asm/xen/events.h>

unsigned xen_evtchn_nr_channels(void);

int bind_evtchn_to_irq(unsigned int evtchn);
int bind_evtchn_to_irqhandler(unsigned int evtchn,
irq_handler_t handler,
Expand Down

0 comments on commit 0dc0064

Please sign in to comment.