[PowerPC] XIVE dispatch tweaks

* Only read the DPCPU pointer once per xive_dispatch call.
  * Optimize HE decoding for the common cases.

Reported by:	jhibbits (in irc)
Reviewed by:	jhibbits
Sponsored by:	Tag1 Consulting, Inc.
Differential Revision:	https://reviews.freebsd.org/D25545
This commit is contained in:
Brandon Bergren 2020-07-06 15:15:37 +00:00
parent b256d25c50
commit 60185d8965
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=362965

View File

@ -507,6 +507,7 @@ xive_dispatch(device_t dev, struct trapframe *tf)
sc = device_get_softc(dev);
xive_cpud = DPCPU_PTR(xive_cpu_data);
for (;;) {
ack = xive_read_2(sc, XIVE_TM_SPC_ACK);
cppr = (ack & 0xff);
@ -515,19 +516,17 @@ xive_dispatch(device_t dev, struct trapframe *tf)
if (he == TM_QW3_NSR_HE_NONE)
break;
switch (he) {
case TM_QW3_NSR_HE_NONE:
goto end;
case TM_QW3_NSR_HE_POOL:
case TM_QW3_NSR_HE_LSI:
else if (__predict_false(he != TM_QW3_NSR_HE_PHYS)) {
/*
* We don't support TM_QW3_NSR_HE_POOL or
* TM_QW3_NSR_HE_LSI interrupts.
*/
device_printf(dev,
"Unexpected interrupt he type: %d\n", he);
goto end;
case TM_QW3_NSR_HE_PHYS:
break;
}
xive_cpud = DPCPU_PTR(xive_cpu_data);
xive_write_1(sc, XIVE_TM_CPPR, cppr);
for (;;) {