mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/hpet: use an atomic add instead of a cmpxchg loop
The usage of a cmpxchg loop in hpet_get_channel() is unnecessary, as the same can be achieved with an atomic increment, which is both simpler to read, and avoid any need for a loop. Note there can be a small divergence in the channel returned if next_channel overflows, but returned channel will always be in the [0, num_hpets_used) range, and that's fine for the purpose of balancing HPET channels across CPUs. Signed-of-by: Roger Pau Monné <roger.pau@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Julien Grall <jgrall@amazon.com>
This commit is contained in:
1 parent
f0622dd4fd
commit
f49fb70d3d
1 file changed
+1
-5
+1
-5
@@ -457,11 +457,7 @@ static struct hpet_event_channel *hpet_get_channel(unsigned int cpu)
|
||||
if ( num_hpets_used >= nr_cpu_ids )
|
||||
return &hpet_events[cpu];
|
||||
|
||||
do {
|
||||
next = next_channel;
|
||||
if ( (i = next + 1) == num_hpets_used )
|
||||
i = 0;
|
||||
} while ( cmpxchg(&next_channel, next, i) != next );
|
||||
next = arch_fetch_and_add(&next_channel, 1) % num_hpets_used;
|
||||
|
||||
/* try unused channel first */
|
||||
for ( i = next; i < next + num_hpets_used; i++ )
|
||||
|
||||