From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefan Bader Subject: Re: Booting dom0, various issues since v3.16 kernels Date: Mon, 09 Feb 2015 10:31:15 +0100 Message-ID: <54D87E63.7090709@canonical.com> References: <54D37CB9.1030709@krikkit.de> <73492960.20150205154711@eikelenboom.it> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0220458640040951761==" Return-path: In-Reply-To: <73492960.20150205154711@eikelenboom.it> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Sander Eikelenboom , Stefan Bader Cc: "xen-devel@lists.xensource.com" , David Vrabel List-Id: xen-devel@lists.xenproject.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --===============0220458640040951761== Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="bLQPGV1FKBEilHkPgMLVeGTsfSMKIsf7u" This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --bLQPGV1FKBEilHkPgMLVeGTsfSMKIsf7u Content-Type: multipart/mixed; boundary="------------000001050409040703080603" This is a multi-part message in MIME format. --------------000001050409040703080603 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable On 05.02.2015 15:47, Sander Eikelenboom wrote: >=20 > Thursday, February 5, 2015, 3:22:49 PM, you wrote: >=20 >> Hey David, >=20 >> after just being in that pain, I thought I might as well give a summar= y to >> you/the list. Maybe helpful to not forget which piece should go to whi= ch stable... >=20 >> So: >> v3.16...v3.17.8: Somewhen in between those, the acpi irq seems to have= broken. >> I have not yet verified that, but at least three chan= ges in >> 3.19-rc6 seem to look related: >=20 >> * "x86/xen: Treat SCI interrupt as normal GSI interrupt", >> * "ACPI: pci: Do not clear pci_dev->irq in acpi_pci_irq_disable()", a= nd >> * "x86/xen: Override ACPI IRQ management callback __acpi_unregister_g= si" >=20 > Yes Jiang Liu fixed those and said he would backport the required fixes= once > they where accepted in mainline, put perhaps a polite ping is necessary= there. >=20 >> v3.17.8...v3.18.4: Beside the acpi interrupt, no USB devices (beyond t= he >> hubs) get initialized. Not sure what fixed it, but = it >> looks ok in v3.19-rc7. >> Beside that, there also was a regression in swiotlb= >> that I think was passed on to some stable maintaine= rs: >=20 > Probably the same issue as above (for me it fixed a powerbutton issue a= nd some > pci-passthrough problems). >=20 > And there seems to be more refactoring coming for 3.20 .. so fingerscro= ssed. >=20 > -- > Sander Hi Sander, sorry, I know you did the ping somewhere in another thread. The one which= I cannot find again right now. :/ Maybe you can forward the following two p= atches which would be my backport to 3.18. I hope things are correct. I dropped = the middle patch as it did not seem to be needed and mushed around the other = two. At least things seemed to be fixed up on a quick test-boot. -Stefan >=20 >> * "Revert "swiotlb-xen: pass dev_addr to swiotlb_tbl_unmap_single"" >=20 >> v3.18.4..v3.19-rc7: The issues above look to be fixed. Only some Haswe= ll >> based box now crashed on boot as dom0 while parsin= g >> some ACPI tables (will send more detail seperately= ). >> This happens only on that host and only when runni= ng >> as dom0. Bare-metal is ok and an Opteron based dif= ferent >> host is also fine. >=20 >> -Stefan >=20 >=20 >=20 >=20 > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel >=20 --------------000001050409040703080603 Content-Type: text/x-diff; name="0001-x86-xen-Treat-SCI-interrupt-as-normal-GSI-interrupt.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename*0="0001-x86-xen-Treat-SCI-interrupt-as-normal-GSI-interrupt.pat"; filename*1="ch" =46rom 8b5b328b62248d95743ca9af7aa71c06dd808dfe Mon Sep 17 00:00:00 2001 From: Jiang Liu Date: Tue, 20 Jan 2015 10:21:05 +0800 Subject: [PATCH 1/2] x86/xen: Treat SCI interrupt as normal GSI interrupt= Currently Xen Domain0 has special treatment for ACPI SCI interrupt, that is initialize irq for ACPI SCI at early stage in a special way as: xen_init_IRQ() ->pci_xen_initial_domain() ->xen_setup_acpi_sci() Allocate and initialize irq for ACPI SCI Function xen_setup_acpi_sci() calls acpi_gsi_to_irq() to get an irq number for ACPI SCI. But unfortunately acpi_gsi_to_irq() depends on IOAPIC irqdomains through following path acpi_gsi_to_irq() ->mp_map_gsi_to_irq() ->mp_map_pin_to_irq() ->check IOAPIC irqdomain For PV domains, it uses Xen event based interrupt manangement and doesn't make uses of native IOAPIC, so no irqdomains created for IOAPIC. This causes Xen domain0 fail to install interrupt handler for ACPI SCI and all ACPI events will be lost. Please refer to: https://lkml.org/lkml/2014/12/19/178 So the fix is to get rid of special treatment for ACPI SCI, just treat ACPI SCI as normal GSI interrupt as: acpi_gsi_to_irq() ->acpi_register_gsi() ->acpi_register_gsi_xen() ->xen_register_gsi() With above change, there's no need for xen_setup_acpi_sci() anymore. The above change also works with bare metal kernel too. Signed-off-by: Jiang Liu Tested-by: Sander Eikelenboom Cc: Tony Luck Cc: xen-devel@lists.xenproject.org Cc: Konrad Rzeszutek Wilk Cc: David Vrabel Cc: Rafael J. Wysocki Cc: Len Brown Cc: Pavel Machek Cc: Bjorn Helgaas Link: http://lkml.kernel.org/r/1421720467-7709-2-git-send-email-jiang.liu= @linux.intel.com Signed-off-by: Thomas Gleixner Signed-off-by: Stefan Bader --- arch/x86/kernel/acpi/boot.c | 23 +++++++++++----------- arch/x86/pci/xen.c | 47 ---------------------------------------= ------ 2 files changed, 12 insertions(+), 58 deletions(-) diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index a142e77..460f498 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -604,18 +604,19 @@ void __init acpi_pic_sci_set_trigger(unsigned int i= rq, u16 trigger) =20 int acpi_gsi_to_irq(u32 gsi, unsigned int *irqp) { - int irq; - - if (acpi_irq_model =3D=3D ACPI_IRQ_MODEL_PIC) { - *irqp =3D gsi; - } else { - irq =3D mp_map_gsi_to_irq(gsi, - IOAPIC_MAP_ALLOC | IOAPIC_MAP_CHECK); - if (irq < 0) - return -1; - *irqp =3D irq; + int rc, irq, trigger, polarity; + + rc =3D acpi_get_override_irq(gsi, &trigger, &polarity); + if (rc =3D=3D 0) { + trigger =3D trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE; + polarity =3D polarity ? ACPI_ACTIVE_LOW : ACPI_ACTIVE_HIGH; + irq =3D acpi_register_gsi(NULL, gsi, trigger, polarity); + if (irq >=3D 0) { + *irqp =3D irq; + return 0; + } } - return 0; + return -1; } EXPORT_SYMBOL_GPL(acpi_gsi_to_irq); =20 diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c index 093f5f4..6b3cf7c 100644 --- a/arch/x86/pci/xen.c +++ b/arch/x86/pci/xen.c @@ -452,52 +452,6 @@ int __init pci_xen_hvm_init(void) } =20 #ifdef CONFIG_XEN_DOM0 -static __init void xen_setup_acpi_sci(void) -{ - int rc; - int trigger, polarity; - int gsi =3D acpi_sci_override_gsi; - int irq =3D -1; - int gsi_override =3D -1; - - if (!gsi) - return; - - rc =3D acpi_get_override_irq(gsi, &trigger, &polarity); - if (rc) { - printk(KERN_WARNING "xen: acpi_get_override_irq failed for acpi" - " sci, rc=3D%d\n", rc); - return; - } - trigger =3D trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE; - polarity =3D polarity ? ACPI_ACTIVE_LOW : ACPI_ACTIVE_HIGH; - - printk(KERN_INFO "xen: sci override: global_irq=3D%d trigger=3D%d " - "polarity=3D%d\n", gsi, trigger, polarity); - - /* Before we bind the GSI to a Linux IRQ, check whether - * we need to override it with bus_irq (IRQ) value. Usually for - * IRQs below IRQ_LEGACY_IRQ this holds IRQ =3D=3D GSI, as so: - * ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level) - * but there are oddballs where the IRQ !=3D GSI: - * ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 20 low level) - * which ends up being: gsi_to_irq[9] =3D=3D 20 - * (which is what acpi_gsi_to_irq ends up calling when starting the - * the ACPI interpreter and keels over since IRQ 9 has not been - * setup as we had setup IRQ 20 for it). - */ - if (acpi_gsi_to_irq(gsi, &irq) =3D=3D 0) { - /* Use the provided value if it's valid. */ - if (irq >=3D 0) - gsi_override =3D irq; - } - - gsi =3D xen_register_gsi(gsi, gsi_override, trigger, polarity); - printk(KERN_INFO "xen: acpi sci %d\n", gsi); - - return; -} - int __init pci_xen_initial_domain(void) { int irq; @@ -509,7 +463,6 @@ int __init pci_xen_initial_domain(void) x86_msi.msi_mask_irq =3D xen_nop_msi_mask_irq; x86_msi.msix_mask_irq =3D xen_nop_msix_mask_irq; #endif - xen_setup_acpi_sci(); __acpi_register_gsi =3D acpi_register_gsi_xen; /* Pre-allocate legacy irqs */ for (irq =3D 0; irq < nr_legacy_irqs(); irq++) { --=20 1.9.1 --------------000001050409040703080603 Content-Type: text/x-diff; name="0002-x86-xen-Override-ACPI-IRQ-management-callback-__acpi.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename*0="0002-x86-xen-Override-ACPI-IRQ-management-callback-__acpi.pa"; filename*1="tch" =46rom 96f1d05b484334ff01ea2ee2b66798e294e34d96 Mon Sep 17 00:00:00 2001 From: Jiang Liu Date: Tue, 20 Jan 2015 10:21:07 +0800 Subject: [PATCH 2/2] x86/xen: Override ACPI IRQ management callback __acpi_unregister_gsi Xen overrides __acpi_register_gsi and leaves __acpi_unregister_gsi as is.= That means, an IRQ allocated by acpi_register_gsi_xen_hvm() or acpi_register_gsi_xen() will be freed by acpi_unregister_gsi_ioapic(), which may cause undesired effects. So override __acpi_unregister_gsi to NULL for safety. Signed-off-by: Jiang Liu Tested-by: Sander Eikelenboom Cc: Tony Luck Cc: xen-devel@lists.xenproject.org Cc: Konrad Rzeszutek Wilk Cc: David Vrabel Cc: Bjorn Helgaas Cc: Graeme Gregory Cc: Lv Zheng Link: http://lkml.kernel.org/r/1421720467-7709-4-git-send-email-jiang.liu= @linux.intel.com Signed-off-by: Thomas Gleixner Signed-off-by: Stefan Bader --- arch/x86/include/asm/acpi.h | 1 + arch/x86/pci/xen.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h index 0ab4f9f..3a45668 100644 --- a/arch/x86/include/asm/acpi.h +++ b/arch/x86/include/asm/acpi.h @@ -50,6 +50,7 @@ void acpi_pic_sci_set_trigger(unsigned int, u16); =20 extern int (*__acpi_register_gsi)(struct device *dev, u32 gsi, int trigger, int polarity); +extern void (*__acpi_unregister_gsi)(u32 gsi); =20 static inline void disable_acpi(void) { diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c index 6b3cf7c..3c41716 100644 --- a/arch/x86/pci/xen.c +++ b/arch/x86/pci/xen.c @@ -442,6 +442,7 @@ int __init pci_xen_hvm_init(void) * just how GSIs get registered. */ __acpi_register_gsi =3D acpi_register_gsi_xen_hvm; + __acpi_unregister_gsi =3D NULL; #endif =20 #ifdef CONFIG_PCI_MSI @@ -464,6 +465,7 @@ int __init pci_xen_initial_domain(void) x86_msi.msix_mask_irq =3D xen_nop_msix_mask_irq; #endif __acpi_register_gsi =3D acpi_register_gsi_xen; + __acpi_unregister_gsi =3D NULL; /* Pre-allocate legacy irqs */ for (irq =3D 0; irq < nr_legacy_irqs(); irq++) { int trigger, polarity; --=20 1.9.1 --------------000001050409040703080603-- --bLQPGV1FKBEilHkPgMLVeGTsfSMKIsf7u Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBCgAGBQJU2H5sAAoJEOhnXe7L7s6jCekP/17vQglpI16Jprp+mxQFntJg VUsAENCsdUyjyh/huUs0CQZgtaI+SidnEpKptclUzjtWco9ZfYmgTz7QnCPAXJOA hJJUONIS0CtzDZRDM7/hbferF25XHNBovXQQfDZqtLwqG63tBh/chGlukJ9kIFwt +Oa6p3Mx8DzlsP6RLAmECQMbYgQC4s00UGsF20wsBvHZLvmVh3qMaIR+NIPUjgWY +EpA+fJmRELBDdwBrBUCOLd/PRAiqAqfh7Yosh1Zth+En5ohmHJ4eYG9m5qzLQ0W 1sFSEj6vNaFf77+YeoS3rXfrf546eZ2LymsQ+MbU+qT+eGRNbJ+aYnCt9GHKGIGo g8dXRZPl2aG+eV6kw8JrLnKb/kIUx6CkZTdrvS0mXyOLuFRN3DUOe8jTXli8RaFA kF3Wlj7lsRlIHz61EYTw7J8Cmk1bwz0I0dkCYCmn2XyQDaF9Q4Ib3+81J1FIDG3a L/sbTReYuXiJn/8UwLkO43nylL3b9WEPssm8+pVI3DJghN3HAInZVLtAR5qR197H et3bZ4H0QvgOEx9mpdasvNkDD8oRl0c+AiJUGrHAnl9+e7qYddqv5Qt/uK0zAoSp dNpxQ63J7OXL8V30m3SCfUCWECzwBz1tRfe0ctWyTpjqDqQ4W0gbltm+BmY43au4 JyBe1L6PykX2q4LO/ZSt =Bq7m -----END PGP SIGNATURE----- --bLQPGV1FKBEilHkPgMLVeGTsfSMKIsf7u-- --===============0220458640040951761== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --===============0220458640040951761==--