Arnd Bergmann
287980e49f
remove lots of IS_ERR_VALUE abuses
...
Most users of IS_ERR_VALUE() in the kernel are wrong, as they
pass an 'int' into a function that takes an 'unsigned long'
argument. This happens to work because the type is sign-extended
on 64-bit architectures before it gets converted into an
unsigned type.
However, anything that passes an 'unsigned short' or 'unsigned int'
argument into IS_ERR_VALUE() is guaranteed to be broken, as are
8-bit integers and types that are wider than 'unsigned long'.
Andrzej Hajda has already fixed a lot of the worst abusers that
were causing actual bugs, but it would be nice to prevent any
users that are not passing 'unsigned long' arguments.
This patch changes all users of IS_ERR_VALUE() that I could find
on 32-bit ARM randconfig builds and x86 allmodconfig. For the
moment, this doesn't change the definition of IS_ERR_VALUE()
because there are probably still architecture specific users
elsewhere.
Almost all the warnings I got are for files that are better off
using 'if (err)' or 'if (err < 0)'.
The only legitimate user I could find that we get a warning for
is the (32-bit only) freescale fman driver, so I did not remove
the IS_ERR_VALUE() there but changed the type to 'unsigned long'.
For 9pfs, I just worked around one user whose calling conventions
are so obscure that I did not dare change the behavior.
I was using this definition for testing:
#define IS_ERR_VALUE(x) ((unsigned long*)NULL == (typeof (x)*)NULL && \
unlikely((unsigned long long)(x) >= (unsigned long long)(typeof(x))-MAX_ERRNO))
which ends up making all 16-bit or wider types work correctly with
the most plausible interpretation of what IS_ERR_VALUE() was supposed
to return according to its users, but also causes a compile-time
warning for any users that do not pass an 'unsigned long' argument.
I suggested this approach earlier this year, but back then we ended
up deciding to just fix the users that are obviously broken. After
the initial warning that caused me to get involved in the discussion
(fs/gfs2/dir.c) showed up again in the mainline kernel, Linus
asked me to send the whole thing again.
[ Updated the 9p parts as per Al Viro - Linus ]
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Andrzej Hajda <a.hajda@samsung.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Link: https://lkml.org/lkml/2016/1/7/363
Link: https://lkml.org/lkml/2016/5/27/486
Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> # For nvmem part
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-05-27 15:26:11 -07:00
..
acpi-cpufreq.c
cpufreq: ACPI: Remove freq_table from acpi_cpufreq_data
2016-04-09 01:54:31 +02:00
amd_freq_sensitivity.c
cpufreq: governor: Make governor private data per-policy
2016-03-09 14:41:08 +01:00
arm_big_little.c
cpufreq: arm_big_little: use generic OPP functions for {init, free}_opp_table
2016-05-05 01:40:04 +02:00
arm_big_little.h
cpufreq: arm_big_little: use generic OPP functions for {init, free}_opp_table
2016-05-05 01:40:04 +02:00
arm_big_little_dt.c
cpufreq: arm_big_little: use generic OPP functions for {init, free}_opp_table
2016-05-05 01:40:04 +02:00
at32ap-cpufreq.c
blackfin-cpufreq.c
blackfin-cpufreq: Mark cpu_set_cclk() as static
2015-12-28 01:51:36 +01:00
cppc_cpufreq.c
cpufreq: ACPI / CPPC: Add module support for cppc_cpufreq driver
2016-04-25 15:59:35 +02:00
cpufreq-dt-platdev.c
cpufreq: tango: Use generic platdev driver
2016-05-05 01:36:57 +02:00
cpufreq-dt.c
cpufreq: dt: Kill platform-data
2016-04-28 15:22:43 +02:00
cpufreq-nforce2.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
cpufreq.c
cpufreq: simplified goto out in cpufreq_register_driver()
2016-05-18 02:34:41 +02:00
cpufreq_conservative.c
cpufreq: governor: New data type for management part of dbs_data
2016-04-02 01:09:00 +02:00
cpufreq_governor.c
cpufreq: governor: Fix handling of special cases in dbs_update()
2016-05-06 14:24:23 +02:00
cpufreq_governor.h
cpufreq: governor: Change confusing struct field and variable names
2016-04-28 15:10:08 +02:00
cpufreq_governor_attr_set.c
cpufreq: governor: Move abstract gov_attr_set code to seperate file
2016-04-02 01:09:01 +02:00
cpufreq_ondemand.c
cpufreq: governor: New data type for management part of dbs_data
2016-04-02 01:09:00 +02:00
cpufreq_ondemand.h
cpufreq: governor: Relocate definitions of tuners structures
2016-03-09 14:41:09 +01:00
cpufreq_performance.c
cpufreq: Clean up default and fallback governor setup
2016-02-05 02:37:42 +01:00
cpufreq_powersave.c
cpufreq: Clean up default and fallback governor setup
2016-02-05 02:37:42 +01:00
cpufreq_stats.c
cpufreq: stats: drop unnecessary locking
2015-01-23 23:06:45 +01:00
cpufreq_userspace.c
cpufreq: Fix GOV_LIMITS handling for the userspace governor
2016-05-05 01:30:38 +02:00
cris-artpec3-cpufreq.c
cris-etraxfs-cpufreq.c
davinci-cpufreq.c
dbx500-cpufreq.c
e_powersaver.c
cpufreq: e_powersaver: Use IS_ENABLED() instead of checking for built-in or module
2016-04-27 22:42:34 +02:00
elanfreq.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
exynos5440-cpufreq.c
PM / OPP: Prefix exported opp routines with dev_pm_opp_
2015-09-15 02:03:16 +02:00
freq_table.c
cpufreq: Allow drivers to enable boost support after registering driver
2015-08-07 03:25:23 +02:00
gx-suspmod.c
cpufreq: gx-suspmod: Fix two typos in two comments
2015-06-15 15:46:15 +02:00
highbank-cpufreq.c
ia64-acpi-cpufreq.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
imx6q-cpufreq.c
Merge branch 'pm-opp'
2015-11-02 00:54:37 +01:00
integrator-cpufreq.c
cpufreq: integrator: Fix module autoload for OF platform driver
2015-09-25 23:29:35 +02:00
intel_pstate.c
intel_pstate: Simplify conditional in intel_pstate_set_policy()
2016-05-18 02:26:33 +02:00
Kconfig
Merge branch 'pm-cpufreq-sched' into pm-cpufreq
2016-05-11 22:48:20 +02:00
Kconfig.arm
cpufreq: hisilicon: Use generic platdev driver
2016-04-25 16:18:24 +02:00
Kconfig.powerpc
cpufreq: qoriq: rename the driver
2015-03-18 22:35:16 +01:00
Kconfig.x86
cpufreq: intel_pstate: Enforce _PPC limits
2016-04-28 01:01:39 +02:00
kirkwood-cpufreq.c
longhaul.c
Power management material for v4.7-rc1
2016-05-16 19:17:22 -07:00
longhaul.h
longrun.c
loongson1-cpufreq.c
CPUFREQ: Loongson1: Replace goto out with return in ls1x_cpufreq_probe()
2016-05-13 14:02:08 +02:00
loongson2_cpufreq.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
Makefile
Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
2016-05-19 10:02:26 -07:00
maple-cpufreq.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
mt8173-cpufreq.c
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux
2016-05-26 09:23:43 -07:00
mvebu-cpufreq.c
cpufreq: mvebu: Move cpufreq code into drivers/cpufreq/
2016-04-28 15:22:43 +02:00
omap-cpufreq.c
remove lots of IS_ERR_VALUE abuses
2016-05-27 15:26:11 -07:00
p4-clockmod.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
pasemi-cpufreq.c
pcc-cpufreq.c
cpufreq: pcc-cpufreq: update default value of cpuinfo_transition_latency
2015-12-10 00:17:03 +01:00
pmac32-cpufreq.c
powerpc updates for 4.7
2016-05-20 10:12:41 -07:00
pmac64-cpufreq.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
powernow-k6.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
powernow-k7.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
powernow-k7.h
powernow-k8.c
ACPI / processor: Drop an unused argument of a cleanup routine
2015-07-22 22:11:16 +02:00
powernow-k8.h
powernv-cpufreq.c
cpufreq: powernv: del_timer_sync when global and local pstate are equal
2016-05-11 02:28:00 +02:00
ppc_cbe_cpufreq.c
ppc_cbe_cpufreq.h
cpufreq: e_powersaver: Use IS_ENABLED() instead of checking for built-in or module
2016-04-27 22:42:34 +02:00
ppc_cbe_cpufreq_pervasive.c
ppc_cbe_cpufreq_pmi.c
drivers/cpufreq: make ppc_cbe_cpufreq_pmi driver explicitly non-modular
2016-04-11 20:30:43 +10:00
pxa2xx-cpufreq.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
pxa3xx-cpufreq.c
qoriq-cpufreq.c
cpufreq: qoriq: Fix cooling device registration issue during suspend
2016-04-25 16:07:02 +02:00
s3c24xx-cpufreq-debugfs.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
s3c24xx-cpufreq.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
s3c64xx-cpufreq.c
s3c2410-cpufreq.c
s3c2412-cpufreq.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
s3c2416-cpufreq.c
cpufreq: s3c: remove incorrect __init annotations
2015-02-19 06:36:53 +01:00
s3c2440-cpufreq.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
s5pv210-cpufreq.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
sa1100-cpufreq.c
sa1110-cpufreq.c
sc520_freq.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
scpi-cpufreq.c
cpufreq: arm_big_little: use generic OPP functions for {init, free}_opp_table
2016-05-05 01:40:04 +02:00
sfi-cpufreq.c
cpufreq: sfi: use kmemdup rather than duplicating its implementation
2015-09-01 15:51:15 +02:00
sh-cpufreq.c
sparc-us2e-cpufreq.c
sparc-us3-cpufreq.c
spear-cpufreq.c
speedstep-centrino.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
speedstep-ich.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
speedstep-lib.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
speedstep-lib.h
speedstep-smi.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
sti-cpufreq.c
cpufreq: st: enable selective initialization based on the platform
2016-04-28 15:25:56 +02:00
tegra20-cpufreq.c
cpufreq: tegra20: remove superfluous CONFIG_PM ifdefs
2015-09-26 03:00:57 +02:00
tegra124-cpufreq.c
cpufreq: tegra124: No need of setting platform-data
2016-04-09 01:12:09 +02:00
unicore2-cpufreq.c
vexpress-spc-cpufreq.c
cpufreq: arm_big_little: use generic OPP functions for {init, free}_opp_table
2016-05-05 01:40:04 +02:00