From patchwork Fri Jan 11 17:43:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 1023709 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=bgdev-pl.20150623.gappssmtp.com header.i=@bgdev-pl.20150623.gappssmtp.com header.b="gDSadxU1"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43bqwp1qwSz9sCr for ; Sat, 12 Jan 2019 04:43:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731382AbfAKRnx (ORCPT ); Fri, 11 Jan 2019 12:43:53 -0500 Received: from mail-wm1-f65.google.com ([209.85.128.65]:34229 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731586AbfAKRnx (ORCPT ); Fri, 11 Jan 2019 12:43:53 -0500 Received: by mail-wm1-f65.google.com with SMTP id y185so2524790wmd.1 for ; Fri, 11 Jan 2019 09:43:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=73ZZ4fNLAhFNtb9hEaivYNzAY6zrbpKkLXaUVSUSU2A=; b=gDSadxU1et7O7+rVNReKBU+SI2e8zUA3yfc/XNGLlC+37bmoxWI8LiIebDH1uLpH5Y gF6DlxelE0/ELmF7X2OgthLI9ia/jwp6ymv62MUZ4ZRtX5cwu31n6vxKoD+zl2ZCyDAt S1ybI2b25oO3j8HcV2zrh6k1wf99fKhM//ZFfHay97U25cuhspeF7qb9EOuohfX7LR0B lpgwt69YNR7qndQwRLEIbd0jMIhLmvY66T4v4sCg1bYfYt+SMs1Qbq/oLlmsL9iwuIbL eIiMfGhbQLPbas6YcEBwTbbDrtiwigRfy1qBmLomdbgfM08sYT2euvcK1hXlvgcfZdl2 tZSg== 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:mime-version :content-transfer-encoding; bh=73ZZ4fNLAhFNtb9hEaivYNzAY6zrbpKkLXaUVSUSU2A=; b=L7MFFeYqIdX+IIy6E9pdax2Q+KE+LR1l3sl63nzxYrN+U4nUw4LCZK2up640N6IyZH KMxYLxdtkcSj6Pzd5Ca8c2edJeRCQxvLmEI4CpdJCXWBt569SLlPGvmmLtgMGzQF3OIy UuuqtkH/WICqi5nHZjEsVoIPADTL6f4cDrBq11QhEF+AGg/UBuiy9iD1K3RcrDf54Xy4 1uLkKgUqGTf7ALYfCs69n4Hc5GxqowOL9kY4kHTVfNeZ27V+XTnic7RSAaey5MVqt/No ntoD/fPPplckvHe4GVLtIYhDFc3IeWiUN9hdoK+Wxt3bpUcYh9aISRn0wmd5hSz0H5Bj fspA== X-Gm-Message-State: AJcUukfqOjrEzragVYKiKPyQ9oqUkaWrhOhn6SUi2xhagd77cj5NCoLz IzDV/e/fzoRLPnGKb9yKplvVY+K7hlPizA== X-Google-Smtp-Source: ALg8bN4uZgkSLTUZjmvBnlIS/Jvw6R9aKNb5wnDZ69Gs5lGAJRYK+eaI4Z0eUcUnUkM1GS/4vEjSHw== X-Received: by 2002:a1c:f509:: with SMTP id t9mr3337128wmh.76.1547228631152; Fri, 11 Jan 2019 09:43:51 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id 129sm28839338wmd.18.2019.01.11.09.43.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 11 Jan 2019 09:43:50 -0800 (PST) From: Bartosz Golaszewski To: Linus Walleij Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski , stable@vger.kernel.org Subject: [PATCH v2] gpiolib: fix line event timestamps for nested irqs Date: Fri, 11 Jan 2019 18:43:47 +0100 Message-Id: <20190111174347.25040-1-brgl@bgdev.pl> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org From: Bartosz Golaszewski Nested interrupts run inside the calling thread's context and the top half handler is never called which means that we never read the timestamp. This issue came up when trying to read line events from a gpiochip using regmap_irq_chip for interrupts. Fix it by reading the timestamp from the irq thread function if it's still 0 by the time the second handler is called. Fixes: d58f2bf261fd ("gpio: Timestamp events in hardirq handler") Cc: stable@vger.kernel.org Signed-off-by: Bartosz Golaszewski --- v1 -> v2: - add Fixes: to the commit message and Cc stable - directly assing ktime_get_real_ns() to ge.timestamp drivers/gpio/gpiolib.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 1651d7f0a303..d1adfdf50fb3 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -828,7 +828,14 @@ static irqreturn_t lineevent_irq_thread(int irq, void *p) /* Do not leak kernel stack to userspace */ memset(&ge, 0, sizeof(ge)); - ge.timestamp = le->timestamp; + /* + * We may be running from a nested threaded interrupt in which case + * we didn't get the timestamp from lineevent_irq_handler(). + */ + if (!le->timestamp) + ge.timestamp = ktime_get_real_ns(); + else + ge.timestamp = le->timestamp; if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE && le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) {