Hi Garrett, Presumably you mean https://lkml.org/lkml/2019/5/9/304?
I'm not familiar enough with the PC platform to stick my oar in, but Gleixner's counterquestion is an honest one - he does not see an obvious solution to the problem. And unless someone finds the problem interesting, this is very much a "patches welcome" sort of scenario. If Mike's suggestions don't help bring this forward, I would recommend you loop in all of the X86 maintainers, not just tglx. It may also be worth asking one of your Linux devs to have a look - Suravee Suthikulpanit is still at AMD, right? Best Regards, Leif On Tue, May 28, 2019 at 04:36:06PM +0000, Kirkendall, Garrett wrote: > Since this change will be removing the 8259 PIC driver, I'll mention > a quirk I ran into in the Linux Kernel up through at least 5.0 (and > I am sure later, I just didn't verify): > > Does anyone have pull in the Linux Kernel world to get them to take > this seriously? Hopefully someday soon end users will let legacy > devices, like the PIC, die a long overdue and graceful death. > > I sent the following to the responsible Linux Kernel developers and > quickly got back a "working as designed" response: > > ************************* > I am trying to boot a UEFI BIOS with minimal legacy hardware > support. The Linux kernel soft hangs when the PIC is not configured > by the BIOS because it is using IOAPIC. Hopefully, this provides > enough information. > > Observed under Ubuntu Server Linux 18.04 LTS with kernel 4.15.0, and with > kernel compiled from source tag v5.0 > > Where it hangs: > Soft hang occurs in calibrate_APIC_clock(): > https://github.com/torvalds/linux/blob/v5.0/arch/x86/kernel/apic/apic.c#L805 > specific location of soft hang waiting for interrupts: > https://github.com/torvalds/linux/blob/v5.0/arch/x86/kernel/apic/apic.c#L854 > > > How it gets to the hang: > If 8259A PIC is not configured before kernel is launched, HPET IRQ 0 > registration fails because probe_8259A returns PIC as not available and > therefore interrupt descriptors 0-15 are not allocated. This happens when > BIOS does not configure 8259A PIC because it uses IOAPIC. > > This sequence prevents allocating interrupts 0-15 unless PIC is configured > before kernel starts. legacy_pic.init = init_8259A is not called before > early_irq_init(): > early_irq_init(): > https://github.com/torvalds/linux/blob/v5.0/init/main.c#L642 > initcnt = arch_probe_nr_irqs(): > https://github.com/torvalds/linux/blob/v5.0/kernel/irq/irqdesc.c#L512 > return legacy_pic->probe(): > https://github.com/torvalds/linux/blob/v5.0/arch/x86/kernel/apic/vector.c#L656 > default_legacy_pic.probe: > https://github.com/torvalds/linux/blob/v5.0/arch/x86/kernel/i8259.c#L418 > probe_8259A(): > https://github.com/torvalds/linux/blob/v5.0/arch/x86/kernel/i8259.c#L301 > interrupt 0-15 descriptors not allocated and prevents IOAPIC interrupts > 0-15: https://github.com/torvalds/linux/blob/v5.0/kernel/irq/irqdesc.c#L525 > > In this call is where init_8259A is called and PIC is initialized. However, > interrupt descriptors for 0-15 were not allocated in early_irq_init() > sequence, so descriptors are not available later. > init_IRQ() : https://github.com/torvalds/linux/blob/v5.0/init/main.c#L643 > > This sequence tries to register the HPET to irq0, but irq0 descriptor is not > allocated by early_irq_init() sequence: > late_time_init(): > https://github.com/torvalds/linux/blob/v5.0/init/main.c#L703 > late_time_init = x86_late_time_init: > https://github.com/torvalds/linux/blob/v5.0/arch/x86/kernel/time.c#L107 > x86_init.timers.timer_init(): > https://github.com/torvalds/linux/blob/v5.0/arch/x86/kernel/time.c#L92 > x86_init.timers.timer_init = hpet_time_init: > https://github.com/torvalds/linux/blob/v5.0/arch/x86/kernel/x86_init.c#L75 > setup_default_timer_irq(): > https://github.com/torvalds/linux/blob/v5.0/arch/x86/kernel/time.c#L83 > if (setup_irq(0, &irq0)): > https://github.com/torvalds/linux/blob/v5.0/arch/x86/kernel/time.c#L78 > > This gets called at some point after the above sequences, I couldn't track it > all the way back to main.c easily: > x86_init.timers.setup_percpu_clockev = setup_boot_APIC_clock: > https://github.com/torvalds/linux/blob/v5.0/arch/x86/kernel/x86_init.c#L74 > > https://github.com/torvalds/linux/blob/v5.0/arch/x86/kernel/apic/apic.c#L961 > *** soft hang in calibrate_APIC_clock(): > https://github.com/torvalds/linux/blob/v5.0/arch/x86/kernel/apic/apic.c#L854 > > ************************* > > GARRETT KIRKENDALL > SMTS Firmware Engineer | CTE > 7171 Southwest Parkway, Austin, TX 78735 USA > AMD facebook | amd.com > > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Wu, Hao A via > Groups.Io > Sent: Monday, May 27, 2019 1:37 AM > To: devel@edk2.groups.io > Cc: Hao A Wu <hao.a...@intel.com>; Ray Ni <ray...@intel.com>; Andrew Fish > <af...@apple.com>; Laszlo Ersek <ler...@redhat.com>; Leif Lindholm > <leif.lindh...@linaro.org>; Michael D Kinney <michael.d.kin...@intel.com> > Subject: [edk2-devel] [RFC][PATCH v1 0/1] PcAtChipsetPkg: Remove framework > modules > > [CAUTION: External Email] > > ''' > Please note that this patch will be hold until all the below requirements are > met: > > A. edk2-stable201905 is created; > B. OvmfPkg has drop its usage of the legacy ISA stack (which includes > the IsaAcpiDxe driver); > C. UefiPayloadPkg has been updated to drop its consume to the > 8259InterruptControllerDxe driver. > ''' > > This patch itself will not be sent to the mailing list and is only available > at: > https://github.com/hwu25/edk2/tree/delete_framework > (https://github.com/hwu25/edk2/commit/84e58f89f6d03f9cc3399cced9d5d5529e06a416) > > > Below modules will be removed from PcAtChipsetPkg: > * PcAtChipsetPkg/8259InterruptControllerDxe/8259.inf > * PcAtChipsetPkg/8254TimerDxe/8254Timer.inf > * PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.inf > > They are considered legacy framework components and will no longer be used > after the removal of IntelFramework[Module]Pkg. > > Also, the unused (after the modules being removed) PCDs will be deleted in > package level DEC/UNI files. > > Cc: Ray Ni <ray...@intel.com> > Cc: Andrew Fish <af...@apple.com> > Cc: Laszlo Ersek <ler...@redhat.com> > Cc: Leif Lindholm <leif.lindh...@linaro.org> > Cc: Michael D Kinney <michael.d.kin...@intel.com> > > > Hao A Wu (1): > PcAtChipsetPkg: Remove framework modules > > PcAtChipsetPkg/PcAtChipsetPkg.dec | 58 -- > PcAtChipsetPkg/PcAtChipsetPkg.dsc | 5 +- > PcAtChipsetPkg/8254TimerDxe/8254Timer.inf | 42 -- > PcAtChipsetPkg/8259InterruptControllerDxe/8259.inf | 46 -- > PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.inf | 50 -- > PcAtChipsetPkg/8254TimerDxe/Timer.h | 185 ------ > PcAtChipsetPkg/8259InterruptControllerDxe/8259.h | 220 ------- > PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.h | 269 --------- > PcAtChipsetPkg/8254TimerDxe/Timer.c | 401 > ------------- > PcAtChipsetPkg/8259InterruptControllerDxe/8259.c | 622 > -------------------- > PcAtChipsetPkg/IsaAcpiDxe/ComponentName.c | 301 > ---------- > PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.c | 353 > ----------- > PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.c | 386 > ------------ > PcAtChipsetPkg/8254TimerDxe/Timer.uni | 16 - > PcAtChipsetPkg/8254TimerDxe/TimerExtra.uni | 14 - > PcAtChipsetPkg/8259InterruptControllerDxe/Legacy8259.uni | 16 - > PcAtChipsetPkg/8259InterruptControllerDxe/Legacy8259Extra.uni | 14 - > PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.uni | 16 - > PcAtChipsetPkg/IsaAcpiDxe/IsaAcpiExtra.uni | 14 - > PcAtChipsetPkg/PcAtChipsetPkg.uni | 52 +- > 20 files changed, 2 insertions(+), 3078 deletions(-) delete mode 100644 > PcAtChipsetPkg/8254TimerDxe/8254Timer.inf > delete mode 100644 PcAtChipsetPkg/8259InterruptControllerDxe/8259.inf > delete mode 100644 PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.inf > delete mode 100644 PcAtChipsetPkg/8254TimerDxe/Timer.h > delete mode 100644 PcAtChipsetPkg/8259InterruptControllerDxe/8259.h > delete mode 100644 PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.h > delete mode 100644 PcAtChipsetPkg/8254TimerDxe/Timer.c > delete mode 100644 PcAtChipsetPkg/8259InterruptControllerDxe/8259.c > delete mode 100644 PcAtChipsetPkg/IsaAcpiDxe/ComponentName.c > delete mode 100644 PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.c > delete mode 100644 PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.c > delete mode 100644 PcAtChipsetPkg/8254TimerDxe/Timer.uni > delete mode 100644 PcAtChipsetPkg/8254TimerDxe/TimerExtra.uni > delete mode 100644 PcAtChipsetPkg/8259InterruptControllerDxe/Legacy8259.uni > delete mode 100644 > PcAtChipsetPkg/8259InterruptControllerDxe/Legacy8259Extra.uni > delete mode 100644 PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.uni > delete mode 100644 PcAtChipsetPkg/IsaAcpiDxe/IsaAcpiExtra.uni > > -- > 2.12.0.windows.1 > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#41531): https://edk2.groups.io/g/devel/message/41531 Mute This Topic: https://groups.io/mt/31823819/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-