Liste des Groupes | Revenir à c arch |
mitchalsup@aol.com (MitchAlsup1) writes:Scott Lurndal wrote:
>
>
Question:: Down below you talk of the various interrupt control-
lers routing an interrupt <finally> to a core. What happens if the core has changed its priority by the time the interrupt signal arrives, but before it can change the state of the tables in the
interrupt controller that routed said interrupt here ?
Speaking for the ARM64 systems that I'm most recently
familiar with, the concept of priority is associated with
an interrupt (up to 8-bits worth of priority - an implementation
of the GIC is allowed to support as few as three bits).
The interrupt controller is distributed logic; there is a
component called the 'distributor' and another component called
the 'redistributor'. The former is global to the system and
the latter is a per-CPU component. The distributor also contains
a subsystem called the interrupt translation subsystem (ITS) which
supports interrupt virtualization.
The redistributor, being part of the core, handles the deliveryThank you for the wonderful ASCII art::
of an interrupt to the core (specifically asserting either the FIQ
or IRQ signals that cause entry to the IRQ or FIQ exception
handlers). The redistributor tracks the current running priority
(which is directly associated with the priority of the current
active interrupt, when not processing an interrupt, the current
running priority is called the IDLE priority and doesn't block
delivery of any interrupts). The redistributor communicates changes to
the RPR to the distributor, which will hold any interrupt that
is not eligable for delivery (for any reason, including lack
of priority). There is no way for software to change the
RPR - it only tracks the priority of the currently executing
interrupt.
+-------------------------+
| PCI Device |
+-------------------------+
| MSI-X message (address: GITS_TRANSLATER control
register)
| (payload: Interrupt number (0 to N))
v (sideband: streamid)
+-------------------------+
| Interrupt Translation | (DRAM tables: Device, Collection)
| Service | Lookup streamid in device table.
| | DT refers to Interrupt Translation Table
| | Translate inbound payload based on ITT to
an LPI
| | Collection table identifies target core
+-------------------------+
| Internal message from ITS to redistributor for target
v
+-------------------------+
| Redistributor | (DRAM table: LPI properties)
| | Lookup LPI properties, contains priority
and enable bit
| | If not enabled or priority too low,
| | store in LPI pending table (also DRAM)
[*]
| | If enabled, unmasked at the CPU interface
| | and priority higher than RPR, assert FIQ
| | or IRQ signals to core.
+-------------------------+
| IRQ/FIQ signals
v
+-------------------------+
| Core | Check PSTATE IRQ and FIQ mask bits
| | IRQ/FIQ can be routed to EL1, EL2 or EL3
| | by per-core control bits. Update
| | core state appropriately and enter ISR
+-------------------------+
[*] as core RPR and signal masks change, the ITS re-evaluates pendingMy concept looks like:: Based on a new understanding of where things want to be due to CXL:: I am assuming that the Last Level Cache (LLC) is placed side by side
[**] LPI properties and pending bits are generally cached in the
redistributor for performance.
+-------------------------+There is no IRQ-like signal to the core, it is all done by a SNARF of
| PCI Device |
+-------------------------+
| MSI-X message (address: GITS_TRANSLATER control
register)
| (payload: Interrupt number (0 to N))
v (sideband: streamid)
+-------------------------+
| HostBridge Translation | IOMMU tables: B:D,F->Originating Context
| Service | Originating Context supplies Root pointers
| | and interrupt table address
| In LLC | HostBridge DRAM accesses are performed
through LLC
| | HostBridge MMI/O accesses routed out into
Chip
+-------------------------+
| MMI/O message from HTS to virtual context stack DRAM
address
|
| If core interrupt table matches MMI/O address ? SNARF
message
| the message contains pending priority interrupt
bits.
v
+-------------------------+
| Core | If there is a interrupt at higher priority
| | than I am currently running ? begin
interrupt
| | negotiation (core continues to run
instructions)
| | If negotiation is successful ? Claim
interrupt
| | and context switch to Interrupt
Dispatcher.
+-------------------------+
>
For what reason are there multiple addresses ?
A system may have multiple interrupt controllers. In the
case of the ARM64 systems, there may be a case where some
interrupts should be considered level sensitive, in which
case they must use SPI type interrupts which have a different
target register for the MSI-X address field when compared with
LPI type interrupts.
Recall that the PCI spec must accomodate a wide range of systemWould you consider that "multiple interrupt tables all being
implementations (including Z-series).
Les messages affichés proviennent d'usenet.