Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp8110893imu; Tue, 4 Dec 2018 03:11:13 -0800 (PST) X-Google-Smtp-Source: AFSGD/V+HQw8TEVVyKupnOexxvAY5qO/0pE1E1kCVSyMfkxxvq61Ra28lk+uMZthxRtaUpieo4XH X-Received: by 2002:a63:6f0d:: with SMTP id k13mr16245524pgc.42.1543921873825; Tue, 04 Dec 2018 03:11:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543921873; cv=none; d=google.com; s=arc-20160816; b=jFSpYequauU5TiNRt1g2d65/mZcKBo1k4TFLADCFBa60iApU9E/IeKFUYoiVLhGcMN T8LXQb9WBnLuuTP+Gt8gsC6oWZw6mARQTPLhPH2LKXlt0ktqXgCjoZ37Phm6/puSxidS Z2+Hz95SDcHdc5TCgs4mcXqgMYAakewNDIJ4OmlZ/Z+j+/HFwwDX9GLRPVCPRaBxQUE2 y7ABHAUIQY2cLPFC5NQZmrs6eX8rG0e5WemC0uAbkR6j1/3hlcScT6KDHR7yNz1wcN5n tjn1suTyI7LovbFN+hCzYDIJQjQnKMgHxQXMB2/kB0tShRurV15YRZVgJdNXzJTDr1vF Srzg== 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=+raEs1pIrDP8hqvpZkWMm5uDYR/tvs8PlrFwRCxl0Yk=; b=zwbGTKMJM8werTJtGzCD4S3hpuby4hxJdPMV5SeTxl4kUfr3xAeGb1vmSRNrW2sUrS c/pAVk65EtCddeQOCoryzCZ/kD9EbB7qif8zrS8gORImTm2WFijTCi5bzbXFI721GKpM LsxCbnMvvDe9Q/beClxn9u2Z0h1OJ2dNe8WinD0vIskv0TLj4VbCUjPUdB4htFQDcd10 0e9t0oEg/VFGL+HFtEDmQdQG0kHuXVgiJUXBzWw9jkgtpuEUt48BnQDDlyPDA5TaUsQG EUupsbizE0prxkcqna1SfQQNqivVtBnG83bMqO0JO21P7oTluQDfnfzOx7+PKLcolOMl 1R1w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=wHmuXPun; 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 204si15603935pfu.273.2018.12.04.03.10.59; Tue, 04 Dec 2018 03:11:13 -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=wHmuXPun; 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 S1728769AbeLDLJR (ORCPT + 99 others); Tue, 4 Dec 2018 06:09:17 -0500 Received: from mail.kernel.org ([198.145.29.99]:59016 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727990AbeLDLJP (ORCPT ); Tue, 4 Dec 2018 06:09:15 -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 CA437214F1; Tue, 4 Dec 2018 11:09:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1543921754; bh=FnTNQ7yGqM0FCbmxrzJlbyoZSRG1bUnf4not8H9g2nI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wHmuXPuneUvon2JGlrZqh3RnJjS/IncJ4AmiXPetzrD4R0njNGQ5YIQ4l7fcP3DFR dZJ9rN2h1v/e4VRyIF956agy1Ip0dLBSpo7AH9MFAxvjPAwp42CchvJL3brMmpSGW4 i8sV2J0/5u6TCkwqWajpiYRkBErSDh+M1w2tSbdA= 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.9 39/50] iio:st_magn: Fix enable device after trigger Date: Tue, 4 Dec 2018 11:50:34 +0100 Message-Id: <20181204103716.461659198@linuxfoundation.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181204103714.485546262@linuxfoundation.org> References: <20181204103714.485546262@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.9-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, };