Home | History | Annotate | Download | only in kern
History log of /src/sys/kern/subr_percpu.c
RevisionDateAuthorComments
 1.25  11-May-2020  riastradh Teach percpu to run constructors on CPU attach.

This should make percpu work reliably for things like cprng_strong
much earlier -- not just after all CPUs have been detected. This is
also necessary (though not on its own sufficient) for CPU hotplug.
 1.24  07-Feb-2020  thorpej Add percpu_foreach_xcall(), which is like percpu_foreach(), except it
runs the callback on the target CPU.
 1.23  01-Feb-2020  riastradh KNF
 1.22  01-Feb-2020  riastradh Use __read_mostly and gather related __cacheline_aligned together.

Should save a few bytes of kernel.
 1.21  01-Feb-2020  riastradh New function percpu_create.

Associates a constructor and destructor with the percpu. Currently
the constructor runs immediately, but in principle we could use the
same API for future CPU hotplug support.

This lets you sleep for allocation or draining users before
deallocation when setting up or tearing down a percpu -- currently we
have many abuses of percpu_foreach in tree for that purpose.

Proposed on tech-kern:
https://mail-index.NetBSD.org/tech-kern/2020/01/30/msg026036.html
 1.20  05-Dec-2019  riastradh branches: 1.20.2;
Allow equality in this assertion.

This can happen if we lose the race mentioned in percpu_cpu_swap.
 1.19  18-Sep-2019  kamil Decorate percpu_cpu_swap() with __noubsan
 1.18  31-May-2017  chs branches: 1.18.10; 1.18.14;
vmem_alloc() with VM_SLEEP cannot fail, so percpu_alloc() cannot fail either.
 1.17  27-Nov-2014  uebayasi branches: 1.17.2;
Consistently use kpreempt_*() outside scheduler path.
 1.16  27-Jan-2012  para branches: 1.16.6;
extending vmem(9) to be able to allocated resources for it's own needs.
simplifying uvm_map handling (no special kernel entries anymore no relocking)
make malloc(9) a thin wrapper around kmem(9)
(with private interface for interrupt safety reasons)

releng@ acknowledged
 1.15  02-Sep-2011  dyoung branches: 1.15.2; 1.15.6;
Report vmem(9) errors out-of-band so that we can use vmem(9) to manage
ranges that include the least and the greatest vmem_addr_t. Update
vmem(9) uses throughout the kernel. Slightly expand on the tests in
subr_vmem.c, which still pass. I've been running a kernel with this
patch without any trouble.
 1.14  27-Jul-2011  uebayasi These don't need uvm/uvm_extern.h.
 1.13  13-May-2011  rmind Sprinkle __cacheline_aligned and __read_mostly.
 1.12  19-Apr-2011  martin Relax an assertion
 1.11  14-Apr-2011  matt Add a KASSERT
 1.10  21-Oct-2009  rmind branches: 1.10.4; 1.10.6;
Remove uarea swap-out functionality:

- Addresses the issue described in PR/38828.
- Some simplification in threading and sleepq subsystems.
- Eliminates pmap_collect() and, as a side note, allows pmap optimisations.
- Eliminates XS_CTL_DATA_ONSTACK in scsipi code.
- Avoids few scans on LWP list and thus potentially long holds of proc_lock.
- Cuts ~1.5k lines of code. Reduces amd64 kernel size by ~4k.
- Removes __SWAP_BROKEN cases.

Tested on x86, mips, acorn32 (thanks <mpumford>) and partly tested on
acorn26 (thanks to <bjh21>).

Discussed on <tech-kern>, reviewed by <ad>.
 1.9  15-Dec-2008  ad Start percpu allocation at (ALIGNBYTES + 1) to avoid problem with importing
offset zero to vmem.
 1.8  03-May-2008  yamt branches: 1.8.8; 1.8.10;
- encrypt/decrypt offsets if DIAGNOSTIC.
- add an assertion.
these changes allow to detect a use of uninitialized percpu_t *.
 1.7  28-Apr-2008  ad Add MI code to support in-kernel preemption. Preemption is deferred by
one of the following:

- Holding kernel_lock (indicating that the code is not MT safe).
- Bracketing critical sections with kpreempt_disable/kpreempt_enable.
- Holding the interrupt priority level above IPL_NONE.

Statistics on kernel preemption are reported via event counters, and
where preemption is deferred for some reason, it's also reported via
lockstat. The LWP priority at which preemption is triggered is tuneable
via sysctl.
 1.6  27-Apr-2008  ad branches: 1.6.2;
- Rename crit_enter/crit_exit to kpreempt_disable/kpreempt_enable.
DragonflyBSD uses the crit names for something quite different.
- Add a kpreempt_disabled function for diagnostic assertions.
- Add inline versions of kpreempt_enable/kpreempt_disable for primitives.
- Make some more changes for preemption safety to the x86 pmap.
 1.5  26-Apr-2008  yamt fix a comment.
 1.4  09-Apr-2008  thorpej branches: 1.4.2;
Make the percpu API a little more friendly:
- percpu_getptr() is now called percpu_getref() and implicitly disables
preemption (via crit_enter()) when it is called.
- Added percpu_putref() which implicitly reenables preemption (via
crit_exit()).
 1.3  17-Mar-2008  yamt branches: 1.3.2;
- simplify ASSERT_SLEEPABLE.
- move it from proc.h to systm.h.
- add some more checks.
- make it a little more lkm friendly.
 1.2  17-Jan-2008  yamt branches: 1.2.2; 1.2.4; 1.2.6; 1.2.8; 1.2.12;
- add a cpu_info pointer argument to percpu_callback_t.
- unexport percpu_zero.
- add some comments.
 1.1  14-Jan-2008  yamt add a per-cpu storage allocator.
 1.2.12.3  17-Jan-2009  mjf Sync with HEAD.
 1.2.12.2  02-Jun-2008  mjf Sync with HEAD.
 1.2.12.1  03-Apr-2008  mjf Sync with HEAD.
 1.2.8.1  24-Mar-2008  keiichi sync with head.
 1.2.6.2  18-Feb-2008  mjf Sync with HEAD.
 1.2.6.1  17-Jan-2008  mjf file subr_percpu.c was added on branch mjf-devfs on 2008-02-18 21:06:47 +0000
 1.2.4.3  17-Mar-2008  yamt sync with head.
 1.2.4.2  21-Jan-2008  yamt sync with head
 1.2.4.1  17-Jan-2008  yamt file subr_percpu.c was added on branch yamt-lazymbuf on 2008-01-21 09:46:19 +0000
 1.2.2.2  19-Jan-2008  bouyer Sync with HEAD
 1.2.2.1  17-Jan-2008  bouyer file subr_percpu.c was added on branch bouyer-xeni386 on 2008-01-19 12:15:25 +0000
 1.3.2.2  23-Mar-2008  matt sync with HEAD
 1.3.2.1  17-Mar-2008  matt file subr_percpu.c was added on branch matt-armv6 on 2008-03-23 02:05:00 +0000
 1.4.2.1  18-May-2008  yamt sync with head.
 1.6.2.3  11-Mar-2010  yamt sync with head
 1.6.2.2  04-May-2009  yamt sync with head.
 1.6.2.1  16-May-2008  yamt sync with head.
 1.8.10.1  02-Feb-2009  snj Pull up following revision(s) (requested by ad in ticket #348):
sys/kern/subr_percpu.c: revision 1.9
Start percpu allocation at (ALIGNBYTES + 1) to avoid problem with importing
offset zero to vmem.
 1.8.8.1  19-Jan-2009  skrll Sync with HEAD.
 1.10.6.1  06-Jun-2011  jruoho Sync with HEAD.
 1.10.4.2  31-May-2011  rmind sync with head
 1.10.4.1  21-Apr-2011  rmind sync with head
 1.15.6.1  18-Feb-2012  mrg merge to -current.
 1.15.2.1  17-Apr-2012  yamt sync with head
 1.16.6.1  03-Dec-2017  jdolecek update from HEAD
 1.17.2.1  28-Aug-2017  skrll Sync with HEAD
 1.18.14.1  15-Jul-2020  martin Pull up following revision(s) (requested by riastradh in ticket #1005):

sys/kern/subr_percpu.c: revision 1.20

Allow equality in this assertion.


This can happen if we lose the race mentioned in percpu_cpu_swap.
 1.18.10.2  13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.18.10.1  08-Apr-2020  martin Merge changes from current as of 20200406
 1.20.2.1  29-Feb-2020  ad Sync with head.

RSS XML Feed