History log of /netbsd-current/sys/arch/arm/pic/pic.c
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 1.85 30-Oct-2022 riastradh

arm/pic: Sprinkle dtrace probes on interrupt handlers like x86.


# 1.84 29-Oct-2022 riastradh

arm/pic: Use a local variable to reduce #ifdef scope.

Avoids straddling a conditional this way.


Revision tags: bouyer-sunxi-drm-base
# 1.83 28-Jul-2022 riastradh

arm/pic: Mark definitions static to match declarations.


# 1.82 28-Jul-2022 riastradh

arm/pic: Assert ci_cpl doesn't lower across interrupt handler.


# 1.81 28-Jul-2022 skrll

Catch up with the per lwp astpending (rather than per cpu) flag in the
preemption code. NFC as preemption (still) isn't enabled.


# 1.80 25-Jun-2022 jmcneill

pic: Update ci_cpl in pic_set_priority callback.

Not all ICs need interrupts disabled to update the priority. DAIF accesses
are not cheap, so push the update of ci_cpl from pic_set_priority to the
IC's pic_set_priority callback, and let the IC driver determine whether
or not it needs interrupts disabled.


# 1.79 02-Jan-2022 riastradh

arm: No #if DIAGNOSTIC needed any more.

Compiler can (and gcc does) flush call to strlen when the result is
unused, so no performance impact here.


# 1.78 21-Dec-2021 skrll

Fix a bug where pic_establish_intr would fail to call pic_establish_irq
if a free pic__iplsources slot was found, i.e. an interrupt handler at
the same ipl had been disestablished previously.


# 1.77 21-Dec-2021 skrll

G/C pic_iplsource


# 1.76 21-Dec-2021 skrll

KNF


# 1.75 31-Oct-2021 skrll

Only perform pic_unblock_percpu if all of the following are true
- mp_online, i.e. APs are running.
- is_mpsafe, i.e. the interrupt handler is MP safe
- is_percpu, i.e. the interrupt actually requires it!

The last one (is_percpu) is true for GIC PPI+SGI only.


# 1.74 31-Oct-2021 skrll

Assert we can sleep in pic_add


# 1.73 31-Oct-2021 skrll

Rework Arm (32bit and 64bit) AP startup so that cpu_hatch doesn't sleep.

The AP initialisation code in cpu_init_secondary_processor will read and
initialise the required system registers and state for the BP to attach
and report.

Rework the interrupt handler code for this new sequence. Thankfully,
this removes a bunch of code for bcm2836mp.

The VFP detection handler on <= armv7 relies on the global undefined
handler being in place until the BP attaches vfp. That is, after the
APs have been spun up.

gicv3_its.c has a serialisation issue which is protected against in
the gicv3_its_cpu_init, which is called from cpu_hatch, with a spin
lock. The serialisation issue needs addressing more completely.

Tested on RPI3, Apple M1, QEMU, and lx2k

Fixes PR port-arm/56264:
diagnostic assertion "l->l_stat == LSONPROC" failed on RPI3


# 1.72 26-Sep-2021 jmcneill

If an SGI or PPI is established after interrupts are enabled, make sure
we unblock the source on _all_ CPUs and not just the CPU that is
establishing the interrupt.


Revision tags: thorpej-i2c-spi-conf2-base
# 1.71 08-Aug-2021 skrll

Re-apply

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.

There is(/was) no need to use atomic operations on the percpu / cpu_info
members, so don't.

Finally removng the use of percpu should help avoid problems with "late"
attaching cpus.


Revision tags: thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.70 27-Mar-2021 jmcneill

Revert recent pic optimizations until I have more time to work on this.


# 1.69 21-Feb-2021 jmcneill

branches: 1.69.2;
Inline pic_set_priority and use cpu_dosoftints_ci when available.


# 1.68 21-Feb-2021 skrll

Fixup with __HAVE_PREEMPTION code which is currently unused


# 1.67 20-Feb-2021 jmcneill

Inline "pic_do_pending_ints" in splx and check ci_pending_ipls to optimize
the common case (hw priority, no cascaded interrupts pending).

This also removes the need for the "pic_pending_used" flag, and should fix
booting on Raspberry Pi 3.


# 1.66 20-Feb-2021 jmcneill

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.


# 1.65 16-Feb-2021 jmcneill

pic: avoid pic_do_pending_ints if pic_mark_pending_* has never been called


# 1.64 15-Feb-2021 jmcneill

splx: use pic_set_priority_psw in interrupts disabled case to skip a few
more daif accesses.


# 1.63 15-Feb-2021 jmcneill

pic: reduce the number of daif accesses in pic_do_pending_ints

The caller has already provided daif state. No need to keep updating
daif via pic_set_priority if it's already in the state we need (interrupts
disabled).


# 1.62 07-Feb-2021 jmcneill

Use ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie()/cpsid() in
places where we don't care about the cpsie() return value.


# 1.61 01-Nov-2020 jmcneill

branches: 1.61.2;
intr_ipi_send: assert that kcp is either NULL or contains exactly one CPU


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-3-RELEASE netbsd-9-2-RELEASE netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.83 28-Jul-2022 riastradh

arm/pic: Mark definitions static to match declarations.


# 1.82 28-Jul-2022 riastradh

arm/pic: Assert ci_cpl doesn't lower across interrupt handler.


# 1.81 28-Jul-2022 skrll

Catch up with the per lwp astpending (rather than per cpu) flag in the
preemption code. NFC as preemption (still) isn't enabled.


# 1.80 25-Jun-2022 jmcneill

pic: Update ci_cpl in pic_set_priority callback.

Not all ICs need interrupts disabled to update the priority. DAIF accesses
are not cheap, so push the update of ci_cpl from pic_set_priority to the
IC's pic_set_priority callback, and let the IC driver determine whether
or not it needs interrupts disabled.


# 1.79 02-Jan-2022 riastradh

arm: No #if DIAGNOSTIC needed any more.

Compiler can (and gcc does) flush call to strlen when the result is
unused, so no performance impact here.


# 1.78 21-Dec-2021 skrll

Fix a bug where pic_establish_intr would fail to call pic_establish_irq
if a free pic__iplsources slot was found, i.e. an interrupt handler at
the same ipl had been disestablished previously.


# 1.77 21-Dec-2021 skrll

G/C pic_iplsource


# 1.76 21-Dec-2021 skrll

KNF


# 1.75 31-Oct-2021 skrll

Only perform pic_unblock_percpu if all of the following are true
- mp_online, i.e. APs are running.
- is_mpsafe, i.e. the interrupt handler is MP safe
- is_percpu, i.e. the interrupt actually requires it!

The last one (is_percpu) is true for GIC PPI+SGI only.


# 1.74 31-Oct-2021 skrll

Assert we can sleep in pic_add


# 1.73 31-Oct-2021 skrll

Rework Arm (32bit and 64bit) AP startup so that cpu_hatch doesn't sleep.

The AP initialisation code in cpu_init_secondary_processor will read and
initialise the required system registers and state for the BP to attach
and report.

Rework the interrupt handler code for this new sequence. Thankfully,
this removes a bunch of code for bcm2836mp.

The VFP detection handler on <= armv7 relies on the global undefined
handler being in place until the BP attaches vfp. That is, after the
APs have been spun up.

gicv3_its.c has a serialisation issue which is protected against in
the gicv3_its_cpu_init, which is called from cpu_hatch, with a spin
lock. The serialisation issue needs addressing more completely.

Tested on RPI3, Apple M1, QEMU, and lx2k

Fixes PR port-arm/56264:
diagnostic assertion "l->l_stat == LSONPROC" failed on RPI3


# 1.72 26-Sep-2021 jmcneill

If an SGI or PPI is established after interrupts are enabled, make sure
we unblock the source on _all_ CPUs and not just the CPU that is
establishing the interrupt.


Revision tags: thorpej-i2c-spi-conf2-base
# 1.71 08-Aug-2021 skrll

Re-apply

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.

There is(/was) no need to use atomic operations on the percpu / cpu_info
members, so don't.

Finally removng the use of percpu should help avoid problems with "late"
attaching cpus.


Revision tags: thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.70 27-Mar-2021 jmcneill

Revert recent pic optimizations until I have more time to work on this.


# 1.69 21-Feb-2021 jmcneill

branches: 1.69.2;
Inline pic_set_priority and use cpu_dosoftints_ci when available.


# 1.68 21-Feb-2021 skrll

Fixup with __HAVE_PREEMPTION code which is currently unused


# 1.67 20-Feb-2021 jmcneill

Inline "pic_do_pending_ints" in splx and check ci_pending_ipls to optimize
the common case (hw priority, no cascaded interrupts pending).

This also removes the need for the "pic_pending_used" flag, and should fix
booting on Raspberry Pi 3.


# 1.66 20-Feb-2021 jmcneill

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.


# 1.65 16-Feb-2021 jmcneill

pic: avoid pic_do_pending_ints if pic_mark_pending_* has never been called


# 1.64 15-Feb-2021 jmcneill

splx: use pic_set_priority_psw in interrupts disabled case to skip a few
more daif accesses.


# 1.63 15-Feb-2021 jmcneill

pic: reduce the number of daif accesses in pic_do_pending_ints

The caller has already provided daif state. No need to keep updating
daif via pic_set_priority if it's already in the state we need (interrupts
disabled).


# 1.62 07-Feb-2021 jmcneill

Use ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie()/cpsid() in
places where we don't care about the cpsie() return value.


# 1.61 01-Nov-2020 jmcneill

branches: 1.61.2;
intr_ipi_send: assert that kcp is either NULL or contains exactly one CPU


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-2-RELEASE netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.80 25-Jun-2022 jmcneill

pic: Update ci_cpl in pic_set_priority callback.

Not all ICs need interrupts disabled to update the priority. DAIF accesses
are not cheap, so push the update of ci_cpl from pic_set_priority to the
IC's pic_set_priority callback, and let the IC driver determine whether
or not it needs interrupts disabled.


# 1.79 02-Jan-2022 riastradh

arm: No #if DIAGNOSTIC needed any more.

Compiler can (and gcc does) flush call to strlen when the result is
unused, so no performance impact here.


# 1.78 21-Dec-2021 skrll

Fix a bug where pic_establish_intr would fail to call pic_establish_irq
if a free pic__iplsources slot was found, i.e. an interrupt handler at
the same ipl had been disestablished previously.


# 1.77 21-Dec-2021 skrll

G/C pic_iplsource


# 1.76 21-Dec-2021 skrll

KNF


# 1.75 31-Oct-2021 skrll

Only perform pic_unblock_percpu if all of the following are true
- mp_online, i.e. APs are running.
- is_mpsafe, i.e. the interrupt handler is MP safe
- is_percpu, i.e. the interrupt actually requires it!

