opnsense-src/sys/mips
Kyle Evans 589aed00e3 sched: separate out schedinit_ap()
schedinit_ap() sets up an AP for a later call to sched_throw(NULL).

Currently, ULE sets up some pcpu bits and fixes the idlethread lock with
a call to sched_throw(NULL); this results in a window where curthread is
setup in platforms' init_secondary(), but it has the wrong td_lock.
Typical platform AP startup procedure looks something like:

- Setup curthread
- ... other stuff, including cpu_initclocks_ap()
- Signal smp_started
- sched_throw(NULL) to enter the scheduler

cpu_initclocks_ap() may have callouts to process (e.g., nvme) and
attempt to sched_add() for this AP, but this attempt fails because
of the noted violated assumption leading to locking heartburn in
sched_setpreempt().

Interrupts are still disabled until cpu_throw() so we're not really at
risk of being preempted -- just let the scheduler in on it a little
earlier as part of setting up curthread.

Reviewed by:	alfredo, kib, markj
Triage help from:	andrew, markj
Smoke-tested by:	alfredo (ppc), kevans (arm64, x86), mhorne (arm)
Differential Revision:	https://reviews.freebsd.org/D32797
2021-11-03 15:54:59 -05:00
..
atheros [ar71xx] During reset, don't spin, just keep trying 2021-05-22 15:53:00 -07:00
beri Avoid dump_avail[] redefinition. 2020-10-14 22:51:40 +00:00
broadcom Remove "All Rights Reserved" from FreeBSD Foundation sys/ copyrights 2021-08-08 10:42:24 -04:00
cavium Fix a common typo in source code comments 2021-09-04 12:56:57 +02:00
conf pccard: remove pccard device from all kernels 2021-07-13 20:39:31 -06:00
include minidump: De-duplicate the progress bar 2021-09-29 16:42:21 -03:00
ingenic Fix some common typos in comments 2021-03-13 18:26:15 +01:00
malta mips: fix build w/ TICK_USE_MALTA_RTC defined 2020-12-25 19:47:45 +01:00
mediatek mtk: Add printing of CPU model 2021-06-11 14:28:54 -06:00
mips sched: separate out schedinit_ap() 2021-11-03 15:54:59 -05:00
nlm Create sys/reg.h for the common code previously in machine/reg.h 2021-08-30 12:50:53 +01:00