summaryrefslogtreecommitdiffstats
path: root/Documentation
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2023-04-07 03:25:33 +0200
committerJakub Kicinski <kuba@kernel.org>2023-04-11 02:56:18 +0200
commitc91c46de6bbc1147ae5dfe046b87f5f3d6593215 (patch)
tree991868725389937ee41fa504abdc098e5d4360e5 /Documentation
parentdocs: net: use C syntax highlight in driver.rst (diff)
downloadlinux-c91c46de6bbc1147ae5dfe046b87f5f3d6593215.tar.xz
linux-c91c46de6bbc1147ae5dfe046b87f5f3d6593215.zip
net: provide macros for commonly copied lockless queue stop/wake code
A lot of drivers follow the same scheme to stop / start queues without introducing locks between xmit and NAPI tx completions. I'm guessing they all copy'n'paste each other's code. The original code dates back all the way to e1000 and Linux 2.6.19. Smaller drivers shy away from the scheme and introduce a lock which may cause deadlocks in netpoll. Provide macros which encapsulate the necessary logic. The macros do not prevent false wake ups, the extra barrier required to close that race is not worth it. See discussion in: https://lore.kernel.org/all/c39312a2-4537-14b4-270c-9fe1fbb91e89@gmail.com/ Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/networking/driver.rst6
1 files changed, 6 insertions, 0 deletions
diff --git a/Documentation/networking/driver.rst b/Documentation/networking/driver.rst
index 19c363291d04..4071f2c00f8b 100644
--- a/Documentation/networking/driver.rst
+++ b/Documentation/networking/driver.rst
@@ -104,6 +104,12 @@ and:
TX_BUFFS_AVAIL(dp) > 0)
netif_wake_queue(dp->dev);
+Lockless queue stop / wake helper macros
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. kernel-doc:: include/net/netdev_queues.h
+ :doc: Lockless queue stopping / waking helpers.
+
No exclusive ownership
----------------------