The last one (is_percpu) is true for GIC PPI+SGI only.


# 1.74 31-Oct-2021 skrll

Assert we can sleep in pic_add


# 1.73 31-Oct-2021 skrll

Rework Arm (32bit and 64bit) AP startup so that cpu_hatch doesn't sleep.

The AP initialisation code in cpu_init_secondary_processor will read and
initialise the required system registers and state for the BP to attach
and report.

Rework the interrupt handler code for this new sequence. Thankfully,
this removes a bunch of code for bcm2836mp.

The VFP detection handler on <= armv7 relies on the global undefined
handler being in place until the BP attaches vfp. That is, after the
APs have been spun up.

gicv3_its.c has a serialisation issue which is protected against in
the gicv3_its_cpu_init, which is called from cpu_hatch, with a spin
lock. The serialisation issue needs addressing more completely.

Tested on RPI3, Apple M1, QEMU, and lx2k

Fixes PR port-arm/56264:
diagnostic assertion "l->l_stat == LSONPROC" failed on RPI3


# 1.72 26-Sep-2021 jmcneill

If an SGI or PPI is established after interrupts are enabled, make sure
we unblock the source on _all_ CPUs and not just the CPU that is
establishing the interrupt.


Revision tags: thorpej-i2c-spi-conf2-base
# 1.71 08-Aug-2021 skrll

Re-apply

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.

There is(/was) no need to use atomic operations on the percpu / cpu_info
members, so don't.

Finally removng the use of percpu should help avoid problems with "late"
attaching cpus.


Revision tags: thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.70 27-Mar-2021 jmcneill

Revert recent pic optimizations until I have more time to work on this.


# 1.69 21-Feb-2021 jmcneill

branches: 1.69.2;
Inline pic_set_priority and use cpu_dosoftints_ci when available.


# 1.68 21-Feb-2021 skrll

Fixup with __HAVE_PREEMPTION code which is currently unused


# 1.67 20-Feb-2021 jmcneill

Inline "pic_do_pending_ints" in splx and check ci_pending_ipls to optimize
the common case (hw priority, no cascaded interrupts pending).

This also removes the need for the "pic_pending_used" flag, and should fix
booting on Raspberry Pi 3.


# 1.66 20-Feb-2021 jmcneill

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.


# 1.65 16-Feb-2021 jmcneill

pic: avoid pic_do_pending_ints if pic_mark_pending_* has never been called


# 1.64 15-Feb-2021 jmcneill

splx: use pic_set_priority_psw in interrupts disabled case to skip a few
more daif accesses.


# 1.63 15-Feb-2021 jmcneill

pic: reduce the number of daif accesses in pic_do_pending_ints

The caller has already provided daif state. No need to keep updating
daif via pic_set_priority if it's already in the state we need (interrupts
disabled).


# 1.62 07-Feb-2021 jmcneill

Use ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie()/cpsid() in
places where we don't care about the cpsie() return value.


# 1.61 01-Nov-2020 jmcneill

branches: 1.61.2;
intr_ipi_send: assert that kcp is either NULL or contains exactly one CPU


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-2-RELEASE netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.79 02-Jan-2022 riastradh

arm: No #if DIAGNOSTIC needed any more.

Compiler can (and gcc does) flush call to strlen when the result is
unused, so no performance impact here.


# 1.78 21-Dec-2021 skrll

Fix a bug where pic_establish_intr would fail to call pic_establish_irq
if a free pic__iplsources slot was found, i.e. an interrupt handler at
the same ipl had been disestablished previously.


# 1.77 21-Dec-2021 skrll

G/C pic_iplsource


# 1.76 21-Dec-2021 skrll

KNF


# 1.75 31-Oct-2021 skrll

Only perform pic_unblock_percpu if all of the following are true
- mp_online, i.e. APs are running.
- is_mpsafe, i.e. the interrupt handler is MP safe
- is_percpu, i.e. the interrupt actually requires it!

The last one (is_percpu) is true for GIC PPI+SGI only.


# 1.74 31-Oct-2021 skrll

Assert we can sleep in pic_add


# 1.73 31-Oct-2021 skrll

Rework Arm (32bit and 64bit) AP startup so that cpu_hatch doesn't sleep.

The AP initialisation code in cpu_init_secondary_processor will read and
initialise the required system registers and state for the BP to attach
and report.

Rework the interrupt handler code for this new sequence. Thankfully,
this removes a bunch of code for bcm2836mp.

The VFP detection handler on <= armv7 relies on the global undefined
handler being in place until the BP attaches vfp. That is, after the
APs have been spun up.

gicv3_its.c has a serialisation issue which is protected against in
the gicv3_its_cpu_init, which is called from cpu_hatch, with a spin
lock. The serialisation issue needs addressing more completely.

Tested on RPI3, Apple M1, QEMU, and lx2k

Fixes PR port-arm/56264:
diagnostic assertion "l->l_stat == LSONPROC" failed on RPI3


# 1.72 26-Sep-2021 jmcneill

If an SGI or PPI is established after interrupts are enabled, make sure
we unblock the source on _all_ CPUs and not just the CPU that is
establishing the interrupt.


Revision tags: thorpej-i2c-spi-conf2-base
# 1.71 08-Aug-2021 skrll

Re-apply

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.

There is(/was) no need to use atomic operations on the percpu / cpu_info
members, so don't.

Finally removng the use of percpu should help avoid problems with "late"
attaching cpus.


Revision tags: thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.70 27-Mar-2021 jmcneill

Revert recent pic optimizations until I have more time to work on this.


# 1.69 21-Feb-2021 jmcneill

branches: 1.69.2;
Inline pic_set_priority and use cpu_dosoftints_ci when available.


# 1.68 21-Feb-2021 skrll

Fixup with __HAVE_PREEMPTION code which is currently unused


# 1.67 20-Feb-2021 jmcneill

Inline "pic_do_pending_ints" in splx and check ci_pending_ipls to optimize
the common case (hw priority, no cascaded interrupts pending).

This also removes the need for the "pic_pending_used" flag, and should fix
booting on Raspberry Pi 3.


# 1.66 20-Feb-2021 jmcneill

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.


# 1.65 16-Feb-2021 jmcneill

pic: avoid pic_do_pending_ints if pic_mark_pending_* has never been called


# 1.64 15-Feb-2021 jmcneill

splx: use pic_set_priority_psw in interrupts disabled case to skip a few
more daif accesses.


# 1.63 15-Feb-2021 jmcneill

pic: reduce the number of daif accesses in pic_do_pending_ints

The caller has already provided daif state. No need to keep updating
daif via pic_set_priority if it's already in the state we need (interrupts
disabled).


# 1.62 07-Feb-2021 jmcneill

Use ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie()/cpsid() in
places where we don't care about the cpsie() return value.


# 1.61 01-Nov-2020 jmcneill

branches: 1.61.2;
intr_ipi_send: assert that kcp is either NULL or contains exactly one CPU


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-2-RELEASE netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.78 21-Dec-2021 skrll

Fix a bug where pic_establish_intr would fail to call pic_establish_irq
if a free pic__iplsources slot was found, i.e. an interrupt handler at
the same ipl had been disestablished previously.


# 1.77 21-Dec-2021 skrll

G/C pic_iplsource


# 1.76 21-Dec-2021 skrll

KNF


# 1.75 31-Oct-2021 skrll

Only perform pic_unblock_percpu if all of the following are true
- mp_online, i.e. APs are running.
- is_mpsafe, i.e. the interrupt handler is MP safe
- is_percpu, i.e. the interrupt actually requires it!

The last one (is_percpu) is true for GIC PPI+SGI only.


# 1.74 31-Oct-2021 skrll

Assert we can sleep in pic_add


# 1.73 31-Oct-2021 skrll

Rework Arm (32bit and 64bit) AP startup so that cpu_hatch doesn't sleep.

The AP initialisation code in cpu_init_secondary_processor will read and
initialise the required system registers and state for the BP to attach
and report.

Rework the interrupt handler code for this new sequence. Thankfully,
this removes a bunch of code for bcm2836mp.

The VFP detection handler on <= armv7 relies on the global undefined
handler being in place until the BP attaches vfp. That is, after the
APs have been spun up.

gicv3_its.c has a serialisation issue which is protected against in
the gicv3_its_cpu_init, which is called from cpu_hatch, with a spin
lock. The serialisation issue needs addressing more completely.

Tested on RPI3, Apple M1, QEMU, and lx2k

Fixes PR port-arm/56264:
diagnostic assertion "l->l_stat == LSONPROC" failed on RPI3


# 1.72 26-Sep-2021 jmcneill

If an SGI or PPI is established after interrupts are enabled, make sure
we unblock the source on _all_ CPUs and not just the CPU that is
establishing the interrupt.


Revision tags: thorpej-i2c-spi-conf2-base
# 1.71 08-Aug-2021 skrll

Re-apply

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.

There is(/was) no need to use atomic operations on the percpu / cpu_info
members, so don't.

Finally removng the use of percpu should help avoid problems with "late"
attaching cpus.


Revision tags: thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.70 27-Mar-2021 jmcneill

Revert recent pic optimizations until I have more time to work on this.


# 1.69 21-Feb-2021 jmcneill

branches: 1.69.2;
Inline pic_set_priority and use cpu_dosoftints_ci when available.


# 1.68 21-Feb-2021 skrll

Fixup with __HAVE_PREEMPTION code which is currently unused


# 1.67 20-Feb-2021 jmcneill

Inline "pic_do_pending_ints" in splx and check ci_pending_ipls to optimize
the common case (hw priority, no cascaded interrupts pending).

This also removes the need for the "pic_pending_used" flag, and should fix
booting on Raspberry Pi 3.


# 1.66 20-Feb-2021 jmcneill

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.


# 1.65 16-Feb-2021 jmcneill

pic: avoid pic_do_pending_ints if pic_mark_pending_* has never been called


# 1.64 15-Feb-2021 jmcneill

splx: use pic_set_priority_psw in interrupts disabled case to skip a few
more daif accesses.


# 1.63 15-Feb-2021 jmcneill

pic: reduce the number of daif accesses in pic_do_pending_ints

The caller has already provided daif state. No need to keep updating
daif via pic_set_priority if it's already in the state we need (interrupts
disabled).


# 1.62 07-Feb-2021 jmcneill

Use ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie()/cpsid() in
places where we don't care about the cpsie() return value.


# 1.61 01-Nov-2020 jmcneill

branches: 1.61.2;
intr_ipi_send: assert that kcp is either NULL or contains exactly one CPU


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-2-RELEASE netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.75 31-Oct-2021 skrll

