From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 32FB63E92B7 for ; Fri, 3 Jul 2026 13:49:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783086542; cv=none; b=IPXGqjPrCKTY2Hhv3NtAdNaqKVdlswPb23jxbmKaxUC22X6708BOaFY279g+IjMoRqAVAPPuu1pseuas/c1oFiVLgk6Oh5hSL0KIEu/wvQ/vwY9HwqlHZ7UoMcQPAIn4U/qULgc1AljqDm9a4LcRx6Be1aIsbjt/KNpum7EAjfc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783086542; c=relaxed/simple; bh=8nfEgkSEDOOx7LCl18zFqRBJrxILJG4GC6C+e98aV0Y=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=ENT/c1Y6JOOnM2r42iQ2AdWqvQmq6AbDIHwAEGm/IRGMaeaABOSg8NB40q0w/f8czGCuendlOdFk5cKOi7xe+goHIHsN48CFDWo5ptVe29848m97foBtATu4NJU7BXRvaMUk7kbnOZZywjFuA4Vbw5wEIboqicPoTD06cNGAqxM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=FJXagwe4; arc=none smtp.client-ip=209.85.214.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="FJXagwe4" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2cace91f112so4713735ad.0 for ; Fri, 03 Jul 2026 06:49:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783086540; x=1783691340; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=BOYAmzy2QJ6938uaT+sAj/jru3XG3w5p/LQAZKOhZqU=; b=FJXagwe4lSvnVfTYnw4I1OFcOTNvovfnUeOYWeUiHRZqwONIbKTf1BaNlb/0PilGYv B/Ki+MYeN1LagiZYj4rDISbpcLQfkuHDC0QeVFVjC2oZXcUVIzTGzx9/BpCllp3A2f7i b4vdqlR5DYqxtookx42EcKKdvsDbwuR8jeznEOteEuGcSqdflP2S4vsVYgy92MrSPyz/ HpWeojSuDhsA8YVtTswVZrvPZvAK7+5k7aOe6vhR1S9rbH8kDB6fue0MeDsNslxsBvol q42lPcGsYjgFxF0ccrLxSZldy4c/PPkro22cnsMuP60pbDza7pOxltL3XRMTwAplLgky fuhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783086540; x=1783691340; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=BOYAmzy2QJ6938uaT+sAj/jru3XG3w5p/LQAZKOhZqU=; b=rk82b12K2fJJ0yvc4D66/bVaiKjTQNGVv53y7LlF+ZAxK9vh4/JgHTTRdEJc7OC+C7 6mRThBZZljXq9DsyqzXVVOAFqIBgs/BzvQ+vMM0xpaKjA01R68b1cdEBOM4SgPWDZls6 WT77Q/CLJjiPbi6sOVEBdI0LVAiAeaxbp/pgCYkqaNuMpsk4HscQjurftk6PvkZM1TIU zaPPAnOIBkY0SH1i93pnrNhMYIRD2VTj1PikK7wv/CDJnkF3jidz0u6hVG5ZhK+Xkre1 hMaP22+ueFESO5QuzrzdRKQngqlFyU/PBZsRpD7xm0oF46HZkLvjhl7N7cU1vbb4s/kw 2lEQ== X-Forwarded-Encrypted: i=1; AHgh+RovorWoOrGFolWwSkZqrYB7KkJtLwQMlE8Hnutsott+QIaucOHbU1MKlvQgHzlwLajVowSOHcJOamkoifU=@vger.kernel.org X-Gm-Message-State: AOJu0Yyxto4oDHa7W7n897w2G+/7/C22s3jLI1Ux9Zm27rSZcgwS6vfR fNuNgzV1hERR+1k+mKs8s64PhoM+kDKmu5jKagZuhDzJ6fyXCmlRQJAu91XDp+n/ X-Gm-Gg: AfdE7cn98sXuOV8UhPPhxVYOCgLNjxWzDkXos0L9LVhmPdS/NGzYNek2wIX/1HkVjya 2SEE/lHCjiq9SGsi3ASAtQmyhhukNs8t5J3P6Zp95SMQwFDZsEyS3oG6yKWSiJbsW3GWsUsw/pH a3+WrnD2HAYsUwKQ8tLZBIEEhvMfXkdLChkl49OrgBIhAMoPgHar23OvtB4U8C6andWsTmTURNE vtxZq6Dbmk0lq9jcm8KapP4z7Ry3aAveJ77UiSz1aWYwCIeQjc9P/YLX+EWJousomvDS7klZFny DGrzo4PQ4//mF9K4i5DpWV0z9h06b8BhxfZyVlBExVWnv/lcTAG6xQAm4yT+UfjEill7zkQiRXL Us+Z5Zq/H9eDxqhGvskxLPy7HNceV9+mHI9C4McptSPmPyQomP+ifQODdkGwjSKsJNWKaA4rBOz 4zT4q1sGyww9IbmrXLgeZ5pKMG X-Received: by 2002:a17:902:d490:b0:2c9:97a7:b1eb with SMTP id d9443c01a7336-2ca7e92a25emr102079865ad.42.1783086540037; Fri, 03 Jul 2026 06:49:00 -0700 (PDT) Received: from localhost ([112.65.12.207]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cad7765950sm10095955ad.44.2026.07.03.06.48.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Jul 2026 06:48:58 -0700 (PDT) From: Liang Hao To: hoan@os.amperecomputing.com, linusw@kernel.org, brgl@kernel.org Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Liang Hao Subject: [PATCH] gpio: dwapb: Add robust error handling in interrupt handler Date: Fri, 3 Jul 2026 21:48:33 +0800 Message-ID: <20260703134833.21110-1-haohlliang@gmail.com> X-Mailer: git-send-email 2.50.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The current interrupt handler silently continues if an interrupt handling fails, which may lead to interrupt storms. Add proper error handling to gracefully recover from failed interrupt handling. When generic_handle_irq() fails, the following recovery actions are taken: - Write EOI to clear the pending interrupt - Mask the interrupt to prevent immediate re-triggering - Disable the interrupt to stop further interrupts on this line These measures prevent the system from being overwhelmed by repeated unhandled interrupts while logging a rate-limited warning for debugging purposes. Signed-off-by: Liang Hao --- drivers/gpio/gpio-dwapb.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/gpio-dwapb.c b/drivers/gpio/gpio-dwapb.c index 7b92b233fafe..dec700e3cfb0 100644 --- a/drivers/gpio/gpio-dwapb.c +++ b/drivers/gpio/gpio-dwapb.c @@ -209,8 +209,20 @@ static u32 dwapb_do_irq(struct dwapb_gpio *gpio) for_each_set_bit(hwirq, &irq_status, DWAPB_MAX_GPIOS) { int gpio_irq = irq_find_mapping(gen_gc->gc.irq.domain, hwirq); u32 irq_type = irq_get_trigger_type(gpio_irq); - - generic_handle_irq(gpio_irq); + int ret; + u32 val_intmask, val_inten; + + ret = generic_handle_irq(gpio_irq); + if (ret) { + dev_warn_ratelimited(gpio->dev, "Failed to handle irq %d\n", gpio_irq); + /* Clear the interrupt */ + dwapb_write(gpio, GPIO_PORTA_EOI, BIT(hwirq)); + val_intmask = dwapb_read(gpio, GPIO_INTMASK); + dwapb_write(gpio, GPIO_INTMASK, val_intmask | BIT(hwirq)); + val_inten = dwapb_read(gpio, GPIO_INTEN); + dwapb_write(gpio, GPIO_INTEN, val_inten & ~BIT(hwirq)); + continue; + } if ((irq_type & IRQ_TYPE_SENSE_MASK) == IRQ_TYPE_EDGE_BOTH) dwapb_toggle_trigger(gpio, hwirq); -- 2.50.1 (Apple Git-155)