From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=Bqmk8jBL; spf=pass (domain: linaro.org, ip: 209.85.221.68, mailfrom: leif.lindholm@linaro.org) Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by groups.io with SMTP; Tue, 28 May 2019 10:17:16 -0700 Received: by mail-wr1-f68.google.com with SMTP id h1so6968420wro.4 for ; Tue, 28 May 2019 10:17:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=aoLP44DlWN2piI9ZxepYHIpOBpLKKLpV7CUWBZqCoOw=; b=Bqmk8jBLQRaDDz4gsdU0szVIlpjIpaJTaNKCmXBHvqjJ9mGdHl6x6wxQIvcURQc3u5 WA3Q8h6RwXWTgWwY9BbpZmeHDyeFBESffVKlwgqSCC2+DBIyns3e0qLCMen8miw9tqzT 0Foc0lUzJG9dSXrB8F4ajHE8/5KEaYHhDo3zEcdqvilfwmuyR8iS9n43UOJETSPgZuvY dip+giHniSYrH8mNixDehI8u+wpjI40PiWSrAQljGREGxC+r1BrW20pYIC/VPVoV0ZMp hXQpqrUzahVaW7mpcUxx7X9u0vQFag0H+QZhLi4el4BeNXpV61ydmlU8peOolOE/tUt9 Y7pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=aoLP44DlWN2piI9ZxepYHIpOBpLKKLpV7CUWBZqCoOw=; b=cxDbBxTssH3jSjJTr3orwq8Atv/mrref0QJuALgz3pzRLwgRL9N6+eGaeTlW3L8YyC HIyupIFMNlcE0d8e1k6dGJ9I+R+STJzaqEv7IvDSZuhBX46WUN3ehxgwW2a03y5Sr+OS 0H+T2GwWUATQ+A5D/qGwE4DN7Z+lsFWZeUgOW6ZKjiHHAZcltFazMekJjeKYRp0sGng1 /Co6ioR/bqCDa6FWCepQ0OGc03H1BNeTOpKlnzCNcWFTWeESsaT5rVJCPEnlWrGPqq/B PrMWKii3vKE0YB+EpQRN+g4sBdKIN1HyofMab8IK6wqLAaMArfi8vAm+X3caDzHYrLfa giOA== X-Gm-Message-State: APjAAAVk5Vr/Tc/sRAMdLUfi363q/c1hD9LrWtaxehHusX01pTV+osrm Gh/AdpRR6//3BA+fSFmm5taHRA== X-Google-Smtp-Source: APXvYqzGD2fYAX0zOwk3KhECGzf5Wqn5qLwCMdI3mjCioQ9zG6q3j2k5n+RMZEpEnoJB5lB2siVnmA== X-Received: by 2002:adf:8306:: with SMTP id 6mr65850964wrd.155.1559063834108; Tue, 28 May 2019 10:17:14 -0700 (PDT) Return-Path: Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id 74sm3285231wma.7.2019.05.28.10.17.13 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 28 May 2019 10:17:13 -0700 (PDT) Date: Tue, 28 May 2019 18:17:11 +0100 From: "Leif Lindholm" To: "Kirkendall, Garrett" Cc: "devel@edk2.groups.io" , "hao.a.wu@intel.com" , Ray Ni , Andrew Fish , Laszlo Ersek , Michael D Kinney 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) Message-ID: <20190528171711.alockwyker4azzfd@bivouac.eciton.net> References: MIME-Version: 1.0 In-Reply-To: User-Agent: NeoMutt/20170113 (1.7.2) Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit 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 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 ; Ray Ni ; Andrew Fish ; Laszlo Ersek ; Leif Lindholm ; Michael D Kinney > 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 > Cc: Andrew Fish > Cc: Laszlo Ersek > Cc: Leif Lindholm > Cc: Michael D Kinney > > > 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 > > > >