Only perform pic_unblock_percpu if all of the following are true
- mp_online, i.e. APs are running.
- is_mpsafe, i.e. the interrupt handler is MP safe
- is_percpu, i.e. the interrupt actually requires it!

The last one (is_percpu) is true for GIC PPI+SGI only.


# 1.74 31-Oct-2021 skrll

Assert we can sleep in pic_add


# 1.73 31-Oct-2021 skrll

Rework Arm (32bit and 64bit) AP startup so that cpu_hatch doesn't sleep.

The AP initialisation code in cpu_init_secondary_processor will read and
initialise the required system registers and state for the BP to attach
and report.

Rework the interrupt handler code for this new sequence. Thankfully,
this removes a bunch of code for bcm2836mp.

The VFP detection handler on <= armv7 relies on the global undefined
handler being in place until the BP attaches vfp. That is, after the
APs have been spun up.

gicv3_its.c has a serialisation issue which is protected against in
the gicv3_its_cpu_init, which is called from cpu_hatch, with a spin
lock. The serialisation issue needs addressing more completely.

Tested on RPI3, Apple M1, QEMU, and lx2k

Fixes PR port-arm/56264:
diagnostic assertion "l->l_stat == LSONPROC" failed on RPI3


# 1.72 26-Sep-2021 jmcneill

If an SGI or PPI is established after interrupts are enabled, make sure
we unblock the source on _all_ CPUs and not just the CPU that is
establishing the interrupt.


Revision tags: thorpej-i2c-spi-conf2-base
# 1.71 08-Aug-2021 skrll

Re-apply

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.

There is(/was) no need to use atomic operations on the percpu / cpu_info
members, so don't.

Finally removng the use of percpu should help avoid problems with "late"
attaching cpus.


Revision tags: thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.70 27-Mar-2021 jmcneill

Revert recent pic optimizations until I have more time to work on this.


# 1.69 21-Feb-2021 jmcneill

branches: 1.69.2;
Inline pic_set_priority and use cpu_dosoftints_ci when available.


# 1.68 21-Feb-2021 skrll

Fixup with __HAVE_PREEMPTION code which is currently unused


# 1.67 20-Feb-2021 jmcneill

Inline "pic_do_pending_ints" in splx and check ci_pending_ipls to optimize
the common case (hw priority, no cascaded interrupts pending).

This also removes the need for the "pic_pending_used" flag, and should fix
booting on Raspberry Pi 3.


# 1.66 20-Feb-2021 jmcneill

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.


# 1.65 16-Feb-2021 jmcneill

pic: avoid pic_do_pending_ints if pic_mark_pending_* has never been called


# 1.64 15-Feb-2021 jmcneill

splx: use pic_set_priority_psw in interrupts disabled case to skip a few
more daif accesses.


# 1.63 15-Feb-2021 jmcneill

pic: reduce the number of daif accesses in pic_do_pending_ints

The caller has already provided daif state. No need to keep updating
daif via pic_set_priority if it's already in the state we need (interrupts
disabled).


# 1.62 07-Feb-2021 jmcneill

Use ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie()/cpsid() in
places where we don't care about the cpsie() return value.


# 1.61 01-Nov-2020 jmcneill

branches: 1.61.2;
intr_ipi_send: assert that kcp is either NULL or contains exactly one CPU


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-2-RELEASE netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.72 26-Sep-2021 jmcneill

If an SGI or PPI is established after interrupts are enabled, make sure
we unblock the source on _all_ CPUs and not just the CPU that is
establishing the interrupt.


Revision tags: thorpej-i2c-spi-conf2-base
# 1.71 08-Aug-2021 skrll

Re-apply

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.

There is(/was) no need to use atomic operations on the percpu / cpu_info
members, so don't.

Finally removng the use of percpu should help avoid problems with "late"
attaching cpus.


Revision tags: thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.70 27-Mar-2021 jmcneill

Revert recent pic optimizations until I have more time to work on this.


# 1.69 21-Feb-2021 jmcneill

branches: 1.69.2;
Inline pic_set_priority and use cpu_dosoftints_ci when available.


# 1.68 21-Feb-2021 skrll

Fixup with __HAVE_PREEMPTION code which is currently unused


# 1.67 20-Feb-2021 jmcneill

Inline "pic_do_pending_ints" in splx and check ci_pending_ipls to optimize
the common case (hw priority, no cascaded interrupts pending).

This also removes the need for the "pic_pending_used" flag, and should fix
booting on Raspberry Pi 3.


# 1.66 20-Feb-2021 jmcneill

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.


# 1.65 16-Feb-2021 jmcneill

pic: avoid pic_do_pending_ints if pic_mark_pending_* has never been called


# 1.64 15-Feb-2021 jmcneill

splx: use pic_set_priority_psw in interrupts disabled case to skip a few
more daif accesses.


# 1.63 15-Feb-2021 jmcneill

pic: reduce the number of daif accesses in pic_do_pending_ints

The caller has already provided daif state. No need to keep updating
daif via pic_set_priority if it's already in the state we need (interrupts
disabled).


# 1.62 07-Feb-2021 jmcneill

Use ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie()/cpsid() in
places where we don't care about the cpsie() return value.


# 1.61 01-Nov-2020 jmcneill

branches: 1.61.2;
intr_ipi_send: assert that kcp is either NULL or contains exactly one CPU


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-2-RELEASE netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


