From patchwork Tue Apr 21 17:28:38 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Semen Protsenko X-Patchwork-Id: 463411 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id C49F814012F for ; Wed, 22 Apr 2015 03:29:28 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="verification failed; unprotected key" header.d=globallogic.com header.i=@globallogic.com header.b=em75XUdI; dkim-adsp=none (unprotected policy); dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933006AbbDUR31 (ORCPT ); Tue, 21 Apr 2015 13:29:27 -0400 Received: from exprod5og117.obsmtp.com ([64.18.0.149]:47386 "EHLO exprod5og117.obsmtp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754353AbbDUR30 (ORCPT ); Tue, 21 Apr 2015 13:29:26 -0400 Received: from mail-la0-f42.google.com ([209.85.215.42]) (using TLSv1) by exprod5ob117.postini.com ([64.18.4.12]) with SMTP ID DSNKVTaI9cbNF9rUqDuFDGu+vnjhopv/FQFV@postini.com; Tue, 21 Apr 2015 10:29:25 PDT Received: by lagv1 with SMTP id v1so156617192lag.3 for ; Tue, 21 Apr 2015 10:29:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=globallogic.com; s=google; h=from:to:cc:subject:date:message-id; bh=NL8POsxEFlnZZeseitHNJ9pO7IQJXNKtFJtSISc3QtI=; b=em75XUdIG+wQKWTPr+yu5qU9KxsfABPAxX6tqjB4YPZQosX786kUUBw5TGXcirKYxF +hkqb59SdO0vyZakYflychRcWCEiC6UeXT29j5sYAA+w68bITSpcY9Lg6KRDPdl/PDYV 4+sfBv1IWHCBVcxyB/wu5/BITMmxu23hWSWS8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=NL8POsxEFlnZZeseitHNJ9pO7IQJXNKtFJtSISc3QtI=; b=CL+dtFE7UeV+bH5GnRR9npxb+DlYkHki+O+dujitrImmCDQYjHYgTJwYkFbiKx3GZa bmhCq6f4EZd0/cM00pbRTVtYP+kn5Li9kH0tIZVzuBMbnLuCv/4PTHT0wB0aaGCYDhLm yPv+rtLhjYG5+7mEP8dEigLs69Fbdy5HYiIJaR1mtmtftx3/ln4yntv7atxUy2UKilFq xfGt6GRv39Aj5N0BusvXOrhR8Gtlc1Id2TxTKkW3o4ce4wCORumbmta8zNzLrR6Zphso 277EBLSMJryhYQqW+7G63z1BwPzEDTPP5Tg9/9S8Va2KtLeG6yMbwm4hzkNIJtvWMbsz SX0g== X-Gm-Message-State: ALoCoQlguqyNRUXZuS3XQtD/zLJXU2f/B4aJhdBvwXJ/4w0Dn8TZlHjl8u11fF0AkOFcfFckuoevdVk/qNbqYbcHpQFVS3Fsg7zfXM7o3BwHxJemXfec0f/xplsSIa0VNLyRyAbyA3PJCd1Rpo0aLLyEh6uU3wRIAA== X-Received: by 10.112.202.194 with SMTP id kk2mr13001299lbc.54.1429637363975; Tue, 21 Apr 2015 10:29:23 -0700 (PDT) X-Received: by 10.112.202.194 with SMTP id kk2mr13001293lbc.54.1429637363885; Tue, 21 Apr 2015 10:29:23 -0700 (PDT) Received: from localhost ([195.238.92.132]) by mx.google.com with ESMTPSA id rp10sm552522lbb.8.2015.04.21.10.29.23 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Tue, 21 Apr 2015 10:29:23 -0700 (PDT) From: Semen Protsenko To: Linus Walleij , Alexandre Courbot Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Grygorii Strashko Subject: [PATCH 2/2] gpio: max732x: Fix irq-events handler Date: Tue, 21 Apr 2015 20:28:38 +0300 Message-Id: <1429637318-11089-1-git-send-email-semen.protsenko@globallogic.com> X-Mailer: git-send-email 1.7.9.5 Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org MAX732X doesn't support edge type interrupt. So replace handle_edge_irq() with handle_level_irq(), which uses irq_mask/irq_unmask callbacks instead of irq_ack(). This wrong handler may lead to NULL pointer dereference in some cases. E.g. this was observed on hibernation process: Unable to handle kernel NULL pointer dereference at virtual address 0 Backtrace: (handle_edge_irq) from (resend_irqs) (resend_irqs) from (tasklet_action) (tasklet_action) from (__do_softirq) (__do_softirq) from (run_ksoftirqd) (run_ksoftirqd) from (smpboot_thread_fn) (smpboot_thread_fn) from (kthread) (kthread) from (ret_from_fork) Signed-off-by: Semen Protsenko --- drivers/gpio/gpio-max732x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpio/gpio-max732x.c b/drivers/gpio/gpio-max732x.c index 1885e5c..edade14 100644 --- a/drivers/gpio/gpio-max732x.c +++ b/drivers/gpio/gpio-max732x.c @@ -530,7 +530,7 @@ static int max732x_irq_setup(struct max732x_chip *chip, ret = gpiochip_irqchip_add(&chip->gpio_chip, &max732x_irq_chip, irq_base, - handle_edge_irq, + handle_level_irq, IRQ_TYPE_NONE); if (ret) { dev_err(&client->dev,