freebsd-skq/sys/x86
Konstantin Belousov ff326a1879 x86: Restore the critical section around whole ipi_bitmap_handler() if
hardclock IPI is delivered.

In the current code after r355311, critical section is taken only
around hardclockintr() call, and sched_preempt() is called after the
section is exited. If we reschedule after exit, as we typically would
due to conditions that caused IPI, in ULE the runq tdq_ipipending is
not cleared, which blocks generation of further preempt IPIs.

Since all relatively modern (10 years) hardware has per-cpu event
timers, restoring the critical section conditionally does not affect
it.

Reported and tested by: cy
Diagnosed and reviewed by: jeff (previous version)
Sponsored by:	The FreeBSD Foundation
Differential revision:	https://reviews.freebsd.org/D22716
2019-12-07 00:28:08 +00:00
..
acpica Extract eventfilter declarations to sys/_eventfilter.h 2019-05-20 00:38:23 +00:00
bios sys/x86: further adoption of SPDX licensing ID tags. 2017-11-27 15:11:47 +00:00
conf Floppy driver really only works on x86 2019-08-12 22:58:50 +00:00
cpufreq Extract eventfilter declarations to sys/_eventfilter.h 2019-05-20 00:38:23 +00:00
include bus_dma_dmar_load_ident(9): load identity mapping into the map. 2019-11-27 19:57:17 +00:00
iommu Fix a few places that free a page from an object without busy held. This is 2019-12-02 22:42:05 +00:00
isa Fix amd64/i386 LINT build after r344982 2019-03-11 19:46:15 +00:00
pci Add pci_early function to detect Intel stolen memory. 2018-10-31 23:17:00 +00:00
x86 x86: Restore the critical section around whole ipi_bitmap_handler() if 2019-12-07 00:28:08 +00:00
xen xen: fix dispatching of NMIs 2019-11-12 10:31:28 +00:00