Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
xen.7653
5582bf43-evtchn-simplify-port_is_valid.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 5582bf43-evtchn-simplify-port_is_valid.patch of Package xen.7653
# Commit 01280dc19cf3da089f98faf4f524b54b5a191df0 # Date 2015-06-18 14:53:23 +0200 # Author David Vrabel <david.vrabel@citrix.com> # Committer Jan Beulich <jbeulich@suse.com> evtchn: simplify port_is_valid() By keeping a count of the number of currently valid event channels, port_is_valid() can be simplified. d->valid_evtchns is only increased (while holding d->event_lock), so port_is_valid() may be safely called without taking the lock (this will be useful later). Signed-off-by: David Vrabel <david.vrabel@citrix.com> --- a/xen/common/event_channel.c +++ b/xen/common/event_channel.c @@ -192,6 +192,8 @@ static int get_free_port(struct domain * return -ENOMEM; bucket_from_port(d, port) = chn; + write_atomic(&d->valid_evtchns, d->valid_evtchns + EVTCHNS_PER_BUCKET); + return port; } @@ -1265,6 +1267,7 @@ int evtchn_init(struct domain *d) d->evtchn = alloc_evtchn_bucket(d, 0); if ( !d->evtchn ) return -ENOMEM; + d->valid_evtchns = EVTCHNS_PER_BUCKET; spin_lock_init(&d->event_lock); if ( get_free_port(d) != 0 ) --- a/xen/include/xen/event.h +++ b/xen/include/xen/event.h @@ -90,11 +90,7 @@ static inline bool_t port_is_valid(struc { if ( p >= d->max_evtchns ) return 0; - if ( !d->evtchn ) - return 0; - if ( p < EVTCHNS_PER_BUCKET ) - return 1; - return group_from_port(d, p) != NULL && bucket_from_port(d, p) != NULL; + return p < read_atomic(&d->valid_evtchns); } static inline struct evtchn *evtchn_from_port(struct domain *d, unsigned int p) --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -340,8 +340,9 @@ struct domain /* Event channel information. */ struct evtchn *evtchn; /* first bucket only */ struct evtchn **evtchn_group[NR_EVTCHN_GROUPS]; /* all other buckets */ - unsigned int max_evtchns; - unsigned int max_evtchn_port; + unsigned int max_evtchns; /* number supported by ABI */ + unsigned int max_evtchn_port; /* max permitted port number */ + unsigned int valid_evtchns; /* number of allocated event channels */ spinlock_t event_lock; const struct evtchn_port_ops *evtchn_port_ops; struct evtchn_fifo_domain *evtchn_fifo;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor