Home | History | Annotate | Download | only in include
History log of /src/sys/arch/x86/include/intr.h
RevisionDateAuthorComments
 1.66  07-Sep-2022  knakahara NetBSD/x86: Raise the number of interrupt sources per CPU from 32 to 56.

There has been no objection for three years.
https://mail-index.netbsd.org/port-amd64/2019/09/22/msg003012.html
Implemented by nonaka@n.o, updated by me.
 1.65  24-May-2022  bouyer Some devices (e.g. ixg in MSI-X mode) don't to have their handlers called
when no interrupt are pending. So add an extra ih_pending field
to struct intrhand, which is incremeted when the handler is not called because
of IPL level and reset to 0 when called. Check this in Xen's resume
assembly to call only handlers that are really pending.
 1.64  04-Apr-2022  andvar fix various typos, mainly in comments.
 1.63  12-Mar-2022  riastradh x86: Check for biglock leakage in interrupt handlers.
 1.62  25-Apr-2020  bouyer Merge the bouyer-xenpvh branch, bringing in Xen PV drivers support under HVM
guests in GENERIC.
Xen support can be disabled at runtime with
boot -c
disable hypervisor
 1.61  22-Dec-2019  thorpej branches: 1.61.6;
Add intr_mask() and corresponding intr_unmask() calls that allow specific
interrupt lines / sources to be masked as needed (rather than making a
set of sources by IPL as with spl*()).
 1.60  14-Feb-2019  cherry Welcome XENPVHVM mode.

It is UP only, has xbd(4) and xennet(4) as PV drivers.

The console is com0 at isa and the native portion is very
rudimentary AT architecture, so is probably suboptimal to
run without PV support.
 1.59  13-Feb-2019  cherry Missed the crucial header file in previous commit.

struct intrstub; is now uniform across native and XEN

This should fix the XEN builds.
 1.58  11-Feb-2019  cherry We reorganise definitions for XEN source support as follows:

XEN - common sources required for baseline XEN support.
XENPV - sources required for support of XEN in PV mode.
XENPVHVM - sources required for support for XEN in HVM mode.
XENPVH - sources required for support for XEN in PVH mode.
 1.57  13-Dec-2018  cherry Allow x86 builds to have the opportunity to not have pre-emption
enabled by default. This can be effected by having a:

"options NO_PREEMPTION"

line in the kernel configuration file.

While it was tempting to tie __HAVE_PREEMPTION to MULTIPROCESSOR,
as is currently assumed in sys/kern/kern_stub.c ,

having MULTIPROCESSOR without __HAVE_PREEMPTION
and not having either are valid configuration options which users
could have choice of. We thus err on the side of configurability.
 1.56  24-Jun-2018  jdolecek branches: 1.56.2;
add support for kern.intr.list aka intrctl(8) 'list' for xen

event_set_handler() and pirq_establish() now have extra intrname
parameter; shared intr_create_intrid() is used to provide the value

xen drivers were changed to pass the specific driver instance
name as the xname, e.g. 'vcpu0 clock' instead just 'clock', or
'xencons0' instead of 'xencons'

associated evcnt is now changed to use intrname - this matches native x86
 1.55  04-Apr-2018  christos Rename Xpreempt{recurse,resume} -> X{recurse,resume}_preempt so that
they fit the pattern. Also the debugger trap sniffer matches them
without adding special entries...
XXX: pullup-8.
 1.54  17-Feb-2018  maxv branches: 1.54.2;
Rename i8259_stubs -> legacy_stubs. We will want the entries to have the
same name, eg:

legacy_stubs
-> Xintr_legacy0, Xrecurse_legacy0, Xresume_legacy0
-> Xintr_legacy1, Xrecurse_legacy1, Xresume_legacy1
...
 1.53  04-Jan-2018  knakahara fix "intrctl list" panic when ACPI is disabled.

reviewed by cherry@n.o and tested by msaitoh@n.o, thanks.
 1.52  04-Nov-2017  cherry Retire xen/x86/intr.c and use the new xen specific glue in x86/x86/intr.c

The purpose of this change is to expose the x86/include/intr.h API
to drivers. Specifically the following functions:

void *intr_establish_xname(...);
void *intr_establish(...);
void intr_disestablish(...);

while maintaining the old API from xen/include/evtchn.h, specifically
the following functions:

int event_set_handler(...);
int event_remove_handler(...);

