Home | History | Annotate | Download | only in net
History log of /src/sys/net/pktqueue.c
RevisionDateAuthorComments
 1.22  28-May-2023  andvar s/explcit/explicit/ in comment.
 1.21  04-Sep-2022  thorpej In pktq_flush():
- Run a dummy softint at IPL_SOFTNET on all CPUs to ensure that the
ISR for this pktqueue is not running (addresses a pre-existing XXX).
- Hold the barrier lock around the critical section to ensure that
implicit pktq_barrier() calls via pktq_ifdetach() are held off during
the critical section.
- Ensure the critical section completes in minimal time by not freeing
memory during the critical section; instead, just build a list of the
packets pulled out of the per-CPU queues and free them after the critical
section is over.
 1.20  02-Sep-2022  thorpej Re-factor how pktq_barrier() is issued by if_detach().

Rather than excplicitly referencing ip_pktq and ip6_pktq in if_detach(),
instead add all pktqueues to a global list. This list is then used in
the new pktq_ifdetach() function to issue a barrier on all pktqueues.

Note that the performance of this list is not critical; it will seldom
be accessed (then pktqueues are created/destroyed and when network
interfaces are detached), and so a simple synchronization strategy using
a rwlock is sufficient.
 1.19  02-Sep-2022  thorpej pktqueue: Re-factor sysctl handling.

Provide a new pktq_sysctl_setup() function that attaches standard
pktq sysctl nodes below a specified parent node, with either a
fixed node ID or CTL_CREATE to dynamically assign node IDs. Make
all of the sysctl handlers private to pktqueue.c, and remove the
INET- and INET6-specific pktqueue sysctl code from net/if.c.
 1.18  01-Sep-2022  thorpej pktq_rps_hash(): Make the "funcp" argument const.
 1.17  01-Sep-2022  thorpej pktq_dequeue(): Prevent packets from getting stuck beind barrier markers.

pktq_barrier() ensures that all packets enqueued before the barrier have
been dequeued before the barrier returns. However, previously, pktq_dequeue()
would return NULL when a barrier marker was encountered. If there were
packets queued up behind the marker and no additional softint were scheduled
for the pktqueue, those packets would end up stranded. pktq_dequeue() now
continues to the next slot after the marker, ensuring that processing can
continue after the barrier has been signaled.
 1.16  21-Dec-2021  knakahara Fix net.*.rps_hash=toeplitz-othercpus on one CPU systems.
 1.15  15-Dec-2021  knakahara Fix typo in comment.
 1.14  11-Oct-2021  knakahara Make pktq_rps_hash() pluggable for each interface type. Reviewed by gdt@n.o, thorpej@n.o, and riastradh@n.o, thanks.
 1.13  25-Mar-2021  skrll Remove strange padding #define and replace with anonymous struct/union
 1.12  11-Sep-2020  riastradh branches: 1.12.2; 1.12.4;
pktqueue(9): Use percpu_create to allow early initialization.

Otherwise pktqueues can't be created before all CPUs are detected --
they will have a queue only for the primary CPU, not for others.

This will also be necessary if we want to add CPU hotplug (still need
some way to block hotplug during pktq_set_maxlen but it's a start).
 1.11  07-Feb-2020  thorpej Use percpu_foreach_xcall() to gather volatile per-cpu counters. These
must be serialized against the interrupts / soft-interrupts in which
they're manipulated, as well as protected from non-atomic 64-bit memory
loads on 32-bit platforms.
 1.10  10-Aug-2018  msaitoh branches: 1.10.6;
- Fix a bug that drop counter shows incorrect vaule like
"net.inet.ip.ifq.drops = 72059810241052672"
- Change pktq's length sysctl to uint64_t.
 1.9  01-Jun-2017  chs branches: 1.9.8; 1.9.10;
remove checks for failure after memory allocation calls that cannot fail:

kmem_alloc() with KM_SLEEP
kmem_zalloc() with KM_SLEEP
percpu_alloc()
pserialize_create()
psref_class_create()

all of these paths include an assertion that the allocation has not failed,
so callers should not assert that again.
 1.8  04-Jul-2014  ozaki-r branches: 1.8.2; 1.8.6; 1.8.8;
Fix pktq_enqueue for rump

Add _RUMP_NATIVE_ABI to the macro condition for i386 and x86_64 because
_RUMPKERNEL is not defined for them. See sys/rump/Makefile.rump.

Found by ATF
 1.7  02-Jul-2014  ozaki-r Restore RPS of pktq_enqueue unless _RUMPKERNEL

It's a workaround and would be fixed in rump soon.

ok pooka@
 1.6  16-Jun-2014  ozaki-r Move sysctl_pktq_{maxlen,count} to pktqueue.c and make them global

They will be used by bridge.

ok rmind@
 1.5  16-Jun-2014  ozaki-r Add 3rd argument to pktq_create to pass sc

It will be used to pass bridge sc for bridge_forward softint.

ok rmind@
 1.4  09-Jun-2014  rmind pktqueue: add or fix some comments, remove some header inclusions.
 1.3  09-Jun-2014  rmind Restore the assert in RUMP's softint_schedule_cpu() and just ensure
curcpu() in the caller.
 1.2  09-Jun-2014  rmind Implement pktq_set_maxlen() and let sysctl net.inet.{ip,ip6}.ifq.maxlen be
changed on the fly again.
 1.1  05-Jun-2014  rmind - Implement pktqueue interface for lockless IP input queue.
- Replace ipintrq and ip6intrq with the pktqueue mechanism.
- Eliminate kernel-lock from ipintr() and ip6intr().
- Some preparation work to push softnet_lock out of ipintr().

Discussed on tech-net.
 1.8.8.1  28-Aug-2017  skrll Sync with HEAD
 1.8.6.3  03-Dec-2017  jdolecek update from HEAD
 1.8.6.2  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.8.6.1  04-Jul-2014  tls file pktqueue.c was added on branch tls-maxphys on 2014-08-20 00:04:34 +0000
 1.8.2.2  10-Aug-2014  tls Rebase.
 1.8.2.1  04-Jul-2014  tls file pktqueue.c was added on branch tls-earlyentropy on 2014-08-10 06:56:15 +0000
 1.9.10.2  08-Apr-2020  martin Merge changes from current as of 20200406
 1.9.10.1  10-Jun-2019  christos Sync with HEAD
 1.9.8.1  06-Sep-2018  pgoyette Sync with HEAD

Resolve a couple of conflicts (result of the uimin/uimax changes)
 1.10.6.1  29-Feb-2020  ad Sync with head.
 1.12.4.1  03-Apr-2021  thorpej Sync with HEAD.
 1.12.2.1  03-Apr-2021  thorpej Sync with HEAD.

RSS XML Feed