hwmon: (dell-smm) Cache fan_type() calls and change fan detection
authorPali Rohár <pali.rohar@gmail.com>
Fri, 17 Jun 2016 22:54:47 +0000 (00:54 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 27 Jul 2016 16:47:37 +0000 (09:47 -0700)
commit3bb6a5196da9c8135b8758c6fe98d59fb4d9daf0
tree66eb07fdd7d2379752d323ec9e27e76ae7c8bf89
parent9a3d983a442aaaaa1b2c64f1c6b4b9d086db5a78
hwmon: (dell-smm) Cache fan_type() calls and change fan detection

commit 5ce91714b0d8c0a3ff9b858966721f508351cf4c upstream.

On more Dell machines (e.g. Dell Precision M3800) fan_type() call is too
expensive (CPU is too long in SMM mode) and cause kernel to hang. This is
bug in Dell SMM or BIOS.

This patch caches type for each fan (as it should not change) and changes
the way how fan presense is detected. First it try function fan_status()
as was before commit f989e55452c7 ("i8k: Add support for fan labels"). And
if that fails fallback to fan_type(). *_status() functions can fail in case
fan is not currently accessible (e.g. present on GPU which is currently
turned off).

Reported-by: Tolga Cakir <cevelnet@gmail.com>
Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
Link: https://bugzilla.kernel.org/show_bug.cgi?id=112021
Tested-by: Tolga Cakir <cevelnet@gmail.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hwmon/dell-smm-hwmon.c