Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package limine for openSUSE:Factory checked in at 2026-03-04 21:08:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/limine (Old) and /work/SRC/openSUSE:Factory/.limine.new.561 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "limine" Wed Mar 4 21:08:48 2026 rev:35 rq:1336250 version:10.8.2 Changes: -------- --- /work/SRC/openSUSE:Factory/limine/limine.changes 2026-02-24 15:39:29.708645514 +0100 +++ /work/SRC/openSUSE:Factory/.limine.new.561/limine.changes 2026-03-04 21:09:43.607628566 +0100 @@ -1,0 +2,10 @@ +Wed Mar 4 00:12:32 UTC 2026 - Marvin Friedrich <[email protected]> + +- Update to 10.8.2: + * Fix VT-d disable order to TE, IRE, QIE. + * Fix VT-d polling loop read order and remove polling timeout. + * SMP: Add xAPIC ICR delivery status checks to INIT-SIPI-SIPI sequence. + * Amend certain APIC-related issues of Limine boot protocol and + implement the corrected behaviour. + +------------------------------------------------------------------- Old: ---- limine-10.8.0.tar.gz New: ---- limine-10.8.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ limine.spec ++++++ --- /var/tmp/diff_new_pack.SjIZJg/_old 2026-03-04 21:09:44.367659978 +0100 +++ /var/tmp/diff_new_pack.SjIZJg/_new 2026-03-04 21:09:44.367659978 +0100 @@ -15,7 +15,7 @@ # Name: limine -Version: 10.8.0 +Version: 10.8.2 Release: 0 Summary: Modern, advanced, portable, multiprotocol bootloader and boot manager License: BSD-2-Clause ++++++ limine-10.8.0.tar.gz -> limine-10.8.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.8.0/ChangeLog new/limine-10.8.2/ChangeLog --- old/limine-10.8.0/ChangeLog 2026-02-22 18:50:30.000000000 +0100 +++ new/limine-10.8.2/ChangeLog 2026-02-26 01:26:03.000000000 +0100 @@ -1,3 +1,26 @@ +2026-02-26 Mintsuki <[email protected]> + + *** Release 10.8.2 *** + + Noteworthy changes compared to the previous release, 10.8.1: + + Bug fixes: + - Revert broken/pointless legacy PIC reinitialisation logic on flush + that accidentally made it into 10.8.1. + +2026-02-26 Mintsuki <[email protected]> + + *** Release 10.8.1 *** + + Noteworthy changes compared to the previous release, 10.8.0: + + Bug fixes: + - Fix VT-d disable order to TE, IRE, QIE. + - Fix VT-d polling loop read order and remove polling timeout. + - SMP: Add xAPIC ICR delivery status checks to INIT-SIPI-SIPI sequence. + - Amend certain APIC-related issues of Limine boot protocol and + implement the corrected behaviour. + 2026-02-22 Mintsuki <[email protected]> *** Release 10.8.0 *** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.8.0/bootstrap new/limine-10.8.2/bootstrap --- old/limine-10.8.0/bootstrap 2026-02-22 18:50:30.000000000 +0100 +++ new/limine-10.8.2/bootstrap 2026-02-26 01:26:03.000000000 +0100 @@ -85,7 +85,7 @@ clone_repo_commit \ https://codeberg.org/Limine/limine-protocol.git \ limine-protocol \ - 068b6481557db836e41bf644382367f8dee76d21 + fd3197997ec608484a2eb4e3d2a8591378087e7d clone_repo_commit \ https://codeberg.org/PicoEFI/PicoEFI.git \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.8.0/common/sys/cpu.h new/limine-10.8.2/common/sys/cpu.h --- old/limine-10.8.0/common/sys/cpu.h 2026-02-22 18:50:30.000000000 +0100 +++ new/limine-10.8.2/common/sys/cpu.h 2026-02-26 01:26:03.000000000 +0100 @@ -156,7 +156,7 @@ static inline uint64_t rdtsc(void) { uint32_t edx, eax; - asm volatile ("rdtsc" : "=a" (eax), "=d" (edx)); + asm volatile ("rdtsc" : "=a" (eax), "=d" (edx) :: "memory"); return ((uint64_t)edx << 32) | eax; } @@ -407,7 +407,11 @@ static inline uint64_t rdtsc_usec(void) { uint64_t exec_ticks = rdtsc(); - return tsc_freq != 0 ? 1000000ULL * exec_ticks / tsc_freq : 0; + if (tsc_freq == 0) { + return 0; + } + return exec_ticks / tsc_freq * 1000000 + + exec_ticks % tsc_freq * 1000000 / tsc_freq; } static inline void stall(uint64_t us) { @@ -420,7 +424,7 @@ return; } #endif - uint64_t ticks = tsc_freq * us / 1000000; + uint64_t ticks = (tsc_freq * us + 999999) / 1000000; uint64_t next_stop = rdtsc() + ticks; while (rdtsc() < next_stop); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.8.0/common/sys/iommu.c new/limine-10.8.2/common/sys/iommu.c --- old/limine-10.8.0/common/sys/iommu.c 2026-02-22 18:50:30.000000000 +0100 +++ new/limine-10.8.2/common/sys/iommu.c 2026-02-26 01:26:03.000000000 +0100 @@ -27,37 +27,26 @@ // All other bits (TE, EAFL, QIE, IRE, CFI) are persistent toggles. #define VTD_GCMD_ONESHOT_MASK 0x96FFFFFF -#define VTD_TIMEOUT 10000000 - static void vtd_disable_unit(uintptr_t reg_base) { uint32_t sts = mmind(reg_base + VTD_GSTS_REG); - // Disable interrupt remapping first (IRE depends on QIE, so reverse - // the enable order: disable IRE before QIE) - if (sts & VTD_GSTS_IRES) { - uint32_t gcmd = (sts & VTD_GCMD_ONESHOT_MASK) & ~VTD_GSTS_IRES; + // Disable DMA translation first (most urgent: prevents stale lookups) + if (sts & VTD_GSTS_TES) { + uint32_t gcmd = (sts & VTD_GCMD_ONESHOT_MASK) & ~VTD_GSTS_TES; mmoutd(reg_base + VTD_GCMD_REG, gcmd); - for (int i = 0; i < VTD_TIMEOUT; i++) { + while ((sts = mmind(reg_base + VTD_GSTS_REG)) & VTD_GSTS_TES) { asm volatile ("pause"); - sts = mmind(reg_base + VTD_GSTS_REG); - if (!(sts & VTD_GSTS_IRES)) { - break; - } } } - // Disable DMA translation - if (sts & VTD_GSTS_TES) { - uint32_t gcmd = (sts & VTD_GCMD_ONESHOT_MASK) & ~VTD_GSTS_TES; + // Disable interrupt remapping (depends on QIE, so disable before QIE) + if (sts & VTD_GSTS_IRES) { + uint32_t gcmd = (sts & VTD_GCMD_ONESHOT_MASK) & ~VTD_GSTS_IRES; mmoutd(reg_base + VTD_GCMD_REG, gcmd); - for (int i = 0; i < VTD_TIMEOUT; i++) { + while ((sts = mmind(reg_base + VTD_GSTS_REG)) & VTD_GSTS_IRES) { asm volatile ("pause"); - sts = mmind(reg_base + VTD_GSTS_REG); - if (!(sts & VTD_GSTS_TES)) { - break; - } } } @@ -66,12 +55,8 @@ uint32_t gcmd = (sts & VTD_GCMD_ONESHOT_MASK) & ~VTD_GSTS_QIES; mmoutd(reg_base + VTD_GCMD_REG, gcmd); - for (int i = 0; i < VTD_TIMEOUT; i++) { + while ((sts = mmind(reg_base + VTD_GSTS_REG)) & VTD_GSTS_QIES) { asm volatile ("pause"); - sts = mmind(reg_base + VTD_GSTS_REG); - if (!(sts & VTD_GSTS_QIES)) { - break; - } } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.8.0/common/sys/lapic.c new/limine-10.8.2/common/sys/lapic.c --- old/limine-10.8.0/common/sys/lapic.c 2026-02-22 18:50:30.000000000 +0100 +++ new/limine-10.8.2/common/sys/lapic.c 2026-02-26 01:26:03.000000000 +0100 @@ -20,8 +20,8 @@ #define LAPIC_REG_TPR 0x080 #define LAPIC_REG_VERSION 0x030 -static uint32_t pending_lint0 = 0x00010000; // masked -static uint32_t pending_lint1 = 0x00010000; // masked +static uint32_t pending_lint0 = UINT32_MAX; // no override +static uint32_t pending_lint1 = UINT32_MAX; // no override static uint32_t lapic_madt_nmi_flags_to_lvt(uint16_t flags) { uint32_t lvt = 0x10400; // masked + NMI delivery mode @@ -43,14 +43,9 @@ return lvt; } -void lapic_prep_lint(struct madt *madt, uint32_t acpi_uid, bool is_bsp, bool x2apic) { - // Set defaults - if (is_bsp) { - pending_lint0 = 0x00010700; // ExtINT delivery mode, masked - } else { - pending_lint0 = 0x00010000; // masked - } - pending_lint1 = 0x00010000; // masked +void lapic_prep_lint(struct madt *madt, uint32_t acpi_uid, bool x2apic) { + pending_lint0 = UINT32_MAX; // no override + pending_lint1 = UINT32_MAX; // no override // Walk MADT entries looking for NMI entries for (uint8_t *madt_ptr = (uint8_t *)madt->madt_entries_begin; @@ -109,6 +104,18 @@ } } +static bool lvt_should_mask(uint32_t lvt) { + switch ((lvt >> 8) & 7) { + case 0b000: // Fixed + case 0b001: // Lowest Priority + case 0b100: // NMI + case 0b111: // ExtINT + return true; + default: // SMI, INIT, Reserved + return false; + } +} + void lapic_configure_handoff_state(void) { bool is_x2 = !!(rdmsr(0x1b) & (1 << 10)); @@ -119,38 +126,82 @@ max_lvt = (lapic_read(LAPIC_REG_VERSION) >> 16) & 0xff; } + uint32_t lvt; + if (is_x2) { x2apic_write(LAPIC_REG_SVR, 0x1ff); x2apic_write(LAPIC_REG_TPR, 0); if (max_lvt >= 6) { - x2apic_write(LAPIC_REG_LVT_CMCI, 0x00010000); + lvt = x2apic_read(LAPIC_REG_LVT_CMCI); + if (lvt_should_mask(lvt)) { + x2apic_write(LAPIC_REG_LVT_CMCI, lvt | (1 << 16)); + } + } + lvt = x2apic_read(LAPIC_REG_LVT_TIMER); + if (lvt_should_mask(lvt)) { + x2apic_write(LAPIC_REG_LVT_TIMER, lvt | (1 << 16)); } - x2apic_write(LAPIC_REG_LVT_TIMER, 0x00010000); if (max_lvt >= 5) { - x2apic_write(LAPIC_REG_LVT_THERMAL, 0x00010000); + lvt = x2apic_read(LAPIC_REG_LVT_THERMAL); + if (lvt_should_mask(lvt)) { + x2apic_write(LAPIC_REG_LVT_THERMAL, lvt | (1 << 16)); + } } if (max_lvt >= 4) { - x2apic_write(LAPIC_REG_LVT_PMC, 0x00010000); + lvt = x2apic_read(LAPIC_REG_LVT_PMC); + if (lvt_should_mask(lvt)) { + x2apic_write(LAPIC_REG_LVT_PMC, lvt | (1 << 16)); + } + } + lvt = x2apic_read(LAPIC_REG_LVT_ERROR); + if (lvt_should_mask(lvt)) { + x2apic_write(LAPIC_REG_LVT_ERROR, lvt | (1 << 16)); + } + lvt = x2apic_read(LAPIC_REG_LVT_LINT0); + if (lvt_should_mask(lvt)) { + x2apic_write(LAPIC_REG_LVT_LINT0, pending_lint0 != UINT32_MAX ? pending_lint0 : lvt | (1 << 16)); + } + lvt = x2apic_read(LAPIC_REG_LVT_LINT1); + if (lvt_should_mask(lvt)) { + x2apic_write(LAPIC_REG_LVT_LINT1, pending_lint1 != UINT32_MAX ? pending_lint1 : lvt | (1 << 16)); } - x2apic_write(LAPIC_REG_LVT_ERROR, 0x00010000); - x2apic_write(LAPIC_REG_LVT_LINT0, pending_lint0); - x2apic_write(LAPIC_REG_LVT_LINT1, pending_lint1); } else { lapic_write(LAPIC_REG_SVR, 0x1ff); lapic_write(LAPIC_REG_TPR, 0); if (max_lvt >= 6) { - lapic_write(LAPIC_REG_LVT_CMCI, 0x00010000); + lvt = lapic_read(LAPIC_REG_LVT_CMCI); + if (lvt_should_mask(lvt)) { + lapic_write(LAPIC_REG_LVT_CMCI, lvt | (1 << 16)); + } + } + lvt = lapic_read(LAPIC_REG_LVT_TIMER); + if (lvt_should_mask(lvt)) { + lapic_write(LAPIC_REG_LVT_TIMER, lvt | (1 << 16)); } - lapic_write(LAPIC_REG_LVT_TIMER, 0x00010000); if (max_lvt >= 5) { - lapic_write(LAPIC_REG_LVT_THERMAL, 0x00010000); + lvt = lapic_read(LAPIC_REG_LVT_THERMAL); + if (lvt_should_mask(lvt)) { + lapic_write(LAPIC_REG_LVT_THERMAL, lvt | (1 << 16)); + } } if (max_lvt >= 4) { - lapic_write(LAPIC_REG_LVT_PMC, 0x00010000); + lvt = lapic_read(LAPIC_REG_LVT_PMC); + if (lvt_should_mask(lvt)) { + lapic_write(LAPIC_REG_LVT_PMC, lvt | (1 << 16)); + } + } + lvt = lapic_read(LAPIC_REG_LVT_ERROR); + if (lvt_should_mask(lvt)) { + lapic_write(LAPIC_REG_LVT_ERROR, lvt | (1 << 16)); + } + lvt = lapic_read(LAPIC_REG_LVT_LINT0); + if (lvt_should_mask(lvt)) { + lapic_write(LAPIC_REG_LVT_LINT0, pending_lint0 != UINT32_MAX ? pending_lint0 : lvt | (1 << 16)); + } + lvt = lapic_read(LAPIC_REG_LVT_LINT1); + if (lvt_should_mask(lvt)) { + lapic_write(LAPIC_REG_LVT_LINT1, pending_lint1 != UINT32_MAX ? pending_lint1 : lvt | (1 << 16)); } - lapic_write(LAPIC_REG_LVT_ERROR, 0x00010000); - lapic_write(LAPIC_REG_LVT_LINT0, pending_lint0); - lapic_write(LAPIC_REG_LVT_LINT1, pending_lint1); } } @@ -209,7 +260,7 @@ } found: - lapic_prep_lint(madt, bsp_acpi_uid, true, is_x2); + lapic_prep_lint(madt, bsp_acpi_uid, is_x2); lapic_configure_handoff_state(); } @@ -242,6 +293,15 @@ mmoutd(lapic_mmio_base + reg, data); } +void lapic_icr_wait(void) { + for (int i = 0; i < 1000000; i++) { + if (!(lapic_read(LAPIC_REG_ICR0) & (1 << 12))) { + return; + } + asm volatile ("pause"); + } +} + bool x2apic_check(void) { uint32_t eax, ebx, ecx, edx; if (!cpuid(1, 0, &eax, &ebx, &ecx, &edx)) @@ -415,8 +475,7 @@ continue; } - io_apic_write(i, ioredtbl, (1 << 16)); // mask - io_apic_write(i, ioredtbl + 1, 0); + io_apic_write(i, ioredtbl, io_apic_read(i, ioredtbl) | (1 << 16)); } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.8.0/common/sys/lapic.h new/limine-10.8.2/common/sys/lapic.h --- old/limine-10.8.0/common/sys/lapic.h 2026-02-22 18:50:30.000000000 +0100 +++ new/limine-10.8.2/common/sys/lapic.h 2026-02-26 01:26:03.000000000 +0100 @@ -17,6 +17,7 @@ void lapic_eoi(void); uint32_t lapic_read(uint32_t reg); void lapic_write(uint32_t reg, uint32_t data); +void lapic_icr_wait(void); bool x2apic_check(void); bool x2apic_enable(void); @@ -25,7 +26,7 @@ void x2apic_write(uint32_t reg, uint64_t data); void lapic_configure_bsp(void); -void lapic_prep_lint(struct madt *madt, uint32_t acpi_uid, bool is_bsp, bool x2apic); +void lapic_prep_lint(struct madt *madt, uint32_t acpi_uid, bool x2apic); void lapic_configure_handoff_state(void); void init_io_apics(void); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.8.0/common/sys/smp.c new/limine-10.8.2/common/sys/smp.c --- old/limine-10.8.0/common/sys/smp.c 2026-02-22 18:50:30.000000000 +0100 +++ new/limine-10.8.2/common/sys/smp.c 2026-02-26 01:26:03.000000000 +0100 @@ -84,6 +84,7 @@ if (x2apic) { x2apic_write(LAPIC_REG_ICR0, ((uint64_t)lapic_id << 32) | 0x4500); } else { + lapic_icr_wait(); lapic_write(LAPIC_REG_ICR1, lapic_id << 24); lapic_write(LAPIC_REG_ICR0, 0x4500); } @@ -95,10 +96,17 @@ x2apic_write(LAPIC_REG_ICR0, ((uint64_t)lapic_id << 32) | ((size_t)trampoline / 4096) | 0x4600); } else { + lapic_icr_wait(); lapic_write(LAPIC_REG_ICR1, lapic_id << 24); lapic_write(LAPIC_REG_ICR0, ((size_t)trampoline / 4096) | 0x4600); } - stall(200); + if (j == 0) { + stall(200); + } + } + + if (!x2apic) { + lapic_icr_wait(); } for (int i = 0; i < 100; i++) { @@ -244,7 +252,7 @@ // Set up per-AP LINT values before starting if (smp_configure_apic) { - lapic_prep_lint(madt, lapic->acpi_processor_uid, false, x2apic); + lapic_prep_lint(madt, lapic->acpi_processor_uid, x2apic); } // Try to start the AP @@ -289,7 +297,7 @@ // Set up per-AP LINT values before starting if (smp_configure_apic) { - lapic_prep_lint(madt, x2lapic->acpi_processor_uid, false, true); + lapic_prep_lint(madt, x2lapic->acpi_processor_uid, true); } // Try to start the AP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.8.0/configure new/limine-10.8.2/configure --- old/limine-10.8.0/configure 2026-02-22 18:50:34.000000000 +0100 +++ new/limine-10.8.2/configure 2026-02-26 01:26:07.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for Limine 10.8.0. +# Generated by GNU Autoconf 2.72 for Limine 10.8.2. # # Report bugs to <https://codeberg.org/Limine/Limine/issues>. # @@ -604,8 +604,8 @@ # Identity of this package. PACKAGE_NAME='Limine' PACKAGE_TARNAME='limine' -PACKAGE_VERSION='10.8.0' -PACKAGE_STRING='Limine 10.8.0' +PACKAGE_VERSION='10.8.2' +PACKAGE_STRING='Limine 10.8.2' PACKAGE_BUGREPORT='https://codeberg.org/Limine/Limine/issues' PACKAGE_URL='https://limine-bootloader.org/' @@ -1324,7 +1324,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures Limine 10.8.0 to adapt to many kinds of systems. +'configure' configures Limine 10.8.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1390,7 +1390,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Limine 10.8.0:";; + short | recursive ) echo "Configuration of Limine 10.8.2:";; esac cat <<\_ACEOF @@ -1509,7 +1509,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Limine configure 10.8.0 +Limine configure 10.8.2 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. @@ -1621,7 +1621,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Limine $as_me 10.8.0, which was +It was created by Limine $as_me 10.8.2, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -6334,7 +6334,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Limine $as_me 10.8.0, which was +This file was extended by Limine $as_me 10.8.2, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -6390,7 +6390,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -Limine config.status 10.8.0 +Limine config.status 10.8.2 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.8.0/limine-protocol/PROTOCOL.md new/limine-10.8.2/limine-protocol/PROTOCOL.md --- old/limine-10.8.0/limine-protocol/PROTOCOL.md 2026-02-22 18:50:30.000000000 +0100 +++ new/limine-10.8.2/limine-protocol/PROTOCOL.md 2026-02-26 01:26:03.000000000 +0100 @@ -474,29 +474,36 @@ The A20 gate is opened. -Legacy PIC IRQs (if PIC is available) are masked. I/O APIC redirection table -entries with Fixed (0b000) or Lowest Priority (0b001) delivery mode are masked. -For [base revision 5](#base-revision-5) or greater, I/O APIC redirection table -entries with NMI (0b100) and ExtINT (0b111) delivery mode are also masked. +The legacy PICs (if available) have all IRQs masked. + +For each existing I/O APIC, its redirection table entries with Fixed (0b000) +or Lowest Priority (0b001) delivery mode are masked. +For [base revision 5](#base-revision-5) or greater, entries with NMI (0b100) +or ExtINT (0b111) delivery mode are also masked. The rest of the entries beyond the +mask flag is left as set by firmware. Entries with other delivery modes are entirely +left as set by firmware. For [base revision 5](#base-revision-5) or greater, any IOMMUs (Intel VT-d, AMD-Vi) have DMA translation and interrupt remapping disabled. For [base revision 5](#base-revision-5) or greater, the local APIC on each processor -(BSP and APs) is initialised as follows: +(BSP and APs), if available, is initialised as follows: - The local APIC is enabled (`IA32_APIC_BASE` bit 11) and software-enabled (SVR bit 8). - The Spurious Interrupt Vector Register is set to `0x1FF`. - The Task Priority Register is set to 0. -- All LVT entries (Timer, Thermal Monitor (if present), Performance Counter - (if present), CMCI (if present), Error) are masked. -- LINT0 and LINT1 are configured according to MADT Local APIC NMI (type 4) and - Local x2APIC NMI (type 0x0A) entries, with polarity and trigger mode derived from - the MPS INTI flags. All LINT entries are masked. -- On the BSP, LINT0 defaults to ExtINT delivery mode (masked) per the Intel SDM, - unless overridden by a MADT NMI entry. -- LINT entries not referenced by any MADT NMI entry (and not the BSP LINT0 ExtINT - default) are masked with no delivery mode. +- All LVT entries (LINT0 and LINT1 (if no MADT override, see below), Timer, Thermal + Monitor (if present), Performance Counter (if present), CMCI (if present), Error) + whose delivery mode is Fixed (0b000), Lowest Priority (0b001), NMI (0b100), or + ExtINT (0b111) have their mask bit set. The rest of the entry beyond the mask flag + is left as set by firmware. Entries with other delivery modes are entirely left as + set by firmware. +- If MADT Local APIC NMI (type 4) or Local x2APIC NMI (type 0x0A) entries are + present, the corresponding LINT entries are configured with NMI delivery mode, + polarity and trigger mode derived from the MPS INTI flags, and masked. This only + applies if the given LINT entry's original firmware-set delivery mode is Fixed (0b000), + Lowest Priority (0b001), NMI (0b100), or ExtINT (0b111). LINT entries with other + delivery modes are entirely left as set by firmware. If booted by EFI, boot services are exited. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.8.0/timestamps new/limine-10.8.2/timestamps --- old/limine-10.8.0/timestamps 2026-02-22 18:50:32.000000000 +0100 +++ new/limine-10.8.2/timestamps 2026-02-26 01:26:04.000000000 +0100 @@ -1,3 +1,3 @@ REGEN_DATE="February 2026" -SOURCE_DATE_EPOCH="1771781474" -SOURCE_DATE_EPOCH_TOUCH="202602221831" +SOURCE_DATE_EPOCH="1772063639" +SOURCE_DATE_EPOCH_TOUCH="202602260053" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.8.0/version new/limine-10.8.2/version --- old/limine-10.8.0/version 2026-02-22 18:50:34.000000000 +0100 +++ new/limine-10.8.2/version 2026-02-26 01:26:07.000000000 +0100 @@ -1 +1 @@ -10.8.0 +10.8.2