Revision tags: thorpej-i2c-spi-conf2-base
# 1.71 08-Aug-2021 skrll

Re-apply

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.

There is(/was) no need to use atomic operations on the percpu / cpu_info
members, so don't.

Finally removng the use of percpu should help avoid problems with "late"
attaching cpus.


Revision tags: thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.70 27-Mar-2021 jmcneill

Revert recent pic optimizations until I have more time to work on this.


# 1.69 21-Feb-2021 jmcneill

branches: 1.69.2;
Inline pic_set_priority and use cpu_dosoftints_ci when available.


# 1.68 21-Feb-2021 skrll

Fixup with __HAVE_PREEMPTION code which is currently unused


# 1.67 20-Feb-2021 jmcneill

Inline "pic_do_pending_ints" in splx and check ci_pending_ipls to optimize
the common case (hw priority, no cascaded interrupts pending).

This also removes the need for the "pic_pending_used" flag, and should fix
booting on Raspberry Pi 3.


# 1.66 20-Feb-2021 jmcneill

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.


# 1.65 16-Feb-2021 jmcneill

pic: avoid pic_do_pending_ints if pic_mark_pending_* has never been called


# 1.64 15-Feb-2021 jmcneill

splx: use pic_set_priority_psw in interrupts disabled case to skip a few
more daif accesses.


# 1.63 15-Feb-2021 jmcneill

pic: reduce the number of daif accesses in pic_do_pending_ints

The caller has already provided daif state. No need to keep updating
daif via pic_set_priority if it's already in the state we need (interrupts
disabled).


# 1.62 07-Feb-2021 jmcneill

Use ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie()/cpsid() in
places where we don't care about the cpsie() return value.


# 1.61 01-Nov-2020 jmcneill

branches: 1.61.2;
intr_ipi_send: assert that kcp is either NULL or contains exactly one CPU


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-2-RELEASE netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.70 27-Mar-2021 jmcneill

Revert recent pic optimizations until I have more time to work on this.


Revision tags: thorpej-cfargs-base
# 1.69 21-Feb-2021 jmcneill

Inline pic_set_priority and use cpu_dosoftints_ci when available.


# 1.68 21-Feb-2021 skrll

Fixup with __HAVE_PREEMPTION code which is currently unused


# 1.67 20-Feb-2021 jmcneill

Inline "pic_do_pending_ints" in splx and check ci_pending_ipls to optimize
the common case (hw priority, no cascaded interrupts pending).

This also removes the need for the "pic_pending_used" flag, and should fix
booting on Raspberry Pi 3.


# 1.66 20-Feb-2021 jmcneill

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.


# 1.65 16-Feb-2021 jmcneill

pic: avoid pic_do_pending_ints if pic_mark_pending_* has never been called


# 1.64 15-Feb-2021 jmcneill

splx: use pic_set_priority_psw in interrupts disabled case to skip a few
more daif accesses.


# 1.63 15-Feb-2021 jmcneill

pic: reduce the number of daif accesses in pic_do_pending_ints

The caller has already provided daif state. No need to keep updating
daif via pic_set_priority if it's already in the state we need (interrupts
disabled).


# 1.62 07-Feb-2021 jmcneill

Use ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie()/cpsid() in
places where we don't care about the cpsie() return value.


Revision tags: thorpej-futex-base
# 1.61 01-Nov-2020 jmcneill

intr_ipi_send: assert that kcp is either NULL or contains exactly one CPU


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.69 21-Feb-2021 jmcneill

Inline pic_set_priority and use cpu_dosoftints_ci when available.


# 1.68 21-Feb-2021 skrll

Fixup with __HAVE_PREEMPTION code which is currently unused


# 1.67 20-Feb-2021 jmcneill

Inline "pic_do_pending_ints" in splx and check ci_pending_ipls to optimize
the common case (hw priority, no cascaded interrupts pending).

This also removes the need for the "pic_pending_used" flag, and should fix
booting on Raspberry Pi 3.


# 1.66 20-Feb-2021 jmcneill

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.


# 1.65 16-Feb-2021 jmcneill

pic: avoid pic_do_pending_ints if pic_mark_pending_* has never been called


# 1.64 15-Feb-2021 jmcneill

splx: use pic_set_priority_psw in interrupts disabled case to skip a few
more daif accesses.


# 1.63 15-Feb-2021 jmcneill

pic: reduce the number of daif accesses in pic_do_pending_ints

The caller has already provided daif state. No need to keep updating
daif via pic_set_priority if it's already in the state we need (interrupts
disabled).


# 1.62 07-Feb-2021 jmcneill

Use ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie()/cpsid() in
places where we don't care about the cpsie() return value.


Revision tags: thorpej-futex-base
# 1.61 01-Nov-2020 jmcneill

intr_ipi_send: assert that kcp is either NULL or contains exactly one CPU


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.68 21-Feb-2021 skrll

Fixup with __HAVE_PREEMPTION code which is currently unused


# 1.67 20-Feb-2021 jmcneill

Inline "pic_do_pending_ints" in splx and check ci_pending_ipls to optimize
the common case (hw priority, no cascaded interrupts pending).

This also removes the need for the "pic_pending_used" flag, and should fix
booting on Raspberry Pi 3.


# 1.66 20-Feb-2021 jmcneill

Move 'struct pic_pending' from percpu to struct cpu_info. Saves a few
instructions in splx.


# 1.65 16-Feb-2021 jmcneill

