net: net_{enable|disable}_timestamp() optimizations
authorEric Dumazet <edumazet@google.com>
Tue, 15 Nov 2022 09:10:58 +0000 (09:10 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 16 Nov 2022 12:42:00 +0000 (12:42 +0000)
Adopting atomic_try_cmpxchg() makes the code cleaner.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/dev.c

index 117e830cabb0787ecd3da13bd88f8818fddaddc1..10b56648a9d4a0a709f8e23bb3e114854a4a1b69 100644 (file)
@@ -2073,13 +2073,10 @@ static DECLARE_WORK(netstamp_work, netstamp_clear);
 void net_enable_timestamp(void)
 {
 #ifdef CONFIG_JUMP_LABEL
-       int wanted;
+       int wanted = atomic_read(&netstamp_wanted);
 
-       while (1) {
-               wanted = atomic_read(&netstamp_wanted);
-               if (wanted <= 0)
-                       break;
-               if (atomic_cmpxchg(&netstamp_wanted, wanted, wanted + 1) == wanted)
+       while (wanted > 0) {
+               if (atomic_try_cmpxchg(&netstamp_wanted, &wanted, wanted + 1))
                        return;
        }
        atomic_inc(&netstamp_needed_deferred);
@@ -2093,13 +2090,10 @@ EXPORT_SYMBOL(net_enable_timestamp);
 void net_disable_timestamp(void)
 {
 #ifdef CONFIG_JUMP_LABEL
-       int wanted;
+       int wanted = atomic_read(&netstamp_wanted);
 
-       while (1) {
-               wanted = atomic_read(&netstamp_wanted);
-               if (wanted <= 1)
-                       break;
-               if (atomic_cmpxchg(&netstamp_wanted, wanted, wanted - 1) == wanted)
+       while (wanted > 1) {
+               if (atomic_try_cmpxchg(&netstamp_wanted, &wanted, wanted - 1))
                        return;
        }
        atomic_dec(&netstamp_needed_deferred);