Add missing IDT entry #HV (vector 28)
Currently the InterruptDescriptorTable is missing entry with vector number
28, #HV. More information at AMD's APM Volume 2, subsection 8.2.21. See
issue
@@ -340,8 +340,25 @@ pub struct InterruptDescriptorTable {
/// vector nr. 20
pub virtualization: Entry<HandlerFunc>,
- /// vector nr. 21-28
- reserved_2: [Entry<HandlerFunc>; 8],
+ /// vector nr. 21-27
+ reserved_2: [Entry<HandlerFunc>; 7],
+
+ /// The Hypervisor Injection Exception (`#HV`) is injected by a hypervisor
+ /// as a doorbell to inform an `SEV-SNP` enabled guest running with the
+ /// `Restricted Injection` feature of events to be processed.
+ ///
+ /// `SEV-SNP` stands for the _"Secure Nested Paging"_ feature of the _"AMD
+ /// Secure Encrypted Virtualization"_ technology. The `Restricted
+ /// Injection` feature disables all hypervisor-based interrupt queuing
+ /// and event injection of all vectors except #HV.
+ ///
+ /// The `#HV` exception is a benign exception and can only be injected as
+ /// an exception and without an error code. `SEV-SNP` enabled guests are
+ /// expected to communicate with the hypervisor about events via a
+ /// software-managed para-virtualization interface.
+ ///
+ /// The vector number of the ``#HV`` exception is 28.
+ pub hv_injection_exception: Entry<HandlerFunc>,
/// The VMM Communication Exception (`#VC`) is always generated by hardware when an `SEV-ES`
/// enabled guest is running and an `NAE` event occurs.
@@ -436,7 +453,8 @@ impl InterruptDescriptorTable {
machine_check: Entry::missing(),
simd_floating_point: Entry::missing(),
virtualization: Entry::missing(),
- reserved_2: [Entry::missing(); 8],
+ reserved_2: [Entry::missing(); 7],
+ hv_injection_exception: Entry::missing(),
vmm_communication_exception: Entry::missing(),
security_exception: Entry::missing(),
reserved_3: Entry::missing(),