pic: avoid pic_do_pending_ints if pic_mark_pending_* has never been called


# 1.64 15-Feb-2021 jmcneill

splx: use pic_set_priority_psw in interrupts disabled case to skip a few
more daif accesses.


# 1.63 15-Feb-2021 jmcneill

pic: reduce the number of daif accesses in pic_do_pending_ints

The caller has already provided daif state. No need to keep updating
daif via pic_set_priority if it's already in the state we need (interrupts
disabled).


# 1.62 07-Feb-2021 jmcneill

Use ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie()/cpsid() in
places where we don't care about the cpsie() return value.


Revision tags: thorpej-futex-base
# 1.61 01-Nov-2020 jmcneill

intr_ipi_send: assert that kcp is either NULL or contains exactly one CPU


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.65 16-Feb-2021 jmcneill

pic: avoid pic_do_pending_ints if pic_mark_pending_* has never been called


# 1.64 15-Feb-2021 jmcneill

splx: use pic_set_priority_psw in interrupts disabled case to skip a few
more daif accesses.


# 1.63 15-Feb-2021 jmcneill

pic: reduce the number of daif accesses in pic_do_pending_ints

The caller has already provided daif state. No need to keep updating
daif via pic_set_priority if it's already in the state we need (interrupts
disabled).


# 1.62 07-Feb-2021 jmcneill

Use ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie()/cpsid() in
places where we don't care about the cpsie() return value.


Revision tags: thorpej-futex-base
# 1.61 01-Nov-2020 jmcneill

intr_ipi_send: assert that kcp is either NULL or contains exactly one CPU


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.62 07-Feb-2021 jmcneill

Use ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie()/cpsid() in
places where we don't care about the cpsie() return value.


Revision tags: thorpej-futex-base
# 1.61 01-Nov-2020 jmcneill

intr_ipi_send: assert that kcp is either NULL or contains exactly one CPU


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


Revision tags: thorpej-futex-base
# 1.61 01-Nov-2020 jmcneill

intr_ipi_send: assert that kcp is either NULL or contains exactly one CPU


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.60 26-Oct-2020 skrll

Improve a comment


# 1.59 26-Oct-2020 skrll

KNF


# 1.58 25-Oct-2020 skrll

KASSERT -> KASSERTMSG


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.57 27-Jul-2020 skrll

Trailing whitespace


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3
# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

branches: 1.52.2;
Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.56 01-Feb-2020 riastradh

KNF


# 1.55 01-Feb-2020 riastradh

Reduce some ifdefs.


# 1.54 01-Feb-2020 riastradh

pic_pending_zero is unnecessary; percpu_alloc already zeroes.


# 1.53 01-Feb-2020 riastradh

Switch arm pic allocation and initialization to percpu_create.


Revision tags: ad-namecache-base2 ad-namecache-base1 ad-namecache-base
# 1.52 24-Dec-2019 skrll

Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.52 24-Dec-2019 skrll

Update pic_add to allocate and return an irqbase if passed
PIC_IRQBASE_ALLOC.


# 1.51 24-Dec-2019 skrll

Make pic_sourcebase static


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.50 23-Dec-2019 jmcneill

Add reference counts to intr_mask/intr_unmask as calls can be nested, spotted by thorpej


# 1.49 23-Dec-2019 jmcneill

Implement acpi_md_intr_mask and acpi_md_intr_unmask


Revision tags: netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

branches: 1.42.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


Revision tags: isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.48 16-Nov-2018 jmcneill

Add intr_establish_xname support to arm and expose it to intrctl


# 1.47 13-Nov-2018 jmcneill

Fix intrctl for pics with non-0 irqbase


# 1.46 11-Nov-2018 jmcneill

Add support for intrctl(8).


Revision tags: pgoyette-compat-1020
# 1.45 12-Oct-2018 jmcneill

Implement intr_string(9)


Revision tags: pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728
# 1.44 15-Jul-2018 jmcneill

Add support for setting and getting interrupt affinity.


# 1.43 09-Jul-2018 ryo

fix false positive KASSERT.
the case that secondary processors failed to hatch, and not attached.

when "cpu1 at cpus0: disabled (unresponsive)"


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.42 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
# 1.41 12-Oct-2017 skrll

branches: 1.41.2;
Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.41 12-Oct-2017 skrll

Trailing whitespace


# 1.40 21-Sep-2017 skrll

spaces to TAB


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.


# 1.39 29-Aug-2017 nisimura

decouple pic_ipi_kpreempt() from DDB


# 1.38 25-Aug-2017 jmcneill

The assertion at the bottom of intr_ipi_send is invalid for UP configs; add
a text for arm_cpu_max == 1


Revision tags: nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base
# 1.37 01-Jun-2017 chs

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.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226
# 1.36 11-Oct-2015 mlelstv

unblock interrupts also when reusing a previously freed irq slot.


Revision tags: nick-nhusb-base-20150921 nick-nhusb-base-20150606
# 1.35 18-Apr-2015 skrll

Serialise work in pic_add.


# 1.34 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.33 14-Apr-2015 jmcneill

__HAVE_PREEEMPTION -> __HAVE_PREEMPTION


# 1.32 12-Apr-2015 matt

Don't send IPIs to ourselves if sending to everyone.


# 1.31 12-Apr-2015 matt

Don't need pic_ipi_sender anymore.


# 1.30 12-Apr-2015 matt

Use right kcpuset call.


