Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp2946771imm; Mon, 16 Jul 2018 17:58:18 -0700 (PDT) X-Google-Smtp-Source: AAOMgpci2ArEM4JKPgc015TrEIlQRoKbEgrQTJqw+Ei/oBUn8zCATlMkVFaExQvsn37VC6E6OiSc X-Received: by 2002:a63:c902:: with SMTP id o2-v6mr17357884pgg.118.1531789098520; Mon, 16 Jul 2018 17:58:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531789098; cv=none; d=google.com; s=arc-20160816; b=zXYhFDvOmC58epX/dZPEiGv7B3opiVhWWMqZq3TocXhtL+QT727+4qTowlNrXtb1db GzSBfjra28smRNkXjqO6w8fEhDAoaqF/HWrMdB36i3aROjhg4wwS+tcEWBgD5OvAhdKw rvAnKUxCKjTGTv5FiI+UVJUu3C2+JylY1cB0pMQFEt66nLwYeu1mf7/HH8FRD4cmymxM jird0CuqtCxyMA6Uie+QDB8Po7EaibSLrb6PkV8bjnwdq0BzuBs1gYL9XNGhT7uD6s/O 97rmoxh6ItozahtDpr5fqeZnaCwgwrwgkqXNYerhyMSTziwGNiIEotMTZOZcbL9n7VK1 WNfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:message-id:date:subject:cc:from :dkim-signature:arc-authentication-results; bh=HOMDK29fJd2M035pCevcaH0e5d//9WNYEltj83IL54c=; b=FX7L/Zi//pb2pK6hhtedB308LbDbmx6RpU7VZpKuyBR0HWduJHOCWPzcE9OeDkmJZR txQsoNA4Cm0r1BV9heeb/aYy57z0g5AvpyI6gCWxQB+NAtgXStqf3vmsmgjKX2XC8CiB l0Gjhoei+WaYB9UCyLs4RJaxGxp/kYCBCdIVHGJQTaNEwnqGxb1XjPiaEF3ymb0OOA2n K0L7RDigrA7QPEdzN78kHe3QFCbsV3LS0xlzQAIUG8jgxIturmTcOjKiv26ydYHG9AxO AlKmc6rcFNCWlQIggxhylEd3rQZGBWLjiDh4RtAK6fdhW8S5mxrQglkZ2+02Mb6fa76F XT4A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@chromium.org header.s=google header.b=KKWfBJH8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e125-v6si13296036pfh.334.2018.07.16.17.58.03; Mon, 16 Jul 2018 17:58:18 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@chromium.org header.s=google header.b=KKWfBJH8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730302AbeGQB1T (ORCPT + 99 others); Mon, 16 Jul 2018 21:27:19 -0400 Received: from mail-it0-f65.google.com ([209.85.214.65]:33154 "EHLO mail-it0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729983AbeGQB1T (ORCPT ); Mon, 16 Jul 2018 21:27:19 -0400 Received: by mail-it0-f65.google.com with SMTP id y124-v6so13123803itc.0 for ; Mon, 16 Jul 2018 17:57:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id; bh=HOMDK29fJd2M035pCevcaH0e5d//9WNYEltj83IL54c=; b=KKWfBJH8HfRIkaio8Aw5WuUeUh3FviMTOaW7Nr/DRG0jvQJK+2mxGXxEVGAQQLAZje YF3vJ2xWXWgICSYThOs/NYgcRZTO/WgJQXWcyikcw90rWALw8KQRWZ+a4+IGZ4Ihe+rG W8daWKYmoMUyNZY79YYHWi3LAWjtp6mPC+QSs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=HOMDK29fJd2M035pCevcaH0e5d//9WNYEltj83IL54c=; b=YZXY9XS8kmuFjWSWAiwT8eiPbi9HIgoYcE3ywQr0D04DNEtHptDH4EiH6UCEALs3w+ wNAXgP2RQkogZl7H9CPNJHELA+sdOjYTTu+jG+t6g8KVTSAqklny59rQV2QCw/jtSZsT SfRtlafDWVFWhAA7zN/XcZ3KaNhpHPxoerlFZWFshC/RY2D1K78RVgC8s5dYG74Xvbdl tFU6FyasObNfItmT0xnZyOj1pi1tBgjtZACnncZrD70VFlFnLrGTegVaTyRuDDhBRWCZ FGAdGLEo53WiR8P2hqiQ9AQa1QRMLQfPiKmqnyBnVQBoskfw8a1tpVEkofFJ280n6gTL fN9g== X-Gm-Message-State: AOUpUlGrru7uL6/xuqKT89mXnaIKr4ADYC5HfU106TNogTOAGl0HK0l/ OwGFJvRdxfuZhKoV+QsRW5ADjw== X-Received: by 2002:a02:5c07:: with SMTP id q7-v6mr15645422jab.124.1531789043194; Mon, 16 Jul 2018 17:57:23 -0700 (PDT) Received: from djkurtz2.bld.corp.google.com ([2620:15c:183:0:1cfd:61a5:7215:5f9c]) by smtp.gmail.com with ESMTPSA id b1-v6sm3635486ioh.43.2018.07.16.17.57.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 16 Jul 2018 17:57:22 -0700 (PDT) From: Daniel Kurtz Cc: Shyam Sundar S K , Nehal Shah , Ken Xue , Daniel Drake , Thomas Gleixner , Daniel Kurtz , Linus Walleij , linux-gpio@vger.kernel.org (open list:PIN CONTROL SUBSYSTEM), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 1/2] pinctrl/amd: only handle irq if it is pending and unmasked Date: Mon, 16 Jul 2018 18:57:18 -0600 Message-Id: <20180717005719.258905-1-djkurtz@chromium.org> X-Mailer: git-send-email 2.18.0.203.gfac676dfb9-goog To: unlisted-recipients:; (no To-header on input) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The AMD pinctrl driver demultiplexes GPIO interrupts and fires off their individual handlers. If one of these GPIO irqs is configured as a level interrupt, and its downstream handler is a threaded ONESHOT interrupt, the GPIO interrupt source is masked by handle_level_irq() until the eventual return of the threaded irq handler. During this time the level GPIO interrupt status will still report as high until the actual gpio source is cleared - both in the individual GPIO interrupt status bit (INTERRUPT_STS_OFF) and in its corresponding "WAKE_INT_STATUS_REG" bit. Thus, if another GPIO interrupt occurs during this time, amd_gpio_irq_handler() will see that the (masked-and-not-yet-cleared) level irq is still pending and incorrectly call its handler again. To fix this, have amd_gpio_irq_handler() check for both interrupts status and mask before calling generic_handle_irq(). Note: Is it possible that this bug was the source of the interrupt storm on Ryzen when using chained interrupts before commit ba714a9c1dea85 ("pinctrl/amd: Use regular interrupt instead of chained")? Signed-off-by: Daniel Kurtz --- drivers/pinctrl/pinctrl-amd.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c index 04ae139671c8a8..b91db89eb9247c 100644 --- a/drivers/pinctrl/pinctrl-amd.c +++ b/drivers/pinctrl/pinctrl-amd.c @@ -552,7 +552,8 @@ static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id) /* Each status bit covers four pins */ for (i = 0; i < 4; i++) { regval = readl(regs + i); - if (!(regval & PIN_IRQ_PENDING)) + if (!(regval & PIN_IRQ_PENDING) || + !(regval & BIT(INTERRUPT_MASK_OFF))) continue; irq = irq_find_mapping(gc->irq.domain, irqnr + i); generic_handle_irq(irq); -- 2.18.0.203.gfac676dfb9-goog