summaryrefslogtreecommitdiffstats
path: root/drivers/xen/events
diff options
context:
space:
mode:
authorDavid Vrabel <david.vrabel@citrix.com>2015-11-26 16:14:35 +0000
committerDavid Vrabel <david.vrabel@citrix.com>2015-11-26 18:49:54 +0000
commit8620015499101090ae275bf11e9bc2f9febfdf08 (patch)
tree4a85edc5fa4e9b26f285e81d8a062bb10a37685d /drivers/xen/events
parentb4ff8389ed14b849354b59ce9b360bdefcdbf99c (diff)
downloadlinux-8620015499101090ae275bf11e9bc2f9febfdf08.tar.bz2
xen/evtchn: dynamically grow pending event channel ring
If more than 1024 event channels are bound to a evtchn device then it possible (even with well behaved applications) for the ring to overflow and events to be lost (reported as an -EFBIG error). Dynamically increase the size of the ring so there is always enough space for all bound events. Well behaved applicables that only unmask events after draining them from the ring can thus no longer lose events. However, an application could unmask an event before draining it, allowing multiple entries per port to accumulate in the ring, and a overflow could still occur. So the overflow detection and reporting is retained. The ring size is initially only 64 entries so the common use case of an application only binding a few events will use less memory than before. The ring size may grow to 512 KiB (enough for all 2^17 possible channels). This order 7 kmalloc() may fail due to memory fragmentation, so we fall back to trying vmalloc(). Signed-off-by: David Vrabel <david.vrabel@citrix.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Diffstat (limited to 'drivers/xen/events')
0 files changed, 0 insertions, 0 deletions