# 1.29 11-Apr-2015 matt

Adapt pic to deal with the BCM2836 interrupts.
Move pic_pending_pics, pic_pending_ipls, and pic_blocked_irqs into a
structure and make then per-cpu. There is no global interrupt state anymore.


# 1.28 08-Apr-2015 matt

Add __HAVE_PIC_HAVE_PENDING_INTRS and define it if __HAVE_PIC_SET_PRIORITY
is undefined (also define in mvsoc_intr.h since their use of the latter is
peculiar). This new define controls whether the pending interrupt logic is
compiled. The GIC doesn't use pending interrupts since it uses the priority
level on the GIC to control delivery of interrupts, thus there can never
be a pending interrupt. The kernel shrinks about 4KB with the removal of
the pending interupt support,


# 1.27 08-Apr-2015 matt

Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable


Revision tags: nick-nhusb-base-20150406
# 1.26 29-Mar-2015 matt

Add aarch64 support (mostly remapping I32_bit and F32_bit onto aarch64 bits).


Revision tags: nick-nhusb-base
# 1.25 08-Nov-2014 skrll

branches: 1.25.2;
Include opt_multiprocessor.h


# 1.24 29-Oct-2014 skrll

In the MULTIPROCESSOR case mark all interrupt handlers not at IPL_VM as
mpsafe, so the kernel_lock is only taken at IPL_VM as per spl(9).


# 1.23 13-Oct-2014 skrll

Comment out a printf that was confusing entering ddb output.


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.22 19-May-2014 rmind

branches: 1.22.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base
# 1.21 13-Mar-2014 matt

branches: 1.21.2;
Support MPSAFE interrupts.


# 1.20 03-Mar-2014 matt

Add a mpsafe flag to the intrsource


# 1.19 28-Jan-2014 martin

Mark a diagnostic-only variable


# 1.18 08-Dec-2013 skrll

Mark rv as unused (for now)


# 1.17 07-Sep-2013 matt

Use KASSERTMSG


# 1.16 19-Aug-2013 skrll

Whitespace


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 matt-nb6-plus-nbase matt-nb6-plus-base
# 1.15 30-Oct-2012 msaitoh

branches: 1.15.2; 1.15.6;
Fix a bug that incorrect arg is passed to pic_block_irqs() on disestablish.
Fixes PR#45371 by Yuichiro Goto.


Revision tags: yamt-pagecache-base6
# 1.14 01-Sep-2012 matt

branches: 1.14.2;
Add #ifdef DIAGNOSTIC / #endif


# 1.13 01-Sep-2012 matt

Add PIC hooks for MP and for the ARM Generic Interrupt Controller.


# 1.12 20-Jul-2012 matt

Fix botched change to use right value for ipl. Thanks jak


# 1.11 14-Jul-2012 matt

Add hooks for __HAVE_PIC_SET_PRIORITY which allows updating of a hardware
(PIC) priority based on current IPL.


# 1.10 07-Jul-2012 skrll

Convert a KASSERT to a KASSERTMSG


# 1.9 04-Jul-2012 skrll

Add a KASSERT


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-0-5-RELEASE netbsd-6-0-4-RELEASE netbsd-6-0-3-RELEASE netbsd-6-0-2-RELEASE netbsd-6-0-1-RELEASE netbsd-6-0-RELEASE netbsd-6-0-RC2 netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase rmind-uvmplock-base jym-xensuspend-base
# 1.8 11-Mar-2011 bsh

branches: 1.8.4; 1.8.10; 1.8.12;
split arch/arm/pic/pic.c so that we can implement more efficient version of splfoo() while using pic framework.


Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
# 1.7 01-Feb-2011 jakllsch

Increment ci->ci_intr_depth for the duration of pic_do_pending_ints().
Fixes locking catastrophy commonly noticed with mvsata(4) on evbarm.


Revision tags: jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11
# 1.6 31-Aug-2010 kiyohara

branches: 1.6.2; 1.6.4;
Fix lost interrupt. (2/2)
+ It is likely to lose sight of interrupt when the interrupt of irq_base
that is smaller than the same at the level is generated if PIC_MAXSOURCES
is 33 or more.


# 1.5 31-Aug-2010 kiyohara

Fix lost interrupt. (1/2)
+ Change blocked_irqs that dispach if change pending_irqs in the loop.


Revision tags: uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 yamt-nfs-mp-base8 yamt-nfs-mp-base7 jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 nick-hppapmap-base2 nick-hppapmap-base mjf-devfs2-base
# 1.4 30-Dec-2008 matt

branches: 1.4.4; 1.4.6;
Use atomic ops to manipulate the bitmasks.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
# 1.3 28-Apr-2008 martin

branches: 1.3.8; 1.3.16;
Remove clause 3 and 4 from TNF licenses


# 1.2 27-Apr-2008 matt

Merge kernel changes in matt-armv6 to HEAD.


Revision tags: yamt-pf42-baseX yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base bouyer-xeni386-merge1 vmlocking2-base3 bouyer-xeni386-nbase yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 bouyer-xeni386-base yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase reinoud-bufcleanup-base vmlocking2-base1 matt-armv6-base matt-armv6-nbase jmcneill-base mjf-devfs-base hpcarm-cleanup-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 vmlocking-base yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base
# 1.1 29-Aug-2007 matt

branches: 1.1.2; 1.1.20; 1.1.22; 1.1.24;
file pic.c was initially added on branch matt-armv6.