Revision tags: v6.2.1, v6.2.0, v6.3.0, v6.0.1, v6.0.0, v6.0.0rc1, v6.1.0, v5.8.3, v5.8.2, v5.8.1, v5.8.0, v5.9.0, v5.8.0rc1, v5.6.3, v5.6.2, v5.6.1, v5.6.0, v5.6.0rc1, v5.7.0, v5.4.3, v5.4.2, v5.4.1, v5.4.0, v5.5.0, v5.4.0rc1, v5.2.2, v5.2.1, v5.2.0, v5.3.0, v5.2.0rc, v5.0.2, v5.0.1, v5.0.0, v5.0.0rc2, v5.1.0, v5.0.0rc1, v4.8.1 |
|
#
2eb060ca |
| 01-Aug-2017 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
domain: Nuke pfslowtimo.
|
#
d2a45df8 |
| 31-Jul-2017 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
domain: Nuke pffasttimo
|
Revision tags: v4.8.0, v4.6.2, v4.9.0, v4.8.0rc, v4.6.1, v4.6.0, v4.6.0rc2, v4.6.0rc, v4.7.0 |
|
#
680c4dd3 |
| 26-May-2016 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
tcp: Make setsockopt(2) TCP_{NODELAY,NOPUSH,NOOPT,FASTKEEP} asynchronous
This makes all network system calls used by nginx asynchronous and greatly improves nginx performance.
For 1 requests/connec
tcp: Make setsockopt(2) TCP_{NODELAY,NOPUSH,NOOPT,FASTKEEP} asynchronous
This makes all network system calls used by nginx asynchronous and greatly improves nginx performance.
For 1 requests/connection (30K concurrent connections), this commit gives 12% improvement for 16KB web object (was 16.8Gbps, now 19.2Gbps, which maxes out 2x10Ge). And it gives 19% improvement for 1KB web object (was 156Kreqs/s, now 186Kreqs/s).
show more ...
|
Revision tags: v4.4.3, v4.4.2 |
|
#
2c64e990 |
| 25-Jan-2016 |
zrj <rimvydas.jasinskas@gmail.com> |
Remove advertising header from sys/
Correct BSD License clause numbering from 1-2-4 to 1-2-3.
Some less clear cases taken as it was done of FreeBSD.
|
Revision tags: v4.4.1, v4.4.0, v4.5.0, v4.4.0rc |
|
#
c892825f |
| 15-Oct-2015 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
socket/tcp: Implement asynchronized pru_attach for TCP
This commit mainly splits TCP pru_attach into two parts: - First part operates on socket buffer, so it could run directly in the caller threa
socket/tcp: Implement asynchronized pru_attach for TCP
This commit mainly splits TCP pru_attach into two parts: - First part operates on socket buffer, so it could run directly in the caller thread. - The second part creates and initializes tcpcb, which still runs in netisr. But we don't wait for the result of this operation (lwkt_sendmsg() is used instead of lwkt_domsg()).
This removes the last lwkt_domsg on commonly/mostly used socket APIs. This is enabled by default and could be disabled by setting sysctl kern.ipc.socreate_fast to 0.
The measured effect of this change on 2-ways E5-2600v2 with Intel 82599 (10Gbe) using tools/kq_connect_client: - Connect rate increases by ~10Kconns/s; we are now doing 395Kconns/s. - Idle time on the CPUs not running netisrs increases (55% -> 65%). - IPIs rate to the CPUs not running netisrs reduces (40Kipis/s -> 23Kipis/s).
show more ...
|
Revision tags: v4.2.4, v4.3.1, v4.2.3, v4.2.1, v4.2.0, v4.0.6, v4.3.0, v4.2.0rc, v4.0.5, v4.0.4, v4.0.3 |
|
#
60a260ad |
| 07-Jan-2015 |
Sascha Wildner <saw@online.de> |
kernel: Remove our ancient SCTP support.
It was based on an early stage of FreeBSD's support and never got beyond that point, due to lack of usage and lack of maintenance.
It is also kind of standi
kernel: Remove our ancient SCTP support.
It was based on an early stage of FreeBSD's support and never got beyond that point, due to lack of usage and lack of maintenance.
It is also kind of standing the the way of ongoing work in the IPv6 stack by sephe.
If anyone ever wants to start again on upgrading and maintaining it, they can decide then if reverting this commit again makes sense as a base.
Requested-by: sephe Approved-by: dillon
show more ...
|
Revision tags: v4.0.2, v4.0.1 |
|
#
130b7902 |
| 24-Nov-2014 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
icmp: Asynchonize ctlinput/mtudisc/redirect processing
Supportive facilities added: - Embed netmsg_ctlinput into mbuf (used by input ICMP datagram) so that we don't need to do additional memory al
icmp: Asynchonize ctlinput/mtudisc/redirect processing
Supportive facilities added: - Embed netmsg_ctlinput into mbuf (used by input ICMP datagram) so that we don't need to do additional memory allocation to forward the pr_ctlinput to all netisrs for certain types of ICMP datagrams. - Add/Expose so_pr_ctlport(). - Return target netisr's cpuid from pr_ctlport. If the returned cpuid equals to ncpus, it means that pr_ctlinput needs to be run in all netisrs. - Support 'direct' mode for TCP/UDP's pr_ctlinput. The caller of the 'direct' mode pr_ctlinput will do the message forwarding.
ICMP pr_ctlinput/mtudisc/redirect processing changes: - For mtudisc and redirect we unconditionally forward the message embedded in input ICMP datagram to all netisrs, and call pr_ctlinput in 'direct' mode. - For pr_ctlinput, we first call so_pr_ctlport() to see whether we need to forward the message embedded in input ICMP datagram to all netisrs, and act accordingly. - Once pr_ctlinput/mtudisc/redirect processing is done, the message embedded in the input ICMP datagram is forwarded back to the netisr0 to run rip_input().
After this commit, netisr0 will not be blocked for ICMP pr_ctlinput/ mtudisc/redirect processing. This also fixes the mtudisc (originally only cpu0's routes get mtu updates).
show more ...
|
Revision tags: v4.0.0, v4.0.0rc3, v4.0.0rc2, v4.0.0rc, v4.1.0, v3.8.2 |
|
#
be4519a2 |
| 03-Jul-2014 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
udp: Make udp pcbinfo and portinfo per-cpu; greatly improve performance
MAJOR CHANGES:
- Add token to protect pcbinfo's inpcb list and wildcard hash table. Currently only udp per-cpu pcbinfo sets
udp: Make udp pcbinfo and portinfo per-cpu; greatly improve performance
MAJOR CHANGES:
- Add token to protect pcbinfo's inpcb list and wildcard hash table. Currently only udp per-cpu pcbinfo sets this token. udp serializer and netisr barrier are nuked.
o udp inpcb list:
Under most cases, udp inpcb list is operated in its owner netisr. However, it is also accessed and modified (no effiective udp inpcb will be unlinked though) in netisr0 to adjust multicast options if one interface is to be detached. So protecting udp inpcb list accessing and modification w/ token is necessary.
At udp inpcb detach time, the udp inpcb is first removed from the udp inpcb list, then a message will go through all netisrs, which makes sure that no netisrs are using or can find this udp inpcb from the udp inpcb list. After all these, this udp inpcb is destroyed in its owner netisr.
In netisrs, it is MP safe to find a udp inpcb from udp inpcb list, then release the token and process the found udp inpcb.
In other threads, it is MP safe to find a udp inpcb from udp inpcb list, then release the token and process the found udp inpcb in non-blocking fashion.
See also the usage of inpcb marker.
o udp wildcard hash table:
On input path, udp wildcard hash table is searched in its owner netisr. In order to ease implicit binding (bind during send), connect after binding, and disconnect, udp inpcb are inserted into and removed from other udp pcbinfos' wildcard hash table in its owner netisr. Thus the udp wildcard hash table must be protected w/ token.
At udp inpcb detach time, a message will go through all netisrs, and this udp inpcb will be removed from the udp wildcard hash table belonging to the current netisr. This makes sure that once the current netisr runs the message handler, this udp inpcb will not be used and be found in the current netisr. When the message reaches the last netisr, this udp inpcb is redispatched to its owner netisr to be destroyed.
In netisrs, it is MP safe to find a udp inpcb from udp wildcard hash table, then release the token and process the found udp inpcb, e.g. use udp inpcb found by in_pcblookuphash().
In other threads, it is MP safe to find a udp inpcb from udp wildcard hash table, then release the token and process the found udp inpcb in non-blocking fashion.
See also the usage of inpcb container marker.
o udp connect hash table:
It is lockless MP safe, and only accessed and modified in its owner netisr.
- During inpcb iteration through inpcb list, use inpcb marker when calling functions, which may block, e.g. in_pcbpurgeif0(), so the inpcb iteration will not stop prematurely, if the inpcb being processed is removed from the inpcb list.
- Use udp inpcb wildcard table and udp inpcb connect hash table to dispatch input multicast and broadcast udp datagrams. Using udp inpcb list could be time consume, since we need to check udp inpcb lists on all cpus; and secondly, once udp inpcb has a local port, it will be in either udp wildcard hash table or udp connect hash table.
Since the socket buffer operation on input path may block, inpcb container marker is used when iterating inpcbs from udp inpcb wildcard hash table. in_pcblookup_pkthash() is adjusted to skip inpcb container marker.
- udp socket so_port is no longer fixed to netisr0 msgport o Initial udp socket so_port is the current cpu's netisr msgport. o Bound but unconnected udp socket so_port is selected according to local port hash. o Connected udp socket so_port is selected according to the udp hash, i.e. laddr/faddr toeplitz hash (exception: multicast laddr or multicast faddr, is hashed to netisr0). o Multicast socket options are forced to be handled in netisr0, since udp socket so_port may not be netisr0 msgport.
- In order to support asynchronized udp inpcb detach: o EJUSTRETURN from pru_detach method now means protocol will call sodiscard() and sofree() for soclose(). udp pru_detach method returns EJUSTRETURN as of this commit. o SS_ISCLOSING socket state is set before calling pru_detach method, so protocol could avoid certain expensive, unnecessary or disallowed operation in pru_disconnect or pru_detach method, e.g. udp pru_disconnect method avoids putting udp inpcb back to udp wildcard hash table, if SS_ISCLOSING is set.
MISC CHANGES:
- pcbinfo's cpu id must be set now; -1 is disallowed. - udp pru_abort method should never be called; it panicks now. - Restore traditional BSD behaviour, if unbound udp socket connect fails: if local port of the udp socket has been selected, its inpcb should be in wildcard hash table, i.e. the udp inpcb should be visible on udp datagrams input path. - Make sure multicast stuffs are adjusted only in netisr0 for inet6, if one interface is about to be detached.
PERFORMANCE IMPROVEMENT:
For 'kq_connect_client -u' test, this commit gives 400% performance improvement (31Kconns/s -> 160Kconns/s).
show more ...
|
#
aed39f68 |
| 15-Jul-2014 |
Sascha Wildner <saw@online.de> |
<sys/protosw.h>: Use netmsg_t.
|
#
ee0be9ca |
| 18-Jun-2014 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
net: Add initport protosw method to init socket's default protocol port
Currently only tcp implements this method to distribute pru_attach and pru_connect workload.
Nuke no longer necessary protosw
net: Add initport protosw method to init socket's default protocol port
Currently only tcp implements this method to distribute pru_attach and pru_connect workload.
Nuke no longer necessary protosw flag PR_RAND_INITPORT and sysctl kern.ipc.rand_initport.
show more ...
|
Revision tags: v3.8.1, v3.6.3, v3.8.0, v3.8.0rc2, v3.9.0, v3.8.0rc, v3.6.2, v3.6.1, v3.6.0, v3.7.1, v3.6.0rc, v3.7.0 |
|
#
1c92f416 |
| 28-Aug-2013 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
tcp: Implement random initial msgport
After e368a6e95e2cd9556a3e0fc43167d2dcf3a8253f, it is found that the left bottle neck of nonblocking TCP connect(2) performance is that all socket(2) and initia
tcp: Implement random initial msgport
After e368a6e95e2cd9556a3e0fc43167d2dcf3a8253f, it is found that the left bottle neck of nonblocking TCP connect(2) performance is that all socket(2) and initial TCP connect operation (bind laddr and lport) are all carried out in netisr0; CPU0 is 100% busy during test.
The idea of random initial msgport for TCP is that instead of using netisr0's msgport as initial msgport, we could use any of the available netisr msgport to carry out socket(2) and initial TCP connect operation.
Most of parts of TCP are already ready for random initial msgport, only TCP pru_listen requires trivial modification to fix the socket msgport to netisr0's msgport (which is required to perform global wild hashtable updating).
As of this commit, the current CPU's netisr msgport will be selected as TCP socket's initial msgport, if random initial msgport is enabled.
Sysctl node kern.ipc.rand_initport is added to disable this optimization. It is enabled by default.
This commit improves both nonblocking TCP connect(2) and blocking TCP connect(2) performance.
Nonblocking connect(2) performance measurement (i7-2600 w/ bnx(4)), using tools/tools/netrate/accept_connect/kq_connect_client:
kq_connect_client -4 SERVADDR -p SERVPORT -i 8 -c 32 -l 30 (8 processes, each creates 32 connections simultaniously)
16 run average: random initial msgport netisr0 msgport 263915.17 conns/s 220979.89 conns/s
This commit gives ~19% performance improvement for nonblocking connect(2)
Blocking connect(2) performance measurement (i7-2600 w/ bnx(4)), using tools/tools/netrate/accept_connect/connect_client:
connect_client -4 SERVADDR -p SERVPORT -i 256 -l 30 (256 processes)
16 run average: random initial msgport netisr0 msgport 240235.23 conns/s 198312.87 conns/s
This commit gives ~21% performance improvement for blocking connect(2)
show more ...
|
#
e01c2aec |
| 28-Aug-2013 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
proto: Fix comment
|
Revision tags: v3.4.3 |
|
#
e368a6e9 |
| 20-Aug-2013 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
tcp: Implement asynchronous pru_connect
This is mainly used to improve TCP nonblocking connect(2) performance.
Before this commit the user space thread uses nonblocking connect(2) will have to wait
tcp: Implement asynchronous pru_connect
This is mainly used to improve TCP nonblocking connect(2) performance.
Before this commit the user space thread uses nonblocking connect(2) will have to wait for the netisr completes the SYN output. This could be performance hit for nonblocking connect(2). First, the user space thread is put into sleep, even if the connect(2) is nonblocking. Second, it does not make too much sense for nonblocking connect(2) to wait for the SYN output.
TCP's asynchronous pru_connect implementation will set ISCONNECTING before dispatching netmsg to netisr0. The errors like EADDRNOTAVAIL, i.e. out of local port space, will be notified through kevent(2) or getsockopt(2) SOL_SOCKET/SO_ERROR.
NFS and other kernel code still use old synchronized pru_connect. This commit only affects connect(2) syscall.
Sysctl node kern.ipc.soconnect_async is added to enable and disable asynchronous pru_connect. It is enabled by default.
The performance measurement (i7-2600 w/ bnx(4)), using tools/tools/netrate/accept_connect/kq_connect_client:
kq_connect_client -4 SERVADDR -p SERVPORT -i 8 -c 32 -l 30 (8 processes, each creates 32 connections simultaniously, run 30 secs)
16 runs average:
asynchronous pru_connect synchronized pru_connect 220979.89 conns/s 189106.88 conns/s
This commit gives ~16% performance improvement for nonblocking connect(2)
show more ...
|
#
c0467c22 |
| 20-Aug-2013 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
uipc: Reference the originator thread if asynchronized pru_send is used
It is required for UDP asynchronized pru_send, which could access the originator's thread.
|
#
a417fc35 |
| 30-Jul-2013 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
proto: Fix copy-n-paste error; PR_ASYNC_RCVD should be 0x0800.
It was defined to the same value as PR_ASYNC_SEND. However, in the current code base, it does not hurt, since only TCP has this flag s
proto: Fix copy-n-paste error; PR_ASYNC_RCVD should be 0x0800.
It was defined to the same value as PR_ASYNC_SEND. However, in the current code base, it does not hurt, since only TCP has this flag set.
show more ...
|
Revision tags: v3.4.2, v3.4.0, v3.4.1, v3.4.0rc, v3.5.0, v3.2.2, v3.2.1, v3.2.0, v3.3.0 |
|
#
96c6eb29 |
| 03-Sep-2012 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
tcp: Implement asynchronized pru_rcvd
This mainly avoids extra scheduling cost on the reception path due to lwkt_domsg(). lwkt_sendmsg() is now used to carry out TCP pru_rcvd.
Since TCP's pru_rcvd
tcp: Implement asynchronized pru_rcvd
This mainly avoids extra scheduling cost on the reception path due to lwkt_domsg(). lwkt_sendmsg() is now used to carry out TCP pru_rcvd.
Since TCP's pru_rcvd could be batched, one pru_rcvd netmsg is embedded into struct socket to avoid pru_rcvd netmsg allocation for each pru_rcvd, and this netmsg will be used by lwkt_sendmsg(). Whether this embedded pcu_rcvd netmsg should be sent or not is determined by its MSG_DONE bit. Since user thread and netisr thread could be on different CPUs, the embedded pru_rcvd netmsg's MSG_DONE bit is protected by a spinlock.
To cope with the following race that could drop window updates, tcp_usr_rcvd() replies asynchronized rcvd netmsg before tcp_output():
netisr thread user thread
tcp_usr_rcvd() sorcvtcp() { { tcp_output() : : : : sbunlinkmbuf() : if (rcvd & MSG_DONE) (2) : lwkt_sendmsg(rvcd) : : lwkt_replymsg(rcvd) (1) }
At (2) window update is dropped, since rcvd netmsg is not replied yet at (1)
The result: On i7-2600 (4C/8T, 3.4GHz): 32 parallel netperf -H 127.0.0.1 -t TCP_STREAM -P0 -l 30 (4 runs, unit: Mbps)
old 30253.88 30242.58 30162.55 30101.51 new 33962.74 33798.70 33499.92 33482.35
This gives ~12% performance improvement.
show more ...
|
Revision tags: v3.0.3, v3.0.2, v3.0.1, v3.1.0, v3.0.0 |
|
#
f328adf5 |
| 02-Dec-2011 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
accept: Call pru_accept in protocol thread
This avoids socket.so_pcb use-after-check race against protocol thread.
There is no performance impact on the mostly used sockets: - IPv4/IPv6 TCP impleme
accept: Call pru_accept in protocol thread
This avoids socket.so_pcb use-after-check race against protocol thread.
There is no performance impact on the mostly used sockets: - IPv4/IPv6 TCP implemented pru_savefaddr, so their pru_accept will not be called at all - UNIX domain socket uses sync msgport, so no protocol thread dispatching
show more ...
|
#
88da6203 |
| 29-Nov-2011 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
accept: Save foreign address earlier, if protocol supports it
- Add so_faddr into socket, which records the accepted socket's foreign address. If it is set, kern_accept() will use it directly ins
accept: Save foreign address earlier, if protocol supports it
- Add so_faddr into socket, which records the accepted socket's foreign address. If it is set, kern_accept() will use it directly instead of calling protocol specific method to extract the foreign address. - Add protocol specific method, pru_safefaddr, which will save the foreign address into socket.so_faddr if the necessary information is supplied. This protocol method will only be called in protocol thread. - Pass the foreign address to sonewconn() if possible, so the foreign address could be saved before the accepted socket is put onto the complete list.
Currently only IPv4/TCP implemented pru_savefaddr
This intends to address the following problems: - Calling pru_accept directly from user context is not MPSAFE, we always races the socket.so_pcb check->use against protocol thread clear/free socket.so_pcb, though the race window is too tiny to be hit. To make it mpsafe, we should dispatch pru_accept to protocol thread. If socket.so_faddr is set here, we are race against nothing and nothing expensive like put the current user thread into sleep will happen. However, if the socket is dropped when it still sits on the complete list, the error will not be timely delivered, i.e. accept(2) will not return error, but the later on read(2)/write(2) on the socket will deliver the error. - Calling pru_accept directly races against the inpcb.inp_f{addr,port} setting up in the protocol thread, since inpcb.inp_f{addr,port} is setup _after_ the accepted socket was put onto the complete list.
user thread proto thread : : : accepted socket -> comp : (inpcb.inp_f{addr,port} are 0 here) comp -> socket : pru_accept : : setup inpcb.inp_f{addr,port}
Returning of 0.0.0.0:0 from accept(2) was observed on heavily loaded web servers.
show more ...
|
#
86d7f5d3 |
| 26-Nov-2011 |
John Marino <draco@marino.st> |
Initial import of binutils 2.22 on the new vendor branch
Future versions of binutils will also reside on this branch rather than continuing to create new binutils branches for each new version.
|
#
2ef7b293 |
| 17-Nov-2011 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
protosw: Add PR_ASYNC_SEND, mainly to make sure async pru_send is supported
Currently on IP/TCP and IPv6/TCP set this flag
|
Revision tags: v2.12.0, v2.13.0, v2.10.1, v2.11.0, v2.10.0, v2.9.1, v2.8.2, v2.8.1, v2.8.0, v2.9.0, v2.6.3, v2.7.3, v2.6.2, v2.7.2, v2.7.1, v2.6.1, v2.7.0, v2.6.0, v2.5.1, v2.4.1, v2.5.0, v2.4.0, v2.3.2, v2.3.1, v2.2.1 |
|
#
f486e37f |
| 08-Apr-2009 |
Sascha Wildner <saw@online.de> |
tcp_{debug,timer}.h & protosw.h: Constify some strings.
|
Revision tags: v2.2.0, v2.3.0 |
|
#
a95455e5 |
| 27-Dec-2008 |
Matthew Dillon <dillon@apollo.backplane.com> |
Deal with the netgraph NULL function dereference on shutdown() vulnerability. Use a solution similar to FreeBSD's.
|
Revision tags: v2.1.1 |
|
#
e3873585 |
| 27-Oct-2008 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
pr_ctlinput is usually called when certains types of ICMP packets are received. However, the processing of ICMP packets happens in netisr0, which means the thread context, in which pr_ctlinput is cal
pr_ctlinput is usually called when certains types of ICMP packets are received. However, the processing of ICMP packets happens in netisr0, which means the thread context, in which pr_ctlinput is called, is not correct. To handle this following two fixes are applied: - Add pr_ctlport to protosw and ip6protosw, which could be used to locate correct msgport to call pr_ctlinput for specific protocol - All necessary information needed by pr_ctlinput are gather into one netmsg, and this netmsg is delivered synchronously (some information is on the stack)
Note for new protocol implementation: pr_ctlinput and pr_ctlport should be both NULL or both non-NULL.
Obtained-from: dillon@ Tested-by: pavalos@
show more ...
|
#
92db3805 |
| 23-Sep-2008 |
Sepherosa Ziehau <sephe@dragonflybsd.org> |
Add following three network protocol threads running mode: 1) BGL (default) 2) Adaptive BGL. Protocol threads run without BGL by default. BGL will be held if the received msg does not have MSGF_
Add following three network protocol threads running mode: 1) BGL (default) 2) Adaptive BGL. Protocol threads run without BGL by default. BGL will be held if the received msg does not have MSGF_MPSAFE turned on the ms_flags field 3) No BGL (experimental)
The code on the main path is done by dillon@
Following three sysctls and tunables are added to adjust the "mode": net.netisr.mpsafe_thread net.inet.tcp.mpsafe_thread net.inet.udp.mpsafe_thread
They have same set of values, 0 (default) -- BGL 1 -- Adaptive BGL 2 -- No BGL
NETISR_FLAG_MPSAFE is added (netisr.ni_flags), so that: - netisr_queue() and schednetisr() could set MSGF_MPSAFE during msg initialization - netisr_run() (called by ether_input_oncpu()) could hold BGL based on this flag before calling netisr's handler
PR_MPSAFE is added (protosw.pr_flags), so that tranport_processing_oncpu() could hold BGL before calling protocol's input handler
Kernel API changes: - The thread parameter to netmsg_service_loop() must be supplied (running mode) and it must have the type of "int *" - netisr_register() takes additional flags parameter to indicate whether its handler is MPSAFE (NETISR_FLAG_MPSAFE) or not
Reviewed-by: dillon@
show more ...
|
Revision tags: v2.0.1 |
|
#
e71a125f |
| 17-Jun-2008 |
Aggelos Economopoulos <aggelos@dragonflybsd.org> |
do early copyin / delayed copyout for socket options
|