| From a7227a0faa117d0bc532aea546ae5ac5f89e8ed7 Mon Sep 17 00:00:00 2001 |
| From: Guennadi Liakhovetski <g.liakhovetski@gmx.de> |
| Date: Fri, 23 Nov 2012 20:55:06 +0100 |
| Subject: PM / QoS: fix wrong error-checking condition |
| |
| From: Guennadi Liakhovetski <g.liakhovetski@gmx.de> |
| |
| commit a7227a0faa117d0bc532aea546ae5ac5f89e8ed7 upstream. |
| |
| 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 <g.liakhovetski@gmx.de> |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/base/power/qos.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/base/power/qos.c |
| +++ b/drivers/base/power/qos.c |
| @@ -446,7 +446,7 @@ int dev_pm_qos_add_ancestor_request(stru |
| if (ancestor) |
| error = dev_pm_qos_add_request(ancestor, req, value); |
| |
| - if (error) |
| + if (error < 0) |
| req->dev = NULL; |
| |
| return error; |