Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp8114394imu; Tue, 4 Dec 2018 03:14:51 -0800 (PST) X-Google-Smtp-Source: AFSGD/X3F/TAg6BWebg1+BaSQvS2+NLcnvyQsP5FzjyNf3eaUhh7mvSU+oSBCKhOFDRPIPZNYKaT X-Received: by 2002:a17:902:4681:: with SMTP id p1mr20150573pld.184.1543922091382; Tue, 04 Dec 2018 03:14:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543922091; cv=none; d=google.com; s=arc-20160816; b=ULxhu50FPcjGsbHrZ4SZRbP6PDgGXTyP5+9BBM39B0PWMOvAK/dry/TOTa0ot00iAF +pMo0GVO4l1pDyyxjKNHnnNuWIeHoMdhA/M3El/a99NNzRG0mSBNVyd80IORLdPBcp7k Txax3d/Ua5KGa7BKS+y3MmqqN9bNtAn4y5hXnesF9d+ACAuIqYfXm07+HU7L2f32eIRR PJZgQ8nFnkCHH0cVGY4EDZVX+InLPaRL9p3A3w+uNeB7cDWIUA96XBn8Rc66Lb/Cnj4T ya2Bq8am9qfNlgdmA8o6PphI+XSzPqO83uVVP6A72RgfAVZzGshD3TDKl0XOxutpToPe gdpw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=0AYVv71wEmx/IoHQYVwsngdG9HrH6OomlJANx0a7OT8=; b=rYeq9NiXYBgoOnVB7UvFPQBmkRc/miTA0PfrFNZv7IbGTKBEHVCHWuiAVcRdgzQEUy WYHtfwMZbbFdGCKzdc/Wpk4WZ77YAZFzyPjlp7gvjtv4J/tMbYWM7v7eXQCUMIt3gEH9 7uJf5asK32rX1NQHl5fOPIDD4hdSv/IHBPqJWzylosbazxy/ER+eyBA/CgYAFdLjjIct E+GvrrTwxIi+Bzh+arGNVVfW1Ysukd/s+7Avtc4j8el/e8sihtDKGGYS9nQjxqJX8Elu EmAQfz4kqRV8pGLae4X0lTz3MZ/MJ8jmq18m2G0yExgStRpl/VnFBUyVQBal9If2UMLJ TKmA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=rjW5PM+0; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r8si14615591pgr.252.2018.12.04.03.14.36; Tue, 04 Dec 2018 03:14:51 -0800 (PST) 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=pass header.i=@kernel.org header.s=default header.b=rjW5PM+0; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728433AbeLDLHT (ORCPT + 99 others); Tue, 4 Dec 2018 06:07:19 -0500 Received: from mail.kernel.org ([198.145.29.99]:56336 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727597AbeLDLHS (ORCPT ); Tue, 4 Dec 2018 06:07:18 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B590D214ED; Tue, 4 Dec 2018 11:07:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1543921637; bh=O+0D3KoPJBR7V7XRXYEnpyoZOmZ0i8bxGTP4owd4bg0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rjW5PM+0T1l4AgU8AkCSiqvewWtLFIDfgYJGFPr6OAunUyHokOp08qErYDl0EdHaC Ya6SESeJt+hLsne/WckHrp2gH093iD/86hajCDMqbfapF5wc9N5GN4+dWDcQGbZGDT /Rckm0C5qn4PF/6tEA1VgYOc9344bjQ9BNDeSfSs= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Martin Kelly , Denis Ciocca , Stable@vger.kernel.org, Jonathan Cameron Subject: [PATCH 4.14 141/146] iio:st_magn: Fix enable device after trigger Date: Tue, 4 Dec 2018 11:50:27 +0100 Message-Id: <20181204103732.498749689@linuxfoundation.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181204103726.750894136@linuxfoundation.org> References: <20181204103726.750894136@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Martin Kelly commit fe5192ac81ad0d4dfe1395d11f393f0513c15f7f upstream. Currently, we enable the device before we enable the device trigger. At high frequencies, this can cause interrupts that don't yet have a poll function associated with them and are thus treated as spurious. At high frequencies with level interrupts, this can even cause an interrupt storm of repeated spurious interrupts (~100,000 on my Beagleboard with the LSM9DS1 magnetometer). If these repeat too much, the interrupt will get disabled and the device will stop functioning. To prevent these problems, enable the device prior to enabling the device trigger, and disable the divec prior to disabling the trigger. This means there's no window of time during which the device creates interrupts but we have no trigger to answer them. Fixes: 90efe055629 ("iio: st_sensors: harden interrupt handling") Signed-off-by: Martin Kelly Tested-by: Denis Ciocca Cc: Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman --- drivers/iio/magnetometer/st_magn_buffer.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) --- a/drivers/iio/magnetometer/st_magn_buffer.c +++ b/drivers/iio/magnetometer/st_magn_buffer.c @@ -30,11 +30,6 @@ int st_magn_trig_set_state(struct iio_tr return st_sensors_set_dataready_irq(indio_dev, state); } -static int st_magn_buffer_preenable(struct iio_dev *indio_dev) -{ - return st_sensors_set_enable(indio_dev, true); -} - static int st_magn_buffer_postenable(struct iio_dev *indio_dev) { int err; @@ -50,7 +45,7 @@ static int st_magn_buffer_postenable(str if (err < 0) goto st_magn_buffer_postenable_error; - return err; + return st_sensors_set_enable(indio_dev, true); st_magn_buffer_postenable_error: kfree(mdata->buffer_data); @@ -63,11 +58,11 @@ static int st_magn_buffer_predisable(str int err; struct st_sensor_data *mdata = iio_priv(indio_dev); - err = iio_triggered_buffer_predisable(indio_dev); + err = st_sensors_set_enable(indio_dev, false); if (err < 0) goto st_magn_buffer_predisable_error; - err = st_sensors_set_enable(indio_dev, false); + err = iio_triggered_buffer_predisable(indio_dev); st_magn_buffer_predisable_error: kfree(mdata->buffer_data); @@ -75,7 +70,6 @@ st_magn_buffer_predisable_error: } static const struct iio_buffer_setup_ops st_magn_buffer_setup_ops = { - .preenable = &st_magn_buffer_preenable, .postenable = &st_magn_buffer_postenable, .predisable = &st_magn_buffer_predisable, };