This is so that if things break, we can keep using the old API until
everything stabilises. This is a stepping stone towards getting the
actual XEN event callback path rework code in place - which can be
done opaquely behind the intr.h API - NetBSD/XEN specific drivers that
have been ported to the intr.h API should then work without
significant further modifications.
 1.51  16-Jul-2017  cherry branches: 1.51.2;
Unify the xen and native x86/ interrupt setup functions and
spl traversal data structures.

This is towards PVHVM.
 1.50  23-May-2017  nonaka branches: 1.50.2;
x86: Add preliminary x2APIC support.

x2APIC is used only when x2APIC is enabled in BIOS/UEFI.
LAPIC ID is not supported above 256.
 1.49  07-Jul-2016  msaitoh KNF. Remove extra spaces. No functional change.
 1.48  17-Aug-2015  knakahara Add kernel code to support intrctl(8).
 1.47  27-Apr-2015  knakahara add intr_handle_t and let pci_intr_handle_t use it.
 1.46  27-Apr-2015  knakahara add pci_intr_distribute(9) for x86.
 1.45  20-Jul-2014  uebayasi branches: 1.45.4;
ipifunc[]: Comment IPI constant names for grep'ability. Constify.
 1.44  29-Mar-2014  christos branches: 1.44.2;
make pci_intr_string and eisa_intr_string take a buffer and a length
instead of relying in local static storage.
 1.43  01-Aug-2011  drochner branches: 1.43.2; 1.43.12; 1.43.16;
if checking whether an interrupt is shared, don't compare pin numbers
if it is "-1" -- this is a hack to allow MSIs which don't have a concept
of pin numbers, and are generally not shared
(This doesn't give us sensible event names for statistics display. The
whole abstraction has more exceptions than regular cases, it should
be redesigned imho.)
 1.42  03-Apr-2011  dyoung Clean up excessive #ifdef'age of NMI trap handling for amd64/i386/xen.
Handle NMI in all Xen kernels.
 1.41  02-May-2010  plunky branches: 1.41.2;
The spl inline functions refer to external symbols that are only
defined in the kernel.

Wrap kernel-specific declarations in #ifdef _KERNEL to avoid unresolved
references when including from userland.
 1.40  25-Apr-2010  ad Nothing uses x86_multicast_ipi() right now and it complicates many
CPU support, so remove it.
 1.39  19-Apr-2009  ad branches: 1.39.2; 1.39.4;
cpuctl:

- Add interrupt shielding (direct hardware interrupts away from the
specified CPUs). Not documented just yet but will be soon.

- Redo /dev/cpu time_t compat so no kernel changes are needed.

x86:

- Make intr_establish, intr_disestablish safe to use when !cold.

- Distribute hardware interrupts among the CPUs, instead of directing
everything to the boot CPU.

- Add MD code for interrupt sheilding. This works in most cases but there is
a bug where delivery is not accepted by an LAPIC after redistribution. It
also needs re-balancing to make things fair after interrupts are turned
back on for a CPU.
 1.38  27-Mar-2009  dyoung If defined(_KERNEL), #include <sys/types.h>, otherwise #include
<stdbool.h>, for the bool definition that we need. intr.h only got the
definition by chance, before.
 1.37  25-Mar-2009  dyoung It is only by accident that this gets the definitions it needs from
<sys/evcnt.h>, so explicitly #include <sys/evcnt.h>.
 1.36  24-Feb-2009  yamt - rewrite x86 nmi dispatcher so that establish and disesablish are safe
on a running system.
- adapt existing users of the api. (elan)
- adapt tprof_pmi driver to use the api.
 1.35  30-May-2008  ad branches: 1.35.6; 1.35.12;
Add a 'known_mpsafe' argument to intr_establish().
 1.34  07-May-2008  joerg branches: 1.34.2;
Remove some prototypes that are not implemented. Make some functions
static that are only used in intr.c.
 1.33  28-Apr-2008  ad Add support for kernel preeemption to the i386 and amd64 ports. Notes:

- I have seen one isolated panic in the x86 pmap, but otherwise i386
seems stable with preemption enabled.

- amd64 is missing the FPU handling changes and it's not yet safe to
enable it there.

- The usual level for kern.sched.kpreempt_pri will be 128 once enabled
by default. For testing, setting it to 0 helps to shake out bugs.
 1.32  28-Apr-2008  martin Remove clause 3 and 4 from TNF licenses
 1.31  21-Jan-2008  dyoung branches: 1.31.6; 1.31.8; 1.31.10;
Add primitive routines to establish NMI handlers on i386.

TBD: synchronize (dis)establishment of handlers.
 1.30  26-Dec-2007  yamt - share idt entry allocation code among x86.
- introduce a function to reserve an idt entry and use it instead of
manipulating idt_allocmap directly.
- rename idt to xen_idt for amd64 xen. add missing #ifdef XEN.
 1.29  03-Dec-2007  ad branches: 1.29.2; 1.29.6; 1.29.8;
Interrupt handling changes, in discussion since February:

- Reduce available SPL levels for hardware devices to none, vm, sched, high.
- Acquire kernel_lock only for interrupts at IPL_VM.
- Implement threaded soft interrupts.
 1.28  17-Oct-2007  garbled branches: 1.28.2;
Merge the ppcoea-renovation branch to HEAD.

This branch was a major cleanup and rototill of many of the various OEA
cpu based PPC ports that focused on sharing as much code as possible
between the various ports to eliminate near-identical copies of files in
every tree. Additionally there is a new PIC system that unifies the
interface to interrupt code for all different OEA ppc arches. The work
for this branch was done by a variety of people, too long to list here.

TODO:
bebox still needs work to complete the transition to -renovation.
ofppc still needs a bunch of work, which I will be looking at.
ev64260 still needs to be renovated
amigappc was not attempted.

NOTES:
pmppc was removed as an arch, and moved to a evbppc target.
 1.27  09-Jul-2007  ad branches: 1.27.8; 1.27.10;
Merge some of the less invasive changes from the vmlocking branch:

- kthread, callout, devsw API changes
- select()/poll() improvements
- miscellaneous MT safety improvements
 1.26  17-May-2007  yamt merge yamt-idlelwp branch. asked by core@. some ports still needs work.

from doc/BRANCHES:

idle lwp, and some changes depending on it.

1. separate context switching and thread scheduling.
(cf. gmcgarry_ctxsw)
2. implement idle lwp.
3. clean up related MD/MI interfaces.
4. make scheduler(s) modular.
 1.25  16-Feb-2007  ad branches: 1.25.2; 1.25.6; 1.25.8; 1.25.14;
Remove spllowersoftclock() and CLKF_BASEPRI(), and always dispatch callouts
via a soft interrupt. In the near future, softclock will be run from process
context.
 1.24  09-Feb-2007  ad Merge newlock2 to head.
 1.23  26-Dec-2006  ad Define ipl_t as uint8_t so that it can be packed into a word with a lock
byte. Ok yamt@.
 1.22  21-Dec-2006  yamt merge yamt-splraiseipl branch.

- finish implementing splraiseipl (and makeiplcookie).
http://mail-index.NetBSD.org/tech-kern/2006/07/01/0000.html
- complete workqueue(9) and fix its ipl problem, which is reported
to cause audio skipping.
- fix netbt (at least compilation problems) for some ports.
- fix PR/33218.
 1.21  04-Jul-2006  christos branches: 1.21.4; 1.21.6;
Apply fvdl's acpi pci interrupt configuration code.
- MPACPI is no more.
- MPACPI_SCANPCI -> ACPI_SCANPCI
 1.20  16-Feb-2006  perry branches: 1.20.2; 1.20.10;
Change "inline" back to "__inline" in .h files -- C99 is still too
new, and some apps compile things in C89 mode. C89 keywords stay.

As per core@.
 1.19  24-Dec-2005  perry branches: 1.19.2; 1.19.4; 1.19.6;
Remove leading __ from __(const|inline|signed|volatile) -- it is obsolete.
 1.18  03-Nov-2005  yamt - use sys/spl.h.
- add some IPL_ definitions.
 1.17  29-Oct-2005  yamt add splraiseipl().
 1.16  28-Oct-2005  yamt remove duplicated spllpt().
 1.15  31-Oct-2004  yamt branches: 1.15.12; 1.15.14;
use __insn_barrier rather than homegrown equivalents.
 1.14  23-Oct-2004  yamt to determine if an interrupt needs to grab the kernel lock or not,
check interrupt's own ipl rather than cpu's current ipl.
 1.13  28-Jun-2004  fvdl Updaing ci_ilevel and testing ci_ipending must be done with all interrupts
off, or priority inversion can occur, which can lead to IPI deadlocks.
Leaves interrupts off for a bit longer, sadly, but with no noticeable
effects on the systems I tested on.

From YAMAMOTO Takashi.
 1.12  04-Mar-2004  dbj fix comment about spllowersoftclock
 1.11  14-Jan-2004  yamt spllower: lower spl before checking pending interrupts.
otherwise, interrupts happened immediately after the check might be left
pending for a while. (until the next tick in the worse case.)
 1.10  30-Oct-2003  fvdl * keep track of PCI buses that aren't known by firmware, but are found
by NetBSD
* use this info in in intr_find_mpmapping
* get rid of the last argument to intr_find_mpmapping, it was redundant
 1.9  27-Oct-2003  junyoung Nuke __P().
 1.8  16-Oct-2003  fvdl Add hooks and structures to allow the MP table intr mapping code a
better shot at finding a mapping. For PCI interrupts, if a bus
has no mappings, try its parent, with the swizzled pin, and the
bridge's device number.
 1.7  06-Sep-2003  fvdl Move the bulk of pci_intr_string into a seperate intr_string function. Use
that new function to print the pciide compat interrupt in pciide_machdep.c.
Share pciide_machdep.c between amd64 and i386.
 1.6  20-Aug-2003  fvdl Pass pointers to frames from assembly, do not use the 'frame on stack
