svn commit: r368727 - head/sys/netgraph
Aleksandr Fedorov
afedorov at FreeBSD.org
Thu Dec 17 18:15:08 UTC 2020
Author: afedorov
Date: Thu Dec 17 18:15:07 2020
New Revision: 368727
URL: https://svnweb.freebsd.org/changeset/base/368727
Log:
[ng_socket] Don't take the SOCKBUF_LOCK() twice in the RX data path.
This is just a minor optimization, but it's sensitive. This gives an improvement of 30-50 kpps.
Reviewed by: kp, markj, glebius, lutz_donnerhacke.de
Approved by: vmaffione (mentor)
Sponsored by: vstack.com
Differential Revision: https://reviews.freebsd.org/D27382
Modified:
head/sys/netgraph/ng_socket.c
Modified: head/sys/netgraph/ng_socket.c
==============================================================================
--- head/sys/netgraph/ng_socket.c Thu Dec 17 17:21:12 2020 (r368726)
+++ head/sys/netgraph/ng_socket.c Thu Dec 17 18:15:07 2020 (r368727)
@@ -987,6 +987,8 @@ ngs_rcvmsg(node_p node, item_p item, hook_p lasthook)
m_freem(m);
return (ENOBUFS);
}
+
+ /* sorwakeup_locked () releases the lock internally. */
sorwakeup_locked(so);
return (error);
@@ -1025,12 +1027,17 @@ ngs_rcvdata(hook_p hook, item_p item)
addr->sg_data[addrlen] = '\0';
/* Try to tell the socket which hook it came in on. */
- if (sbappendaddr(&so->so_rcv, (struct sockaddr *)addr, m, NULL) == 0) {
+ SOCKBUF_LOCK(&so->so_rcv);
+ if (sbappendaddr_locked(&so->so_rcv, (struct sockaddr *)addr, m,
+ NULL) == 0) {
+ SOCKBUF_UNLOCK(&so->so_rcv);
m_freem(m);
TRAP_ERROR;
return (ENOBUFS);
}
- sorwakeup(so);
+
+ /* sorwakeup_locked () releases the lock internally. */
+ sorwakeup_locked(so);
return (0);
}
More information about the svn-src-all
mailing list