From patchwork Fri Nov 23 15:02:56 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guennadi Liakhovetski X-Patchwork-Id: 1795801 Return-Path: X-Original-To: patchwork-linux-pm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id B5677DF254 for ; Fri, 23 Nov 2012 15:02:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751429Ab2KWPC7 (ORCPT ); Fri, 23 Nov 2012 10:02:59 -0500 Received: from moutng.kundenserver.de ([212.227.17.9]:51691 "EHLO moutng.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751336Ab2KWPC6 (ORCPT ); Fri, 23 Nov 2012 10:02:58 -0500 Received: from axis700.grange (dslb-178-006-245-083.pools.arcor-ip.net [178.6.245.83]) by mrelayeu.kundenserver.de (node=mreu4) with ESMTP (Nemesis) id 0MPeNx-1Tg1WD4Arp-005UxZ; Fri, 23 Nov 2012 16:02:57 +0100 Received: by axis700.grange (Postfix, from userid 1000) id 8A0DD40B99; Fri, 23 Nov 2012 16:02:56 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by axis700.grange (Postfix) with ESMTP id 87DD240B98; Fri, 23 Nov 2012 16:02:56 +0100 (CET) Date: Fri, 23 Nov 2012 16:02:56 +0100 (CET) From: Guennadi Liakhovetski X-X-Sender: lyakh@axis700.grange To: linux-pm@vger.kernel.org cc: "Rafael J. Wysocki" Subject: [PATCH 3.7+stable] pm: fix wrong error-checking condition Message-ID: MIME-Version: 1.0 X-Provags-ID: V02:K0:STbRHdPgBuetmLsvWeR3SJaHzV97MLT9Fnbb6GNou5P AtW9mwVf0dVqf1sONdDh6AWlgVKkyvp4umXBBbfOtFg5sdAPHz EmZaPoVEyA81M4kdhX2InJhmUe1SRzYvZBhqYiy3fpXMn+U91b i7JD2LU214gbQfGgiPp++Nmz2s/IMoTsnpcNwpjQIDcLfQ6qrx MxJC+YQUhIjQaatnt34el0Ju/wKi3UrAnc1WM8PIpPb63cpDcL EBTlNH+a6jPqfW+ymLV7Lqe0oW9xR/hCvGF2rPkU4VTY5LLI9d ln1xvfwn6BnZMqMIr7Ccz4fn8zHFtrZlHoAdvUZTAXJMSDKzcI pl9ek44+2QwA6E+iQr8mgInZl/9LcKHHgrfZQQrnJn6vsDoiLd XbKrP+6gPbbBw== Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org dev_pm_qos_add_request() can return 0, 1, or a negative error code, therefore the correct error test is "if (error < 0)." Checking just for non-zero return code leads to erroneous setting of the req->dev pointer to NULL, which then leads to a repeated call to dev_pm_qos_add_ancestor_request() in st1232_ts_irq_handler(). This in turn leads to an Oops, when the I2C host adapter is unloaded and reloaded again because of the inconsistent state of its QoS request list. Signed-off-by: Guennadi Liakhovetski --- Hi Rafael, please push to 3.7 and to stable. drivers/base/power/qos.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/base/power/qos.c b/drivers/base/power/qos.c index 74a67e0..fbbd4ed 100644 --- a/drivers/base/power/qos.c +++ b/drivers/base/power/qos.c @@ -451,7 +451,7 @@ int dev_pm_qos_add_ancestor_request(struct device *dev, if (ancestor) error = dev_pm_qos_add_request(ancestor, req, value); - if (error) + if (error < 0) req->dev = NULL; return error;