as argument passed by value' trick, as gcc 3.3.x makes (valid) assumptions
about the stack that will not be true. Costs 2 instructions per trap/syscall
on i386, 4 per interrupt for MP. One instruction per trap/syscall on amd64,
2 per interrupt for MP. I expect gcc 3.3.1 to make up for this by better
optimization (it'd better..)

While here, make amd64 compile again by using subr_mbr_disk.c
 1.5  23-Jun-2003  martin branches: 1.5.2;
#ifdef _KERNEL_OPT police
 1.4  23-Jun-2003  martin Make sure to include opt_foo.h if a defflag option FOO is used.
 1.3  16-Jun-2003  thorpej Rename IPL_IMP -> IPL_VM.
 1.2  04-May-2003  fvdl Block level-triggered interrupts at the ioapic if they are deferred.
Avoids interrupt storms seen on some systems. Many thanks to
Stoned Elipot for testing.
 1.1  26-Feb-2003  fvdl Move some files out of i386 into x86, so that they can be shared with
other ports.
 1.5.2.5  10-Nov-2005  skrll Sync with HEAD. Here we go again...
 1.5.2.4  02-Nov-2004  skrll Sync with HEAD.
 1.5.2.3  21-Sep-2004  skrll Fix the sync with head I botched.
 1.5.2.2  18-Sep-2004  skrll Sync with HEAD.
 1.5.2.1  03-Aug-2004  skrll Sync with HEAD
 1.15.14.1  02-Nov-2005  yamt sync with head.
 1.15.12.6  21-Jan-2008  yamt sync with head
 1.15.12.5  07-Dec-2007  yamt sync with head
 1.15.12.4  03-Sep-2007  yamt sync with head.
 1.15.12.3  26-Feb-2007  yamt sync with head.
 1.15.12.2  30-Dec-2006  yamt sync with head.
 1.15.12.1  21-Jun-2006  yamt sync with head.
 1.19.6.1  22-Apr-2006  simonb Sync with head.
 1.19.4.1  09-Sep-2006  rpaulo sync with head
 1.19.2.1  18-Feb-2006  yamt sync with head.
 1.20.10.1  13-Jul-2006  gdamore Merge from HEAD.
 1.20.2.1  11-Aug-2006  yamt sync with head
 1.21.6.3  21-Sep-2006  yamt rename splraiseipl argument to match with the rest of ports.
 1.21.6.2  18-Sep-2006  yamt correct a header.
 1.21.6.1  18-Sep-2006  yamt implement new api for i386 and amd64.
 1.21.4.2  27-Jan-2007  ad If running on a PPro or later, at boot patch in versions of spllower() and
similar that use cmpxchg8b instead of cli/sti. Cuts the clock cycles for
splx() by a factor of ~6 on the P4, and ~3 on the PIII when bracketed by
serializing instructions (and hopefully more when not).
 1.21.4.1  12-Jan-2007  ad Sync with head.
 1.25.14.2  03-Oct-2007  garbled Sync with HEAD
 1.25.14.1  22-May-2007  matt Update to HEAD.
 1.25.8.1  11-Jul-2007  mjf Sync with head.
 1.25.6.4  03-Dec-2007  ad Sync with HEAD.
 1.25.6.3  03-Dec-2007  ad Sync with HEAD.
 1.25.6.2  17-Jun-2007  ad - Increase the number of thread priorities from 128 to 256. How the space
is set up is to be revisited.
- Implement soft interrupts as kernel threads. A generic implementation
is provided, with hooks for fast-path MD code that can run the interrupt
threads over the top of other threads executing in the kernel.
- Split vnode::v_flag into three fields, depending on how the flag is
locked (by the interlock, by the vnode lock, by the file system).
- Miscellaneous locking fixes and improvements.
 1.25.6.1  27-May-2007  ad Sync with head.
 1.25.2.1  23-Mar-2007  ad - Decouple intr.h from cpu.h.
- Define splraise in spl.S. As a side effect it becomes "preemption safe".
- Make softintr_schedule a function in softintr.c.
- Make softintr a function in spl.S, and remove the unneeded lock prefix.
 1.27.10.3  23-Mar-2008  matt sync with HEAD
 1.27.10.2  09-Jan-2008  matt sync with HEAD
 1.27.10.1  06-Nov-2007  matt sync with HEAD
 1.27.8.1  09-Dec-2007  jmcneill Sync with HEAD.
 1.28.2.2  18-Feb-2008  mjf Sync with HEAD.
 1.28.2.1  08-Dec-2007  mjf Sync with HEAD.
 1.29.8.1  16-Dec-2007  cube Split off device-specific stuff out of subr_autconf.c, and split off
autoconf-specific stuff out of device.h.

The only functional change is the removal of the unused evcnt.h include in
device.h which (*sigh*) has side-effects in x86's intr.h, and probably some
other in the rest of the tree but I'm only compiling i386's QEMU for the
time being.
 1.29.6.2  23-Jan-2008  bouyer Sync with HEAD.
 1.29.6.1  02-Jan-2008  bouyer Sync with HEAD
 1.29.2.1  26-Dec-2007  ad Sync with head.
 1.31.10.3  11-Aug-2010  yamt sync with head.
 1.31.10.2  04-May-2009  yamt sync with head.
 1.31.10.1  16-May-2008  yamt sync with head.
 1.31.8.2  04-Jun-2008  yamt sync with head
 1.31.8.1  18-May-2008  yamt sync with head.
 1.31.6.1  02-Jun-2008  mjf Sync with HEAD.
 1.34.2.1  23-Jun-2008  wrstuden Sync w/ -current. 34 merge conflicts to follow.
 1.35.12.5  27-Aug-2011  jym Sync with HEAD. Most notably: uvm/pmap work done by rmind@, and MP Xen
work of cherry@.

No regression observed on suspend/restore.
 1.35.12.4  02-May-2011  jym Sync with head.
 1.35.12.3  24-Oct-2010  jym Sync with HEAD
 1.35.12.2  01-Nov-2009  jym Sync with HEAD.
 1.35.12.1  13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.35.6.2  28-Apr-2009  skrll Sync with HEAD.
 1.35.6.1  03-Mar-2009  skrll Sync with HEAD.
 1.39.4.2  21-Apr-2011  rmind sync with head
 1.39.4.1  30-May-2010  rmind sync with head
 1.39.2.2  17-Aug-2010  uebayasi Sync with HEAD.
 1.39.2.1  30-Apr-2010  uebayasi Sync with HEAD.
 1.41.2.1  06-Jun-2011  jruoho Sync with HEAD.
 1.43.16.1  18-May-2014  rmind sync with head
 1.43.12.2  03-Dec-2017  jdolecek update from HEAD
 1.43.12.1  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.43.2.1  22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.44.2.1  10-Aug-2014  tls Rebase.
 1.45.4.3  28-Aug-2017  skrll Sync with HEAD
 1.45.4.2  22-Sep-2015  skrll Sync with HEAD
 1.45.4.1  06-Jun-2015  skrll Sync with HEAD
 1.50.2.2  05-Apr-2018  martin Pull up following revision(s) (requested by christos in ticket #696):

sys/arch/amd64/amd64/vector.S: revision 1.62 (patch)
sys/arch/x86/include/intr.h: revision 1.55
sys/arch/i386/i386/vector.S: revision 1.77
sys/arch/i386/i386/db_interface.c: revision 1.82 (patch)
sys/arch/amd64/amd64/spl.S: revision 1.34 (patch)
sys/arch/amd64/amd64/db_interface.c: revision 1.33 (patch)
sys/arch/x86/x86/intr.c: revision 1.125
sys/arch/i386/i386/spl.S: revision 1.43 (patch)
sys/arch/i386/i386/machdep.c: revision 1.805 (patch)
sys/arch/x86/x86/lapic.c: revision 1.66 (patch)

Rename the DDB IPI IDT vectors for consistency. ok maxv@

Rename Xpreempt{recurse,resume} -> X{recurse,resume}_preempt so that
they fit the pattern. Also the debugger trap sniffer matches them
without adding special entries...

XXX: pullup-8.
 1.50.2.1  13-Jan-2018  snj Pull up following revision(s) (requested by knakahara in ticket #493):
sys/arch/x86/include/intr.h: revision 1.53
sys/arch/x86/pci/pci_intr_machdep.c: revision 1.42
sys/arch/x86/x86/intr.c: revision 1.114 via patch
fix "intrctl list" panic when ACPI is disabled.
reviewed by cherry@n.o and tested by msaitoh@n.o, thanks.
 1.51.2.2  16-Jul-2017  cherry 2302677
 1.51.2.1  16-Jul-2017  cherry file intr.h was added on branch perseant-stdc-iso10646 on 2017-07-16 14:02:49 +0000
 1.54.2.3  26-Dec-2018  pgoyette Sync with HEAD, resolve a few conflicts
 1.54.2.2  25-Jun-2018  pgoyette Sync with HEAD
 1.54.2.1  07-Apr-2018  pgoyette Sync with HEAD. 77 conflicts resolved - all of them $NetBSD$
 1.56.2.2  08-Apr-2020  martin Merge changes from current as of 20200406
 1.56.2.1  10-Jun-2019  christos Sync with HEAD
 1.61.6.5  19-Apr-2020  bouyer Add per-PIC callbacks for interrupt_get_devname(), interrupt_get_assigned()
and interrupt_get_count(). Implement Xen-specific callbacks for
PIC_XEN and use the x86 one for others.
In event_set_handler(), call intr_allocate_io_intrsource() so that
events appears in interrupt list (intrctl list).
 1.61.6.4  19-Apr-2020  bouyer Add a struct pic * member to struct intrhand.
This will be used for interrupt_get_count()
For Xen remplace pic_type with a pointer to the pic, and add a pointer
to intrhand, in struct pintrhand
Make event_set_handler return the pointer to struct intrhand.
Don't allocate a fake intrhand in xen_intr_establish_xname(), use the
one returned by event_set_handler().
 1.61.6.3  16-Apr-2020  bouyer Reorganise sources to make it possible to include Xen PVHVM support in
native kernels. Among others:
- move xen/include/amd64/hypercall.h to amd64/include/xen and
xen/include/i386/hypercall.h to i386/include/xen
- exclude some native files from the build for xenpv
- add xen to "machine" config statement for amd64 and i386
- split arch/xen/conf/files.xen to arch/xen/conf/files.xen (for pv drivers)
and arch/xen/conf/files.xen.pv (for full pv support)
- add GENERIC_XENHVM kernel config which includes GENERIC and add Xen PV
drivers.
 1.61.6.2  11-Apr-2020  bouyer Move softint and preemtion-related functions out of x86/x86/intr.c to
its own file, x86/x86/x86_softintr.c
Add x86/x86/x86_softintr.c for native and XenPV
Make sure XenPV also check ci_ioending, which is used for softints.
Switch XenPV to fast softints and allow kernel preemption.
kpreempt_disable() before calling pmap_changeprot_local()
run xen_wallclock_time() and xen_global_systime_ns() at splshed() to
avoid being interrupted.

XXX amd64 lock stubs are racy for XPENDING
 1.61.6.1  10-Apr-2020  bouyer spllower(): Also check Xen pending events
hypervisor_pvhvm_callback(): exit via Xdoreti, so that pending interrupts
are checked.
disable __HAVE_FAST_SOFTINTS only for XENPV, it now works for PVHVM.
We still have to disable PREEMPTION, until we support MULTIPROCESSOR

RSS XML Feed