
2:544
Volume 2, Part 2: Interruptions and Serialization
A typical lightweight interruption handler can operate completely out of register bank 0.
If the bank 0 registers provide sufficient storage for the handler, none of the interrupted
context’s register state need be saved to memory, and the handler does not need to
use stacked registers. Assuming no stacked registers are needed, the lightweight
interruption handler can operate with an incomplete current register stack frame,
obviating the need for
cover
and
alloc
instructions in the handler. This also allows the
TLB related handlers to service TLB misses that result from mandatory RSE loads to the
current frame.
3.4.2
Heavyweight Interruptions
Heavyweight interruption handlers are allocated only 256 bytes (48 instructions) per
handler in the IVT. This stub provides enough space to save minimal processor state,
re-enable interruption collection and external interrupts, and branch to another routine
to handle the interruption. Unlike a lightweight interruption handlers described above,
heavyweight interruption handlers use general register bank 0 only until they can
establish a safe memory context for spilling the interrupted context’s state. This allows
heavyweight handlers to be interruptible and to take exceptions.
A heavyweight handler stub (i.e. the portion of the handler that is located in the IVT)
should determine exactly which type of interruption has occurred based on its offset in
the IVT and the contents of the ISR control register. It can then branch out of the IVT to
the actual interruption handler. For some heavyweight interruptions (e.g. Data Debug
fault), these handlers are typically written in a high-level programming language; for
others (e.g. emulation handlers) the interruption can be handled efficiently in Itanium
architecture-based assembly code.
The sequence given below illustrates the steps that an Itanium architecture-based
heavyweight handler needs to perform to save the interrupted context’s state to
memory and to create an interruptible execution environment. These steps assume
that the low-level kernel code, the kernel backing store, and the kernel memory stack
are pinned in the TLB (using a translation register), so that no TLB misses arise from
referencing those memory pages. The ordering of the steps below is approximate and
other operating system strategies are possible.
1. Copy the interruption resources (IIP, IPSR, IIPA, ISR, IFA, IIB0-1) into bank 0 of
the banked registers. To avoid conflicts with processor firmware, use registers
GR24-31 for this purpose. Both register bank 0 and the interruption control
registers are accessible, since, as described in
, the processor
hardware, upon an interruption always switches to register bank 0, and clears
PSR.ic and PSR.i.
2. Preserve the interrupted the predicate registers into bank 0 of the banked
registers.
3. Determine whether interruption occurred in the operating system kernel or in
user space by inspecting both IPSR.cpl and the memory stack pointer (GR12).
a. If IPSR.cpl is zero and the interrupted context was already executing on a
kernel stack, then no memory stack switch is required.
b. Otherwise, software needs to switch to a kernel memory stack by preserving
the interrupted memory stack pointer to a banked register in bank 0, and
setting up a new kernel memory stack pointer in GR12.
Содержание ITANIUM ARCHITECTURE - SOFTWARE DEVELOPERS VOLUME 3 REV 2.3
Страница 1: ......
Страница 11: ...x Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 12: ...1 1 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part I Application Architecture Guide ...
Страница 13: ...1 2 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 33: ...1 22 Volume 1 Part 1 Introduction to the Intel Itanium Architecture ...
Страница 57: ...1 46 Volume 1 Part 1 Execution Environment ...
Страница 147: ...1 136 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 149: ...1 138 Volume 1 Part 2 About the Optimization Guide ...
Страница 191: ...1 180 Volume 1 Part 2 Predication Control Flow and Instruction Stream ...
Страница 230: ......
Страница 248: ...236 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 249: ...2 1 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part I System Architecture Guide ...
Страница 250: ...2 2 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 264: ...2 16 Volume 2 Part 1 Intel Itanium System Environment ...
Страница 380: ...2 132 Volume 2 Part 1 Interruptions ...
Страница 398: ...2 150 Volume 2 Part 1 Register Stack Engine ...
Страница 486: ...2 238 Volume 2 Part 1 IA 32 Interruption Vector Descriptions ...
Страница 749: ...2 501 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part II System Programmer s Guide ...
Страница 750: ...2 502 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 754: ...2 506 Volume 2 Part 2 About the System Programmer s Guide ...
Страница 796: ...2 548 Volume 2 Part 2 Interruptions and Serialization ...
Страница 808: ...2 560 Volume 2 Part 2 Context Management ...
Страница 842: ...2 594 Volume 2 Part 2 Floating point System Software ...
Страница 850: ...2 602 Volume 2 Part 2 IA 32 Application Support ...
Страница 862: ...2 614 Volume 2 Part 2 External Interrupt Architecture ...
Страница 870: ...2 622 Volume 2 Part 2 Performance Monitoring Support ...
Страница 891: ......
Страница 941: ...3 42 Volume 3 Instruction Reference cmp illegal_operation_fault PR p1 0 PR p2 0 Interruptions Illegal Operation fault ...
Страница 1099: ...3 200 Volume 3 Instruction Reference padd Interruptions Illegal Operation fault ...
Страница 1191: ...3 292 Volume 3 Pseudo Code Functions Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1295: ...3 396 Volume 3 Resource and Dependency Semantics ...
Страница 1296: ......
Страница 1302: ...402 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1494: ...4 192 Volume 4 Base IA 32 Instruction Reference FWAIT Wait See entry for WAIT ...
Страница 1564: ...4 262 Volume 4 Base IA 32 Instruction Reference LES Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1565: ...Volume 4 Base IA 32 Instruction Reference 4 263 LFS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1568: ...4 266 Volume 4 Base IA 32 Instruction Reference LGS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1583: ...Volume 4 Base IA 32 Instruction Reference 4 281 LSS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1647: ...Volume 4 Base IA 32 Instruction Reference 4 345 ROL ROR Rotate See entry for RCL RCR ROL ROR ...
Страница 1663: ...Volume 4 Base IA 32 Instruction Reference 4 361 SHL SHR Shift Instructions See entry for SAL SAR SHL SHR ...
Страница 1668: ...4 366 Volume 4 Base IA 32 Instruction Reference SIDT Store Interrupt Descriptor Table Register See entry for SGDT SIDT ...
Страница 1884: ...4 582 Volume 4 IA 32 SSE Instruction Reference ...
Страница 1885: ...Index Intel Itanium Architecture Software Developer s Manual Rev 2 3 Index ...
Страница 1886: ...Index Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1898: ...INDEX Index 12 Index for Volumes 1 2 3 and 4 ...