From: "Leif Lindholm" <leif.lindholm@linaro.org>
To: "Kirkendall, Garrett" <Garrett.Kirkendall@amd.com>
Cc: "devel@edk2.groups.io" <devel@edk2.groups.io>,
"hao.a.wu@intel.com" <hao.a.wu@intel.com>,
Ray Ni <ray.ni@intel.com>, Andrew Fish <afish@apple.com>,
Laszlo Ersek <lersek@redhat.com>,
Michael D Kinney <michael.d.kinney@intel.com>
Subject: Re: Linux Kernel soft hangs if 8259 PIC is not configured by BIOS: was (RE: [edk2-devel] [RFC][PATCH v1 0/1] PcAtChipsetPkg: Remove framework modules)
Date: Tue, 28 May 2019 18:17:11 +0100 [thread overview]
Message-ID: <20190528171711.alockwyker4azzfd@bivouac.eciton.net> (raw)
In-Reply-To: <DM6PR12MB2730644A2F9F1165447F15A7851E0@DM6PR12MB2730.namprd12.prod.outlook.com>
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.wu@intel.com>; Ray Ni <ray.ni@intel.com>; Andrew Fish <afish@apple.com>; Laszlo Ersek <lersek@redhat.com>; Leif Lindholm <leif.lindholm@linaro.org>; Michael D Kinney <michael.d.kinney@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.ni@intel.com>
> Cc: Andrew Fish <afish@apple.com>
> Cc: Laszlo Ersek <lersek@redhat.com>
> Cc: Leif Lindholm <leif.lindholm@linaro.org>
> Cc: Michael D Kinney <michael.d.kinney@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
>
>
>
>
prev parent reply other threads:[~2019-05-28 17:17 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-28 16:36 Linux Kernel soft hangs if 8259 PIC is not configured by BIOS: was (RE: [edk2-devel] [RFC][PATCH v1 0/1] PcAtChipsetPkg: Remove framework modules) Kirkendall, Garrett
2019-05-28 17:06 ` Michael D Kinney
2019-05-28 17:31 ` Kirkendall, Garrett
2019-05-28 17:17 ` Leif Lindholm [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190528171711.alockwyker4azzfd@bivouac.eciton.net \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox