kernel: 0.888 permissions: 0.873 graphic: 0.853 device: 0.838 boot: 0.835 debug: 0.826 performance: 0.817 vnc: 0.813 ppc: 0.787 files: 0.784 peripherals: 0.777 architecture: 0.769 socket: 0.768 network: 0.745 risc-v: 0.735 mistranslation: 0.724 semantic: 0.723 hypervisor: 0.705 PID: 0.702 register: 0.686 KVM: 0.660 i386: 0.652 arm: 0.638 x86: 0.625 VMM: 0.614 assembly: 0.586 TCG: 0.578 virtual: 0.546 user-level: 0.494 Inconsistent `Tn_INT_ROUTE_CAP` and `Tn_INT_ROUTE_CNF` in HPET Description of problem: In the [HPET specification](http://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/software-developers-hpet-spec-1-0a.pdf) it says: > Timer n Interrupt Routing Capability: (where n is the timer number: 00 to 31) This 32-bit read-only field indicates to which interrupts in the I/O (x) APIC this timer’s interrupt can be routed. This is used in conjunction with the Tn_INT_ROUTE_CNF field. > > Each bit in this field corresponds to a particular interrupt. For example, if this timer’s interrupt can be mapped to interrupts 16, 18, 20, 22, or 24, then bits 16, 18, 20, 22, and 24 in this field will be set to 1. All other bits will be 0. > Timer n Interrupt Route: (where n is the timer number: 00 to 31). This 5-bit read/write field indicates the routing for the interrupt to the I/O APIC. A maximum value of 32 interrupts are supported. Default is 00h Software writes to this field to select which interrupt in the I/O (x) will be used for this timer’s interrupt. If the value is not supported by this prarticular timer, then the value read back will not match what is written. The software must only write valid values. In QEMU, the HPET timers indicate that the only I/O APIC IRQ they support is IRQ 2 (based only bit 2 being 1). But actually the HPET interrupt works even if I set it to IRQ 20, which is inconsistent with the `Tn_INT_ROUTE_CAP` that the timer shows. The HPET should show that it works with more than just IRQ 2. Steps to reproduce: 1. Git checkout https://github.com/ChocolateLoverRaj/code-runner/tree/fd368f53c1c99885a3b149a59f2959f383f42859 2. `nix develop` 3. `cargo r -- -s -serial mon:stdio --no-reboot -nographic -d int` Additional information: