Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752387AbbBXC2R (ORCPT ); Mon, 23 Feb 2015 21:28:17 -0500 Received: from cantor2.suse.de ([195.135.220.15]:57942 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751712AbbBXC2P (ORCPT ); Mon, 23 Feb 2015 21:28:15 -0500 Date: Tue, 24 Feb 2015 13:28:05 +1100 From: NeilBrown To: Thomas Gleixner , "Rafael J. Wysocki" Cc: linux-kernel@vger.kernel.org, GTA04 owners , linux-pm@vger.kernel.org, Kalle Jokiniemi Subject: [PATCH - RESEND] IRQ: don't suspend nested_thread irqs over system suspend. Message-ID: <20150224132805.385a56a5@notabene.brown> X-Mailer: Claws Mail 3.10.1-162-g4d0ed6 (GTK+ 2.24.25; x86_64-suse-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; boundary="Sig_/GFnrHDc1Bs/XVRdbvRQTN5O"; protocol="application/pgp-signature" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2825 Lines: 83 --Sig_/GFnrHDc1Bs/XVRdbvRQTN5O Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Nested IRQs can only fire when the parent irq fires. So when the parent is suspended, there is no need to suspend the child irq. Suspending nested irqs can cause a problem is they are suspended or resumed in the wrong order. If an interrupt fires while the parent is active but the child is suspended, then the interrupt will not be acknowledged properly and so an interrupt storm can result. This is particularly likely if the parent is resumed before the child, and the interrupt was raised during suspend. Ensuring correct ordering would be possible, but it is simpler to just never suspend nested interrupts. Signed-off-by: NeilBrown --- This is a resend of a patch sent at the end of January 2015. Rafael seemed happy with it, but I receive no other response so I'm resendi= ng. Thanks, NeilBrown diff --git a/kernel/irq/pm.c b/kernel/irq/pm.c index 3ca532592704..40cbcfb7fc43 100644 --- a/kernel/irq/pm.c +++ b/kernel/irq/pm.c @@ -118,6 +118,8 @@ void suspend_device_irqs(void) unsigned long flags; bool sync; =20 + if (irq_settings_is_nested_thread(desc)) + continue; raw_spin_lock_irqsave(&desc->lock, flags); sync =3D suspend_device_irq(desc, irq); raw_spin_unlock_irqrestore(&desc->lock, flags); @@ -158,6 +160,8 @@ static void resume_irqs(bool want_early) =20 if (!is_early && want_early) continue; + if (irq_settings_is_nested_thread(desc)) + continue; =20 raw_spin_lock_irqsave(&desc->lock, flags); resume_irq(desc, irq); --Sig_/GFnrHDc1Bs/XVRdbvRQTN5O Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIVAwUBVOvhtTnsnt1WYoG5AQKnXxAAjQnaCA2UPMaoXcwoP/Qx1MJpMSjW6Q6v b7NiJTm7ltcKoPBN4y2//p0Wk6BEKT+nCbfqFacj4+MxfjrC4qtjIpsL6lVxi2Iz sBdbhdkKdUsX6ueRKWv5ifK9qbDzBje7QUcGDrJ/9n80rvbVB5AnSH8bM0TADs2W bfg5xWAMLfBZq4yhMTgOkPx7D9LMk6/HmlR55ZEC7JvZo6yKwifyQi18k1wfDlLZ FobxyB6/MexRpjG9RXLpp4MJLV7BV0b6wQhZWWYSFhxVcuYxb9u7BHWumtO9fCMy fgIzSVsZHuPxTH+ct7fbj+Pat+Y38c5RYpq4ojWJP2FnrGjEnrPt+dpw6AnbkPme JudzHus6HhgUu5vLdT/Hu5i1qhVcQVe7OaweqhGs1BReGYX7AVPAsVzJAJ09Fwyb vNIbfuPoTWVI1cz9VV7VgbFHwZgq9/yhk9KhvRaypaMTeuWKbcf2SgiX315w2e21 D3Gxa6FDKc+CmnDycrx0eALtfCDp86gR2yeOeiCPAGUp8ICJ5vvAJcnxYVPYzt64 JBBILBwzRV/7LNzbkYWEFlq4CCm9HhmkN4/HDC7tMcxCqQoVFTK0eGn5nz9kFZ6x MaUyhhakwK+cAx1bVmTZ+gdBxnaa31p26c2OFdv2VRFnJlFC2X+vc9GFuz8KUZCD d43mKkWNdWQ= =vmFh -----END PGP SIGNATURE----- --Sig_/GFnrHDc1Bs/XVRdbvRQTN5O-- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/