aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-07-30 20:25:34 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-07-30 20:25:34 -0400
commit27c1ee3f929555b71fa39ec0d81a7e7185de1b16 (patch)
tree42e40bdfe4efac660d650658019391536ce67a42
parent37cd9600a9e20359b0283983c9e3a55d84347168 (diff)
parent086ff4b3a7fb9cdf41e6a5d0ccd99b86d84633a1 (diff)
Merge branch 'akpm' (Andrew's patch-bomb)
Merge Andrew's first set of patches: "Non-MM patches: - lots of misc bits - tree-wide have_clk() cleanups - quite a lot of printk tweaks. I draw your attention to "printk: convert the format for KERN_<LEVEL> to a 2 byte pattern" which looks a bit scary. But afaict it's solid. - backlight updates - lib/ feature work (notably the addition and use of memweight()) - checkpatch updates - rtc updates - nilfs updates - fatfs updates (partial, still waiting for acks) - kdump, proc, fork, IPC, sysctl, taskstats, pps, etc - new fault-injection feature work" * Merge emailed patches from Andrew Morton <akpm@linux-foundation.org>: (128 commits) drivers/misc/lkdtm.c: fix missing allocation failure check lib/scatterlist: do not re-write gfp_flags in __sg_alloc_table() fault-injection: add tool to run command with failslab or fail_page_alloc fault-injection: add selftests for cpu and memory hotplug powerpc: pSeries reconfig notifier error injection module memory: memory notifier error injection module PM: PM notifier error injection module cpu: rewrite cpu-notifier-error-inject module fault-injection: notifier error injection c/r: fcntl: add F_GETOWNER_UIDS option resource: make sure requested range is included in the root range include/linux/aio.h: cpp->C conversions fs: cachefiles: add support for large files in filesystem caching pps: return PTR_ERR on error in device_create taskstats: check nla_reserve() return sysctl: suppress kmemleak messages ipc: use Kconfig options for __ARCH_WANT_[COMPAT_]IPC_PARSE_VERSION ipc: compat: use signed size_t types for msgsnd and msgrcv ipc: allow compat IPC version field parsing if !ARCH_WANT_OLD_COMPAT_IPC ipc: add COMPAT_SHMLBA support ...
-rw-r--r--Documentation/fault-injection/fault-injection.txt27
-rw-r--r--Documentation/fault-injection/notifier-error-inject.txt99
-rw-r--r--Documentation/printk-formats.txt15
-rw-r--r--Documentation/sysctl/fs.txt18
-rw-r--r--MAINTAINERS1
-rw-r--r--arch/Kconfig7
-rw-r--r--arch/alpha/Kconfig1
-rw-r--r--arch/alpha/include/asm/unistd.h1
-rw-r--r--arch/alpha/kernel/smc37c669.c12
-rw-r--r--arch/arm/Kconfig2
-rw-r--r--arch/arm/include/asm/unistd.h1
-rw-r--r--arch/arm/lib/io-acorn.S3
-rw-r--r--arch/arm/mach-netx/fb.c23
-rw-r--r--arch/arm/vfp/vfphw.S7
-rw-r--r--arch/avr32/Kconfig1
-rw-r--r--arch/avr32/boards/atstk1000/atstk1002.c2
-rw-r--r--arch/avr32/include/asm/unistd.h1
-rw-r--r--arch/avr32/mm/fault.c33
-rw-r--r--arch/blackfin/Kconfig1
-rw-r--r--arch/blackfin/include/asm/unistd.h1
-rw-r--r--arch/cris/Kconfig1
-rw-r--r--arch/cris/include/asm/unistd.h1
-rw-r--r--arch/frv/Kconfig1
-rw-r--r--arch/frv/include/asm/unistd.h1
-rw-r--r--arch/frv/kernel/kernel_thread.S2
-rw-r--r--arch/h8300/Kconfig1
-rw-r--r--arch/h8300/include/asm/unistd.h1
-rw-r--r--arch/m32r/Kconfig1
-rw-r--r--arch/m32r/include/asm/unistd.h1
-rw-r--r--arch/m68k/Kconfig1
-rw-r--r--arch/m68k/include/asm/unistd.h1
-rw-r--r--arch/microblaze/Kconfig1
-rw-r--r--arch/microblaze/include/asm/unistd.h1
-rw-r--r--arch/mips/Kconfig2
-rw-r--r--arch/mips/include/asm/unistd.h1
-rw-r--r--arch/mn10300/Kconfig1
-rw-r--r--arch/mn10300/include/asm/unistd.h1
-rw-r--r--arch/powerpc/Kconfig2
-rw-r--r--arch/powerpc/include/asm/unistd.h1
-rw-r--r--arch/s390/Kconfig2
-rw-r--r--arch/s390/include/asm/unistd.h1
-rw-r--r--arch/sh/Kconfig2
-rw-r--r--arch/sh/include/asm/unistd.h1
-rw-r--r--arch/sparc/Kconfig1
-rw-r--r--arch/sparc/include/asm/unistd.h1
-rw-r--r--arch/sparc/kernel/sys_sparc_64.c2
-rw-r--r--arch/x86/Kconfig2
-rw-r--r--arch/x86/include/asm/unistd.h1
-rw-r--r--arch/x86/kernel/e820.c2
-rw-r--r--arch/xtensa/kernel/syscall.c2
-rw-r--r--arch/xtensa/mm/fault.c29
-rw-r--r--drivers/ata/pata_arasan_cf.c14
-rw-r--r--drivers/clk/Kconfig1
-rw-r--r--drivers/clk/clk.c3
-rw-r--r--drivers/firmware/memmap.c8
-rw-r--r--drivers/firmware/pcdp.c4
-rw-r--r--drivers/i2c/busses/i2c-pxa.c7
-rw-r--r--drivers/md/dm-log.c13
-rw-r--r--drivers/media/video/uvc/uvc_ctrl.c5
-rw-r--r--drivers/message/i2o/i2o_config.c7
-rw-r--r--drivers/message/i2o/i2o_proc.c37
-rw-r--r--drivers/misc/lkdtm.c2
-rw-r--r--drivers/misc/ti-st/st_core.c5
-rw-r--r--drivers/net/can/c_can/c_can_platform.c8
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac.h42
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_main.c33
-rw-r--r--drivers/pps/pps.c4
-rw-r--r--drivers/rtc/Kconfig1
-rw-r--r--drivers/rtc/rtc-ab8500.c42
-rw-r--r--drivers/rtc/rtc-coh901331.c61
-rw-r--r--drivers/rtc/rtc-da9052.c5
-rw-r--r--drivers/rtc/rtc-mc13xxx.c6
-rw-r--r--drivers/rtc/rtc-pcf8563.c11
-rw-r--r--drivers/rtc/rtc-pl031.c95
-rw-r--r--drivers/rtc/rtc-r9701.c6
-rw-r--r--drivers/rtc/rtc-s3c.c4
-rw-r--r--drivers/usb/gadget/m66592-udc.c9
-rw-r--r--drivers/usb/gadget/m66592-udc.h5
-rw-r--r--drivers/usb/gadget/r8a66597-udc.c11
-rw-r--r--drivers/usb/gadget/r8a66597-udc.h5
-rw-r--r--drivers/usb/host/r8a66597-hcd.c12
-rw-r--r--drivers/usb/host/r8a66597.h5
-rw-r--r--drivers/usb/musb/musb_core.h8
-rw-r--r--drivers/video/backlight/atmel-pwm-bl.c19
-rw-r--r--drivers/video/backlight/corgi_lcd.c19
-rw-r--r--drivers/video/backlight/l4f00242t03.c29
-rw-r--r--drivers/video/backlight/lm3533_bl.c8
-rw-r--r--drivers/video/backlight/lms283gf05.c24
-rw-r--r--drivers/video/backlight/lp855x_bl.c10
-rw-r--r--drivers/video/backlight/ot200_bl.c21
-rw-r--r--drivers/video/backlight/tosa_bl.c8
-rw-r--r--drivers/video/backlight/tosa_lcd.c7
-rw-r--r--fs/affs/bitmap.c28
-rw-r--r--fs/btrfs/ctree.h13
-rw-r--r--fs/btrfs/disk-io.c2
-rw-r--r--fs/btrfs/relocation.c2
-rw-r--r--fs/btrfs/super.c41
-rw-r--r--fs/cachefiles/rdwr.c2
-rw-r--r--fs/exec.c42
-rw-r--r--fs/ext2/balloc.c14
-rw-r--r--fs/ext2/ialloc.c1
-rw-r--r--fs/ext3/balloc.c2
-rw-r--r--fs/ext3/bitmap.c12
-rw-r--r--fs/ext4/bitmap.c9
-rw-r--r--fs/fat/dir.c255
-rw-r--r--fs/fat/fat.h15
-rw-r--r--fs/fat/inode.c12
-rw-r--r--fs/fat/namei_msdos.c11
-rw-r--r--fs/fat/namei_vfat.c11
-rw-r--r--fs/fcntl.c29
-rw-r--r--fs/hfsplus/super.c2
-rw-r--r--fs/minix/itree_v2.c3
-rw-r--r--fs/nilfs2/alloc.h14
-rw-r--r--fs/nilfs2/bmap.h7
-rw-r--r--fs/nilfs2/btnode.h8
-rw-r--r--fs/nilfs2/cpfile.c10
-rw-r--r--fs/nilfs2/dat.c6
-rw-r--r--fs/nilfs2/export.h8
-rw-r--r--fs/nilfs2/ifile.c6
-rw-r--r--fs/nilfs2/inode.c7
-rw-r--r--fs/nilfs2/ioctl.c4
-rw-r--r--fs/nilfs2/mdt.h7
-rw-r--r--fs/nilfs2/nilfs.h17
-rw-r--r--fs/nilfs2/sufile.c8
-rw-r--r--fs/nilfs2/super.c6
-rw-r--r--fs/nilfs2/the_nilfs.c1
-rw-r--r--fs/nilfs2/the_nilfs.h6
-rw-r--r--fs/ntfs/super.c17
-rw-r--r--fs/ocfs2/localalloc.c8
-rw-r--r--fs/proc/base.c22
-rw-r--r--fs/qnx4/bitmap.c24
-rw-r--r--fs/xattr.c16
-rw-r--r--include/asm-generic/fcntl.h4
-rw-r--r--include/linux/aio.h38
-rw-r--r--include/linux/clk.h168
-rw-r--r--include/linux/compat.h4
-rw-r--r--include/linux/kern_levels.h25
-rw-r--r--include/linux/nilfs2_fs.h63
-rw-r--r--include/linux/platform_data/lp855x.h (renamed from include/linux/lp855x.h)6
-rw-r--r--include/linux/platform_data/mv_usb.h9
-rw-r--r--include/linux/printk.h41
-rw-r--r--include/linux/sched.h13
-rw-r--r--include/linux/shm.h6
-rw-r--r--include/linux/string.h3
-rw-r--r--ipc/compat.c18
-rw-r--r--ipc/shm.c9
-rw-r--r--ipc/syscall.c2
-rw-r--r--ipc/util.c4
-rw-r--r--ipc/util.h2
-rw-r--r--kernel/fork.c40
-rw-r--r--kernel/kexec.c2
-rw-r--r--kernel/kmod.c37
-rw-r--r--kernel/panic.c8
-rw-r--r--kernel/power/suspend.c3
-rw-r--r--kernel/printk.c32
-rw-r--r--kernel/resource.c24
-rw-r--r--kernel/sys.c57
-rw-r--r--kernel/sysctl.c43
-rw-r--r--kernel/taskstats.c5
-rw-r--r--kernel/watchdog.c21
-rw-r--r--lib/Kconfig3
-rw-r--r--lib/Kconfig.debug91
-rw-r--r--lib/Makefile7
-rw-r--r--lib/atomic64_test.c5
-rw-r--r--lib/cpu-notifier-error-inject.c63
-rw-r--r--lib/crc32.c2
-rw-r--r--lib/memory-notifier-error-inject.c48
-rw-r--r--lib/memweight.c38
-rw-r--r--lib/notifier-error-inject.c112
-rw-r--r--lib/notifier-error-inject.h24
-rw-r--r--lib/pSeries-reconfig-notifier-error-inject.c51
-rw-r--r--lib/pm-notifier-error-inject.c49
-rw-r--r--lib/scatterlist.c8
-rw-r--r--lib/spinlock_debug.c2
-rw-r--r--lib/vsprintf.c83
-rw-r--r--mm/memory-failure.c6
-rwxr-xr-xscripts/checkpatch.pl71
-rw-r--r--security/selinux/hooks.c1
-rw-r--r--sound/core/misc.c13
-rw-r--r--tools/testing/fault-injection/failcmd.sh219
-rw-r--r--tools/testing/selftests/Makefile2
-rw-r--r--tools/testing/selftests/cpu-hotplug/Makefile6
-rw-r--r--tools/testing/selftests/cpu-hotplug/on-off-test.sh221
-rw-r--r--tools/testing/selftests/memory-hotplug/Makefile6
-rw-r--r--tools/testing/selftests/memory-hotplug/on-off-test.sh230
185 files changed, 2662 insertions, 1042 deletions
diff --git a/Documentation/fault-injection/fault-injection.txt b/Documentation/fault-injection/fault-injection.txt
index ba4be8b77093..4cf1a2a6bd72 100644
--- a/Documentation/fault-injection/fault-injection.txt
+++ b/Documentation/fault-injection/fault-injection.txt
@@ -240,3 +240,30 @@ trap "echo 0 > /sys/kernel/debug/$FAILTYPE/probability" SIGINT SIGTERM EXIT
240echo "Injecting errors into the module $module... (interrupt to stop)" 240echo "Injecting errors into the module $module... (interrupt to stop)"
241sleep 1000000 241sleep 1000000
242 242
243Tool to run command with failslab or fail_page_alloc
244----------------------------------------------------
245In order to make it easier to accomplish the tasks mentioned above, we can use
246tools/testing/fault-injection/failcmd.sh. Please run a command
247"./tools/testing/fault-injection/failcmd.sh --help" for more information and
248see the following examples.
249
250Examples:
251
252Run a command "make -C tools/testing/selftests/ run_tests" with injecting slab
253allocation failure.
254
255 # ./tools/testing/fault-injection/failcmd.sh \
256 -- make -C tools/testing/selftests/ run_tests
257
258Same as above except to specify 100 times failures at most instead of one time
259at most by default.
260
261 # ./tools/testing/fault-injection/failcmd.sh --times=100 \
262 -- make -C tools/testing/selftests/ run_tests
263
264Same as above except to inject page allocation failure instead of slab
265allocation failure.
266
267 # env FAILCMD_TYPE=fail_page_alloc \
268 ./tools/testing/fault-injection/failcmd.sh --times=100 \
269 -- make -C tools/testing/selftests/ run_tests
diff --git a/Documentation/fault-injection/notifier-error-inject.txt b/Documentation/fault-injection/notifier-error-inject.txt
new file mode 100644
index 000000000000..c83526c364e5
--- /dev/null
+++ b/Documentation/fault-injection/notifier-error-inject.txt
@@ -0,0 +1,99 @@
1Notifier error injection
2========================
3
4Notifier error injection provides the ability to inject artifical errors to
5specified notifier chain callbacks. It is useful to test the error handling of
6notifier call chain failures which is rarely executed. There are kernel
7modules that can be used to test the following notifiers.
8
9 * CPU notifier
10 * PM notifier
11 * Memory hotplug notifier
12 * powerpc pSeries reconfig notifier
13
14CPU notifier error injection module
15-----------------------------------
16This feature can be used to test the error handling of the CPU notifiers by
17injecting artifical errors to CPU notifier chain callbacks.
18
19If the notifier call chain should be failed with some events notified, write
20the error code to debugfs interface
21/sys/kernel/debug/notifier-error-inject/cpu/actions/<notifier event>/error
22
23Possible CPU notifier events to be failed are:
24
25 * CPU_UP_PREPARE
26 * CPU_UP_PREPARE_FROZEN
27 * CPU_DOWN_PREPARE
28 * CPU_DOWN_PREPARE_FROZEN
29
30Example1: Inject CPU offline error (-1 == -EPERM)
31
32 # cd /sys/kernel/debug/notifier-error-inject/cpu
33 # echo -1 > actions/CPU_DOWN_PREPARE/error
34 # echo 0 > /sys/devices/system/cpu/cpu1/online
35 bash: echo: write error: Operation not permitted
36
37Example2: inject CPU online error (-2 == -ENOENT)
38
39 # echo -2 > actions/CPU_UP_PREPARE/error
40 # echo 1 > /sys/devices/system/cpu/cpu1/online
41 bash: echo: write error: No such file or directory
42
43PM notifier error injection module
44----------------------------------
45This feature is controlled through debugfs interface
46/sys/kernel/debug/notifier-error-inject/pm/actions/<notifier event>/error
47
48Possible PM notifier events to be failed are:
49
50 * PM_HIBERNATION_PREPARE
51 * PM_SUSPEND_PREPARE
52 * PM_RESTORE_PREPARE
53
54Example: Inject PM suspend error (-12 = -ENOMEM)
55
56 # cd /sys/kernel/debug/notifier-error-inject/pm/
57 # echo -12 > actions/PM_SUSPEND_PREPARE/error
58 # echo mem > /sys/power/state
59 bash: echo: write error: Cannot allocate memory
60
61Memory hotplug notifier error injection module
62----------------------------------------------
63This feature is controlled through debugfs interface
64/sys/kernel/debug/notifier-error-inject/memory/actions/<notifier event>/error
65
66Possible memory notifier events to be failed are:
67
68 * MEM_GOING_ONLINE
69 * MEM_GOING_OFFLINE
70
71Example: Inject memory hotplug offline error (-12 == -ENOMEM)
72
73 # cd /sys/kernel/debug/notifier-error-inject/memory
74 # echo -12 > actions/MEM_GOING_OFFLINE/error
75 # echo offline > /sys/devices/system/memory/memoryXXX/state
76 bash: echo: write error: Cannot allocate memory
77
78powerpc pSeries reconfig notifier error injection module
79--------------------------------------------------------
80This feature is controlled through debugfs interface
81/sys/kernel/debug/notifier-error-inject/pSeries-reconfig/actions/<notifier event>/error
82
83Possible pSeries reconfig notifier events to be failed are:
84
85 * PSERIES_RECONFIG_ADD
86 * PSERIES_RECONFIG_REMOVE
87 * PSERIES_DRCONF_MEM_ADD
88 * PSERIES_DRCONF_MEM_REMOVE
89
90For more usage examples
91-----------------------
92There are tools/testing/selftests using the notifier error injection features
93for CPU and memory notifiers.
94
95 * tools/testing/selftests/cpu-hotplug/on-off-test.sh
96 * tools/testing/selftests/memory-hotplug/on-off-test.sh
97
98These scripts first do simple online and offline tests and then do fault
99injection tests if notifier error injection module is available.
diff --git a/Documentation/printk-formats.txt b/Documentation/printk-formats.txt
index 5df176ed59b8..7561d7ed8e11 100644
--- a/Documentation/printk-formats.txt
+++ b/Documentation/printk-formats.txt
@@ -53,9 +53,20 @@ Struct Resources:
53 For printing struct resources. The 'R' and 'r' specifiers result in a 53 For printing struct resources. The 'R' and 'r' specifiers result in a
54 printed resource with ('R') or without ('r') a decoded flags member. 54 printed resource with ('R') or without ('r') a decoded flags member.
55 55
56Raw buffer as a hex string:
57 %*ph 00 01 02 ... 3f
58 %*phC 00:01:02: ... :3f
59 %*phD 00-01-02- ... -3f
60 %*phN 000102 ... 3f
61
62 For printing a small buffers (up to 64 bytes long) as a hex string with
63 certain separator. For the larger buffers consider to use
64 print_hex_dump().
65
56MAC/FDDI addresses: 66MAC/FDDI addresses:
57 67
58 %pM 00:01:02:03:04:05 68 %pM 00:01:02:03:04:05
69 %pMR 05:04:03:02:01:00
59 %pMF 00-01-02-03-04-05 70 %pMF 00-01-02-03-04-05
60 %pm 000102030405 71 %pm 000102030405
61 72
@@ -67,6 +78,10 @@ MAC/FDDI addresses:
67 the 'M' specifier to use dash ('-') separators instead of the default 78 the 'M' specifier to use dash ('-') separators instead of the default
68 separator. 79 separator.
69 80
81 For Bluetooth addresses the 'R' specifier shall be used after the 'M'
82 specifier to use reversed byte order suitable for visual interpretation
83 of Bluetooth addresses which are in the little endian order.
84
70IPv4 addresses: 85IPv4 addresses:
71 86
72 %pI4 1.2.3.4 87 %pI4 1.2.3.4
diff --git a/Documentation/sysctl/fs.txt b/Documentation/sysctl/fs.txt
index 13d6166d7a27..8c235b6e4246 100644
--- a/Documentation/sysctl/fs.txt
+++ b/Documentation/sysctl/fs.txt
@@ -163,16 +163,22 @@ This value can be used to query and set the core dump mode for setuid
163or otherwise protected/tainted binaries. The modes are 163or otherwise protected/tainted binaries. The modes are
164 164
1650 - (default) - traditional behaviour. Any process which has changed 1650 - (default) - traditional behaviour. Any process which has changed
166 privilege levels or is execute only will not be dumped 166 privilege levels or is execute only will not be dumped.
1671 - (debug) - all processes dump core when possible. The core dump is 1671 - (debug) - all processes dump core when possible. The core dump is
168 owned by the current user and no security is applied. This is 168 owned by the current user and no security is applied. This is
169 intended for system debugging situations only. Ptrace is unchecked. 169 intended for system debugging situations only. Ptrace is unchecked.
170 This is insecure as it allows regular users to examine the memory
171 contents of privileged processes.
1702 - (suidsafe) - any binary which normally would not be dumped is dumped 1722 - (suidsafe) - any binary which normally would not be dumped is dumped
171 readable by root only. This allows the end user to remove 173 anyway, but only if the "core_pattern" kernel sysctl is set to
172 such a dump but not access it directly. For security reasons 174 either a pipe handler or a fully qualified path. (For more details
173 core dumps in this mode will not overwrite one another or 175 on this limitation, see CVE-2006-2451.) This mode is appropriate
174 other files. This mode is appropriate when administrators are 176 when administrators are attempting to debug problems in a normal
175 attempting to debug problems in a normal environment. 177 environment, and either have a core dump pipe handler that knows
178 to treat privileged core dumps with care, or specific directory
179 defined for catching core dumps. If a core dump happens without
180 a pipe handler or fully qualifid path, a message will be emitted
181 to syslog warning about the lack of a correct setting.
176 182
177============================================================== 183==============================================================
178 184
diff --git a/MAINTAINERS b/MAINTAINERS
index 19f705073942..b2e3d88ff4cd 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2750,6 +2750,7 @@ M: Jingoo Han <jg1.han@samsung.com>
2750L: linux-fbdev@vger.kernel.org 2750L: linux-fbdev@vger.kernel.org
2751S: Maintained 2751S: Maintained
2752F: drivers/video/exynos/exynos_dp* 2752F: drivers/video/exynos/exynos_dp*
2753F: include/video/exynos_dp*
2753 2754
2754EXYNOS MIPI DISPLAY DRIVERS 2755EXYNOS MIPI DISPLAY DRIVERS
2755M: Inki Dae <inki.dae@samsung.com> 2756M: Inki Dae <inki.dae@samsung.com>
diff --git a/arch/Kconfig b/arch/Kconfig
index 8c3d957fa8e2..72f2fa189cc5 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -248,7 +248,14 @@ config HAVE_CMPXCHG_LOCAL
248config HAVE_CMPXCHG_DOUBLE 248config HAVE_CMPXCHG_DOUBLE
249 bool 249 bool
250 250
251config ARCH_WANT_IPC_PARSE_VERSION
252 bool
253
254config ARCH_WANT_COMPAT_IPC_PARSE_VERSION
255 bool
256
251config ARCH_WANT_OLD_COMPAT_IPC 257config ARCH_WANT_OLD_COMPAT_IPC
258 select ARCH_WANT_COMPAT_IPC_PARSE_VERSION
252 bool 259 bool
253 260
254config HAVE_ARCH_SECCOMP_FILTER 261config HAVE_ARCH_SECCOMP_FILTER
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig
index 3de74c9f9610..d5b9b5e645cc 100644
--- a/arch/alpha/Kconfig
+++ b/arch/alpha/Kconfig
@@ -14,6 +14,7 @@ config ALPHA
14 select AUTO_IRQ_AFFINITY if SMP 14 select AUTO_IRQ_AFFINITY if SMP
15 select GENERIC_IRQ_SHOW 15 select GENERIC_IRQ_SHOW
16 select ARCH_WANT_OPTIONAL_GPIOLIB 16 select ARCH_WANT_OPTIONAL_GPIOLIB
17 select ARCH_WANT_IPC_PARSE_VERSION
17 select ARCH_HAVE_NMI_SAFE_CMPXCHG 18 select ARCH_HAVE_NMI_SAFE_CMPXCHG
18 select GENERIC_SMP_IDLE_THREAD 19 select GENERIC_SMP_IDLE_THREAD
19 select GENERIC_CMOS_UPDATE 20 select GENERIC_CMOS_UPDATE
diff --git a/arch/alpha/include/asm/unistd.h b/arch/alpha/include/asm/unistd.h
index d1f23b722df4..633b23b0664a 100644
--- a/arch/alpha/include/asm/unistd.h
+++ b/arch/alpha/include/asm/unistd.h
@@ -470,7 +470,6 @@
470 470
471#define NR_SYSCALLS 504 471#define NR_SYSCALLS 504
472 472
473#define __ARCH_WANT_IPC_PARSE_VERSION
474#define __ARCH_WANT_OLD_READDIR 473#define __ARCH_WANT_OLD_READDIR
475#define __ARCH_WANT_STAT64 474#define __ARCH_WANT_STAT64
476#define __ARCH_WANT_SYS_GETHOSTNAME 475#define __ARCH_WANT_SYS_GETHOSTNAME
diff --git a/arch/alpha/kernel/smc37c669.c b/arch/alpha/kernel/smc37c669.c
index 0435921d41c6..c803fc76ae4f 100644
--- a/arch/alpha/kernel/smc37c669.c
+++ b/arch/alpha/kernel/smc37c669.c
@@ -933,18 +933,6 @@ void SMC37c669_display_device_info(
933 * 933 *
934 *-- 934 *--
935 */ 935 */
936#if 0
937/* $INCLUDE_OPTIONS$ */
938#include "cp$inc:platform_io.h"
939/* $INCLUDE_OPTIONS_END$ */
940#include "cp$src:common.h"
941#include "cp$inc:prototypes.h"
942#include "cp$src:kernel_def.h"
943#include "cp$src:msg_def.h"
944#include "cp$src:smcc669_def.h"
945/* Platform-specific includes */
946#include "cp$src:platform.h"
947#endif
948 936
949#ifndef TRUE 937#ifndef TRUE
950#define TRUE 1 938#define TRUE 1
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 6b86bb963a28..7980873525b2 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -11,6 +11,7 @@ config ARM
11 select RTC_LIB 11 select RTC_LIB
12 select SYS_SUPPORTS_APM_EMULATION 12 select SYS_SUPPORTS_APM_EMULATION
13 select GENERIC_ATOMIC64 if (CPU_V6 || !CPU_32v6K || !AEABI) 13 select GENERIC_ATOMIC64 if (CPU_V6 || !CPU_32v6K || !AEABI)
14 select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
14 select HAVE_OPROFILE if (HAVE_PERF_EVENTS) 15 select HAVE_OPROFILE if (HAVE_PERF_EVENTS)
15 select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL 16 select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL
16 select HAVE_ARCH_KGDB 17 select HAVE_ARCH_KGDB
@@ -38,6 +39,7 @@ config ARM
38 select GENERIC_IRQ_PROBE 39 select GENERIC_IRQ_PROBE
39 select GENERIC_IRQ_SHOW 40 select GENERIC_IRQ_SHOW
40 select GENERIC_IRQ_PROBE 41 select GENERIC_IRQ_PROBE
42 select ARCH_WANT_IPC_PARSE_VERSION
41 select HARDIRQS_SW_RESEND 43 select HARDIRQS_SW_RESEND
42 select CPU_PM if (SUSPEND || CPU_IDLE) 44 select CPU_PM if (SUSPEND || CPU_IDLE)
43 select GENERIC_PCI_IOMAP 45 select GENERIC_PCI_IOMAP
diff --git a/arch/arm/include/asm/unistd.h b/arch/arm/include/asm/unistd.h
index 512cd1473454..0cab47d4a83f 100644
--- a/arch/arm/include/asm/unistd.h
+++ b/arch/arm/include/asm/unistd.h
@@ -446,7 +446,6 @@
446 446
447#ifdef __KERNEL__ 447#ifdef __KERNEL__
448 448
449#define __ARCH_WANT_IPC_PARSE_VERSION
450#define __ARCH_WANT_STAT64 449#define __ARCH_WANT_STAT64
451#define __ARCH_WANT_SYS_GETHOSTNAME 450#define __ARCH_WANT_SYS_GETHOSTNAME
452#define __ARCH_WANT_SYS_PAUSE 451#define __ARCH_WANT_SYS_PAUSE
diff --git a/arch/arm/lib/io-acorn.S b/arch/arm/lib/io-acorn.S
index 1b197ea7aab3..69719bad674d 100644
--- a/arch/arm/lib/io-acorn.S
+++ b/arch/arm/lib/io-acorn.S
@@ -11,13 +11,14 @@
11 * 11 *
12 */ 12 */
13#include <linux/linkage.h> 13#include <linux/linkage.h>
14#include <linux/kern_levels.h>
14#include <asm/assembler.h> 15#include <asm/assembler.h>
15 16
16 .text 17 .text
17 .align 18 .align
18 19
19.Liosl_warning: 20.Liosl_warning:
20 .ascii "<4>insl/outsl not implemented, called from %08lX\0" 21 .ascii KERN_WARNING "insl/outsl not implemented, called from %08lX\0"
21 .align 22 .align
22 23
23/* 24/*
diff --git a/arch/arm/mach-netx/fb.c b/arch/arm/mach-netx/fb.c
index 2cdf6ef69bee..d122ee6ab991 100644
--- a/arch/arm/mach-netx/fb.c
+++ b/arch/arm/mach-netx/fb.c
@@ -69,29 +69,6 @@ void netx_clcd_remove(struct clcd_fb *fb)
69 fb->fb.screen_base, fb->fb.fix.smem_start); 69 fb->fb.screen_base, fb->fb.fix.smem_start);
70} 70}
71 71
72void clk_disable(struct clk *clk)
73{
74}
75
76int clk_set_rate(struct clk *clk, unsigned long rate)
77{
78 return 0;
79}
80
81int clk_enable(struct clk *clk)
82{
83 return 0;
84}
85
86struct clk *clk_get(struct device *dev, const char *id)
87{
88 return dev && strcmp(dev_name(dev), "fb") == 0 ? NULL : ERR_PTR(-ENOENT);
89}
90
91void clk_put(struct clk *clk)
92{
93}
94
95static AMBA_AHB_DEVICE(fb, "fb", 0, 0x00104000, { NETX_IRQ_LCD }, NULL); 72static AMBA_AHB_DEVICE(fb, "fb", 0, 0x00104000, { NETX_IRQ_LCD }, NULL);
96 73
97int netx_fb_init(struct clcd_board *board, struct clcd_panel *panel) 74int netx_fb_init(struct clcd_board *board, struct clcd_panel *panel)
diff --git a/arch/arm/vfp/vfphw.S b/arch/arm/vfp/vfphw.S
index 2d30c7f6edd3..d50f0e486cf2 100644
--- a/arch/arm/vfp/vfphw.S
+++ b/arch/arm/vfp/vfphw.S
@@ -16,6 +16,7 @@
16 */ 16 */
17#include <asm/thread_info.h> 17#include <asm/thread_info.h>
18#include <asm/vfpmacros.h> 18#include <asm/vfpmacros.h>
19#include <linux/kern_levels.h>
19#include "../kernel/entry-header.S" 20#include "../kernel/entry-header.S"
20 21
21 .macro DBGSTR, str 22 .macro DBGSTR, str
@@ -24,7 +25,7 @@
24 add r0, pc, #4 25 add r0, pc, #4
25 bl printk 26 bl printk
26 b 1f 27 b 1f
27 .asciz "<7>VFP: \str\n" 28 .asciz KERN_DEBUG "VFP: \str\n"
28 .balign 4 29 .balign 4
291: ldmfd sp!, {r0-r3, ip, lr} 301: ldmfd sp!, {r0-r3, ip, lr}
30#endif 31#endif
@@ -37,7 +38,7 @@
37 add r0, pc, #4 38 add r0, pc, #4
38 bl printk 39 bl printk
39 b 1f 40 b 1f
40 .asciz "<7>VFP: \str\n" 41 .asciz KERN_DEBUG "VFP: \str\n"
41 .balign 4 42 .balign 4
421: ldmfd sp!, {r0-r3, ip, lr} 431: ldmfd sp!, {r0-r3, ip, lr}
43#endif 44#endif
@@ -52,7 +53,7 @@
52 add r0, pc, #4 53 add r0, pc, #4
53 bl printk 54 bl printk
54 b 1f 55 b 1f
55 .asciz "<7>VFP: \str\n" 56 .asciz KERN_DEBUG "VFP: \str\n"
56 .balign 4 57 .balign 4
571: ldmfd sp!, {r0-r3, ip, lr} 581: ldmfd sp!, {r0-r3, ip, lr}
58#endif 59#endif
diff --git a/arch/avr32/Kconfig b/arch/avr32/Kconfig
index 71d38c76726c..5ade51c8a87f 100644
--- a/arch/avr32/Kconfig
+++ b/arch/avr32/Kconfig
@@ -12,6 +12,7 @@ config AVR32
12 select HARDIRQS_SW_RESEND 12 select HARDIRQS_SW_RESEND
13 select GENERIC_IRQ_SHOW 13 select GENERIC_IRQ_SHOW
14 select ARCH_HAVE_CUSTOM_GPIO_H 14 select ARCH_HAVE_CUSTOM_GPIO_H
15 select ARCH_WANT_IPC_PARSE_VERSION
15 select ARCH_HAVE_NMI_SAFE_CMPXCHG 16 select ARCH_HAVE_NMI_SAFE_CMPXCHG
16 select GENERIC_CLOCKEVENTS 17 select GENERIC_CLOCKEVENTS
17 help 18 help
diff --git a/arch/avr32/boards/atstk1000/atstk1002.c b/arch/avr32/boards/atstk1000/atstk1002.c
index dc5263321480..6c80aba7bf96 100644
--- a/arch/avr32/boards/atstk1000/atstk1002.c
+++ b/arch/avr32/boards/atstk1000/atstk1002.c
@@ -97,7 +97,7 @@ static struct atmel_nand_data atstk1006_nand_data __initdata = {
97 .enable_pin = GPIO_PIN_PB(29), 97 .enable_pin = GPIO_PIN_PB(29),
98 .ecc_mode = NAND_ECC_SOFT, 98 .ecc_mode = NAND_ECC_SOFT,
99 .parts = nand_partitions, 99 .parts = nand_partitions,
100 .num_parts = ARRAY_SIZE(num_partitions), 100 .num_parts = ARRAY_SIZE(nand_partitions),
101}; 101};
102#endif 102#endif
103 103
diff --git a/arch/avr32/include/asm/unistd.h b/arch/avr32/include/asm/unistd.h
index f714544e5560..1358e366f4be 100644
--- a/arch/avr32/include/asm/unistd.h
+++ b/arch/avr32/include/asm/unistd.h
@@ -318,7 +318,6 @@
318/* SMP stuff */ 318/* SMP stuff */
319#define __IGNORE_getcpu 319#define __IGNORE_getcpu
320 320
321#define __ARCH_WANT_IPC_PARSE_VERSION
322#define __ARCH_WANT_STAT64 321#define __ARCH_WANT_STAT64
323#define __ARCH_WANT_SYS_ALARM 322#define __ARCH_WANT_SYS_ALARM
324#define __ARCH_WANT_SYS_GETHOSTNAME 323#define __ARCH_WANT_SYS_GETHOSTNAME
diff --git a/arch/avr32/mm/fault.c b/arch/avr32/mm/fault.c
index f7040a1e399f..b92e60958617 100644
--- a/arch/avr32/mm/fault.c
+++ b/arch/avr32/mm/fault.c
@@ -61,10 +61,10 @@ asmlinkage void do_page_fault(unsigned long ecr, struct pt_regs *regs)
61 const struct exception_table_entry *fixup; 61 const struct exception_table_entry *fixup;
62 unsigned long address; 62 unsigned long address;
63 unsigned long page; 63 unsigned long page;
64 int writeaccess;
65 long signr; 64 long signr;
66 int code; 65 int code;
67 int fault; 66 int fault;
67 unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
68 68
69 if (notify_page_fault(regs, ecr)) 69 if (notify_page_fault(regs, ecr))
70 return; 70 return;
@@ -86,6 +86,7 @@ asmlinkage void do_page_fault(unsigned long ecr, struct pt_regs *regs)
86 86
87 local_irq_enable(); 87 local_irq_enable();
88 88
89retry:
89 down_read(&mm->mmap_sem); 90 down_read(&mm->mmap_sem);
90 91
91 vma = find_vma(mm, address); 92 vma = find_vma(mm, address);
@@ -104,7 +105,6 @@ asmlinkage void do_page_fault(unsigned long ecr, struct pt_regs *regs)
104 */ 105 */
105good_area: 106good_area:
106 code = SEGV_ACCERR; 107 code = SEGV_ACCERR;
107 writeaccess = 0;
108 108
109 switch (ecr) { 109 switch (ecr) {
110 case ECR_PROTECTION_X: 110 case ECR_PROTECTION_X:
@@ -121,7 +121,7 @@ good_area:
121 case ECR_TLB_MISS_W: 121 case ECR_TLB_MISS_W:
122 if (!(vma->vm_flags & VM_WRITE)) 122 if (!(vma->vm_flags & VM_WRITE))
123 goto bad_area; 123 goto bad_area;
124 writeaccess = 1; 124 flags |= FAULT_FLAG_WRITE;
125 break; 125 break;
126 default: 126 default:
127 panic("Unhandled case %lu in do_page_fault!", ecr); 127 panic("Unhandled case %lu in do_page_fault!", ecr);
@@ -132,7 +132,11 @@ good_area:
132 * sure we exit gracefully rather than endlessly redo the 132 * sure we exit gracefully rather than endlessly redo the
133 * fault. 133 * fault.
134 */ 134 */
135 fault = handle_mm_fault(mm, vma, address, writeaccess ? FAULT_FLAG_WRITE : 0); 135 fault = handle_mm_fault(mm, vma, address, flags);
136
137 if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
138 return;
139
136 if (unlikely(fault & VM_FAULT_ERROR)) { 140 if (unlikely(fault & VM_FAULT_ERROR)) {
137 if (fault & VM_FAULT_OOM) 141 if (fault & VM_FAULT_OOM)
138 goto out_of_memory; 142 goto out_of_memory;
@@ -140,10 +144,23 @@ good_area:
140 goto do_sigbus; 144 goto do_sigbus;
141 BUG(); 145 BUG();
142 } 146 }
143 if (fault & VM_FAULT_MAJOR) 147
144 tsk->maj_flt++; 148 if (flags & FAULT_FLAG_ALLOW_RETRY) {
145 else 149 if (fault & VM_FAULT_MAJOR)
146 tsk->min_flt++; 150 tsk->maj_flt++;
151 else
152 tsk->min_flt++;
153 if (fault & VM_FAULT_RETRY) {
154 flags &= ~FAULT_FLAG_ALLOW_RETRY;
155
156 /*
157 * No need to up_read(&mm->mmap_sem) as we would have
158 * already released it in __lock_page_or_retry() in
159 * mm/filemap.c.
160 */
161 goto retry;
162 }
163 }
147 164
148 up_read(&mm->mmap_sem); 165 up_read(&mm->mmap_sem);
149 return; 166 return;
diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig
index ec44fc6c34ca..f34861920634 100644
--- a/arch/blackfin/Kconfig
+++ b/arch/blackfin/Kconfig
@@ -33,6 +33,7 @@ config BLACKFIN
33 select HAVE_PERF_EVENTS 33 select HAVE_PERF_EVENTS
34 select ARCH_HAVE_CUSTOM_GPIO_H 34 select ARCH_HAVE_CUSTOM_GPIO_H
35 select ARCH_WANT_OPTIONAL_GPIOLIB 35 select ARCH_WANT_OPTIONAL_GPIOLIB
36 select ARCH_WANT_IPC_PARSE_VERSION
36 select HAVE_GENERIC_HARDIRQS 37 select HAVE_GENERIC_HARDIRQS
37 select GENERIC_ATOMIC64 38 select GENERIC_ATOMIC64
38 select GENERIC_IRQ_PROBE 39 select GENERIC_IRQ_PROBE
diff --git a/arch/blackfin/include/asm/unistd.h b/arch/blackfin/include/asm/unistd.h
index 3287222cba34..5b2a0748d7d3 100644
--- a/arch/blackfin/include/asm/unistd.h
+++ b/arch/blackfin/include/asm/unistd.h
@@ -434,7 +434,6 @@
434#define __IGNORE_getcpu 434#define __IGNORE_getcpu
435 435
436#ifdef __KERNEL__ 436#ifdef __KERNEL__
437#define __ARCH_WANT_IPC_PARSE_VERSION
438#define __ARCH_WANT_STAT64 437#define __ARCH_WANT_STAT64
439#define __ARCH_WANT_SYS_ALARM 438#define __ARCH_WANT_SYS_ALARM
440#define __ARCH_WANT_SYS_GETHOSTNAME 439#define __ARCH_WANT_SYS_GETHOSTNAME
diff --git a/arch/cris/Kconfig b/arch/cris/Kconfig
index bb344650a14f..e92215428a37 100644
--- a/arch/cris/Kconfig
+++ b/arch/cris/Kconfig
@@ -42,6 +42,7 @@ config CRIS
42 select HAVE_IDE 42 select HAVE_IDE
43 select GENERIC_ATOMIC64 43 select GENERIC_ATOMIC64
44 select HAVE_GENERIC_HARDIRQS 44 select HAVE_GENERIC_HARDIRQS
45 select ARCH_WANT_IPC_PARSE_VERSION
45 select GENERIC_IRQ_SHOW 46 select GENERIC_IRQ_SHOW
46 select GENERIC_IOMAP 47 select GENERIC_IOMAP
47 select GENERIC_SMP_IDLE_THREAD if ETRAX_ARCH_V32 48 select GENERIC_SMP_IDLE_THREAD if ETRAX_ARCH_V32
diff --git a/arch/cris/include/asm/unistd.h b/arch/cris/include/asm/unistd.h
index f921b8b0f97e..51873a446f87 100644
--- a/arch/cris/include/asm/unistd.h
+++ b/arch/cris/include/asm/unistd.h
@@ -347,7 +347,6 @@
347 347
348#include <arch/unistd.h> 348#include <arch/unistd.h>
349 349
350#define __ARCH_WANT_IPC_PARSE_VERSION
351#define __ARCH_WANT_OLD_READDIR 350#define __ARCH_WANT_OLD_READDIR
352#define __ARCH_WANT_OLD_STAT 351#define __ARCH_WANT_OLD_STAT
353#define __ARCH_WANT_STAT64 352#define __ARCH_WANT_STAT64
diff --git a/arch/frv/Kconfig b/arch/frv/Kconfig
index a685910d2d5c..971c0a19facb 100644
--- a/arch/frv/Kconfig
+++ b/arch/frv/Kconfig
@@ -9,6 +9,7 @@ config FRV
9 select GENERIC_IRQ_SHOW 9 select GENERIC_IRQ_SHOW
10 select ARCH_HAVE_NMI_SAFE_CMPXCHG 10 select ARCH_HAVE_NMI_SAFE_CMPXCHG
11 select GENERIC_CPU_DEVICES 11 select GENERIC_CPU_DEVICES
12 select ARCH_WANT_IPC_PARSE_VERSION
12 13
13config ZONE_DMA 14config ZONE_DMA
14 bool 15 bool
diff --git a/arch/frv/include/asm/unistd.h b/arch/frv/include/asm/unistd.h
index a569dff7cd59..67f23a311db6 100644
--- a/arch/frv/include/asm/unistd.h
+++ b/arch/frv/include/asm/unistd.h
@@ -349,7 +349,6 @@
349 349
350#define NR_syscalls 338 350#define NR_syscalls 338
351 351
352#define __ARCH_WANT_IPC_PARSE_VERSION
353/* #define __ARCH_WANT_OLD_READDIR */ 352/* #define __ARCH_WANT_OLD_READDIR */
354#define __ARCH_WANT_OLD_STAT 353#define __ARCH_WANT_OLD_STAT
355#define __ARCH_WANT_STAT64 354#define __ARCH_WANT_STAT64
diff --git a/arch/frv/kernel/kernel_thread.S b/arch/frv/kernel/kernel_thread.S
index 4531c830d20b..f0e52943f923 100644
--- a/arch/frv/kernel/kernel_thread.S
+++ b/arch/frv/kernel/kernel_thread.S
@@ -10,10 +10,10 @@
10 */ 10 */
11 11
12#include <linux/linkage.h> 12#include <linux/linkage.h>
13#include <linux/kern_levels.h>
13#include <asm/unistd.h> 14#include <asm/unistd.h>
14 15
15#define CLONE_VM 0x00000100 /* set if VM shared between processes */ 16#define CLONE_VM 0x00000100 /* set if VM shared between processes */
16#define KERN_ERR "<3>"
17 17
18 .section .rodata 18 .section .rodata
19kernel_thread_emsg: 19kernel_thread_emsg:
diff --git a/arch/h8300/Kconfig b/arch/h8300/Kconfig
index 56e890df5053..5e8a0d9a09ce 100644
--- a/arch/h8300/Kconfig
+++ b/arch/h8300/Kconfig
@@ -3,6 +3,7 @@ config H8300
3 default y 3 default y
4 select HAVE_IDE 4 select HAVE_IDE
5 select HAVE_GENERIC_HARDIRQS 5 select HAVE_GENERIC_HARDIRQS
6 select ARCH_WANT_IPC_PARSE_VERSION
6 select GENERIC_IRQ_SHOW 7 select GENERIC_IRQ_SHOW
7 select GENERIC_CPU_DEVICES 8 select GENERIC_CPU_DEVICES
8 9
diff --git a/arch/h8300/include/asm/unistd.h b/arch/h8300/include/asm/unistd.h
index 718511303b4e..5cd882801d79 100644
--- a/arch/h8300/include/asm/unistd.h
+++ b/arch/h8300/include/asm/unistd.h
@@ -331,7 +331,6 @@
331 331
332#define NR_syscalls 321 332#define NR_syscalls 321
333 333
334#define __ARCH_WANT_IPC_PARSE_VERSION
335#define __ARCH_WANT_OLD_READDIR 334#define __ARCH_WANT_OLD_READDIR
336#define __ARCH_WANT_OLD_STAT 335#define __ARCH_WANT_OLD_STAT
337#define __ARCH_WANT_STAT64 336#define __ARCH_WANT_STAT64
diff --git a/arch/m32r/Kconfig b/arch/m32r/Kconfig
index b638d5bfa14d..49498bbb9616 100644
--- a/arch/m32r/Kconfig
+++ b/arch/m32r/Kconfig
@@ -7,6 +7,7 @@ config M32R
7 select HAVE_KERNEL_GZIP 7 select HAVE_KERNEL_GZIP
8 select HAVE_KERNEL_BZIP2 8 select HAVE_KERNEL_BZIP2
9 select HAVE_KERNEL_LZMA 9 select HAVE_KERNEL_LZMA
10 select ARCH_WANT_IPC_PARSE_VERSION
10 select HAVE_GENERIC_HARDIRQS 11 select HAVE_GENERIC_HARDIRQS
11 select GENERIC_IRQ_PROBE 12 select GENERIC_IRQ_PROBE
12 select GENERIC_IRQ_SHOW 13 select GENERIC_IRQ_SHOW
diff --git a/arch/m32r/include/asm/unistd.h b/arch/m32r/include/asm/unistd.h
index 3e1db561aacc..d5e66a480782 100644
--- a/arch/m32r/include/asm/unistd.h
+++ b/arch/m32r/include/asm/unistd.h
@@ -336,7 +336,6 @@
336 336
337#define NR_syscalls 326 337#define NR_syscalls 326
338 338
339#define __ARCH_WANT_IPC_PARSE_VERSION
340#define __ARCH_WANT_STAT64 339#define __ARCH_WANT_STAT64
341#define __ARCH_WANT_SYS_ALARM 340#define __ARCH_WANT_SYS_ALARM
342#define __ARCH_WANT_SYS_GETHOSTNAME 341#define __ARCH_WANT_SYS_GETHOSTNAME
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
index 147120128260..0b0f8b8c4a26 100644
--- a/arch/m68k/Kconfig
+++ b/arch/m68k/Kconfig
@@ -10,6 +10,7 @@ config M68K
10 select GENERIC_STRNCPY_FROM_USER if MMU 10 select GENERIC_STRNCPY_FROM_USER if MMU
11 select GENERIC_STRNLEN_USER if MMU 11 select GENERIC_STRNLEN_USER if MMU
12 select FPU if MMU 12 select FPU if MMU
13 select ARCH_WANT_IPC_PARSE_VERSION
13 select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE 14 select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE
14 15
15config RWSEM_GENERIC_SPINLOCK 16config RWSEM_GENERIC_SPINLOCK
diff --git a/arch/m68k/include/asm/unistd.h b/arch/m68k/include/asm/unistd.h
index ea0b502f845e..045cfd6a9e31 100644
--- a/arch/m68k/include/asm/unistd.h
+++ b/arch/m68k/include/asm/unistd.h
@@ -357,7 +357,6 @@
357 357
358#define NR_syscalls 347 358#define NR_syscalls 347
359 359
360#define __ARCH_WANT_IPC_PARSE_VERSION
361#define __ARCH_WANT_OLD_READDIR 360#define __ARCH_WANT_OLD_READDIR
362#define __ARCH_WANT_OLD_STAT 361#define __ARCH_WANT_OLD_STAT
363#define __ARCH_WANT_STAT64 362#define __ARCH_WANT_STAT64
diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig
index 0bf44231aaf9..ab9afcaa7f6a 100644
--- a/arch/microblaze/Kconfig
+++ b/arch/microblaze/Kconfig
@@ -15,6 +15,7 @@ config MICROBLAZE
15 select TRACING_SUPPORT 15 select TRACING_SUPPORT
16 select OF 16 select OF
17 select OF_EARLY_FLATTREE 17 select OF_EARLY_FLATTREE
18 select ARCH_WANT_IPC_PARSE_VERSION
18 select IRQ_DOMAIN 19 select IRQ_DOMAIN
19 select HAVE_GENERIC_HARDIRQS 20 select HAVE_GENERIC_HARDIRQS
20 select GENERIC_IRQ_PROBE 21 select GENERIC_IRQ_PROBE
diff --git a/arch/microblaze/include/asm/unistd.h b/arch/microblaze/include/asm/unistd.h
index d20ffbc86beb..6985e6e9d826 100644
--- a/arch/microblaze/include/asm/unistd.h
+++ b/arch/microblaze/include/asm/unistd.h
@@ -400,7 +400,6 @@
400#ifdef __KERNEL__ 400#ifdef __KERNEL__
401#ifndef __ASSEMBLY__ 401#ifndef __ASSEMBLY__
402 402
403#define __ARCH_WANT_IPC_PARSE_VERSION
404/* #define __ARCH_WANT_OLD_READDIR */ 403/* #define __ARCH_WANT_OLD_READDIR */
405/* #define __ARCH_WANT_OLD_STAT */ 404/* #define __ARCH_WANT_OLD_STAT */
406#define __ARCH_WANT_STAT64 405#define __ARCH_WANT_STAT64
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 750429018534..e3efc06e6409 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -20,12 +20,14 @@ config MIPS
20 select ARCH_BINFMT_ELF_RANDOMIZE_PIE 20 select ARCH_BINFMT_ELF_RANDOMIZE_PIE
21 select RTC_LIB if !MACH_LOONGSON 21 select RTC_LIB if !MACH_LOONGSON
22 select GENERIC_ATOMIC64 if !64BIT 22 select GENERIC_ATOMIC64 if !64BIT
23 select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
23 select HAVE_DMA_ATTRS 24 select HAVE_DMA_ATTRS
24 select HAVE_DMA_API_DEBUG 25 select HAVE_DMA_API_DEBUG
25 select HAVE_GENERIC_HARDIRQS 26 select HAVE_GENERIC_HARDIRQS
26 select GENERIC_IRQ_PROBE 27 select GENERIC_IRQ_PROBE
27 select GENERIC_IRQ_SHOW 28 select GENERIC_IRQ_SHOW
28 select HAVE_ARCH_JUMP_LABEL 29 select HAVE_ARCH_JUMP_LABEL
30 select ARCH_WANT_IPC_PARSE_VERSION
29 select IRQ_FORCED_THREADING 31 select IRQ_FORCED_THREADING
30 select HAVE_MEMBLOCK 32 select HAVE_MEMBLOCK
31 select HAVE_MEMBLOCK_NODE_MAP 33 select HAVE_MEMBLOCK_NODE_MAP
diff --git a/arch/mips/include/asm/unistd.h b/arch/mips/include/asm/unistd.h
index d8dad5340ea3..bebbde01be92 100644
--- a/arch/mips/include/asm/unistd.h
+++ b/arch/mips/include/asm/unistd.h
@@ -1034,7 +1034,6 @@
1034#ifndef __ASSEMBLY__ 1034#ifndef __ASSEMBLY__
1035 1035
1036#define __ARCH_OMIT_COMPAT_SYS_GETDENTS64 1036#define __ARCH_OMIT_COMPAT_SYS_GETDENTS64
1037#define __ARCH_WANT_IPC_PARSE_VERSION
1038#define __ARCH_WANT_OLD_READDIR 1037#define __ARCH_WANT_OLD_READDIR
1039#define __ARCH_WANT_SYS_ALARM 1038#define __ARCH_WANT_SYS_ALARM
1040#define __ARCH_WANT_SYS_GETHOSTNAME 1039#define __ARCH_WANT_SYS_GETHOSTNAME
diff --git a/arch/mn10300/Kconfig b/arch/mn10300/Kconfig
index 687f9b4a2ed6..5cfb086b3903 100644
--- a/arch/mn10300/Kconfig
+++ b/arch/mn10300/Kconfig
@@ -3,6 +3,7 @@ config MN10300
3 select HAVE_OPROFILE 3 select HAVE_OPROFILE
4 select HAVE_GENERIC_HARDIRQS 4 select HAVE_GENERIC_HARDIRQS
5 select GENERIC_IRQ_SHOW 5 select GENERIC_IRQ_SHOW
6 select ARCH_WANT_IPC_PARSE_VERSION
6 select HAVE_ARCH_TRACEHOOK 7 select HAVE_ARCH_TRACEHOOK
7 select HAVE_ARCH_KGDB 8 select HAVE_ARCH_KGDB
8 select HAVE_NMI_WATCHDOG if MN10300_WD_TIMER 9 select HAVE_NMI_WATCHDOG if MN10300_WD_TIMER
diff --git a/arch/mn10300/include/asm/unistd.h b/arch/mn10300/include/asm/unistd.h
index 9051f921cbc7..866eb14749d7 100644
--- a/arch/mn10300/include/asm/unistd.h
+++ b/arch/mn10300/include/asm/unistd.h
@@ -358,7 +358,6 @@
358/* 358/*
359 * specify the deprecated syscalls we want to support on this arch 359 * specify the deprecated syscalls we want to support on this arch
360 */ 360 */
361#define __ARCH_WANT_IPC_PARSE_VERSION
362#define __ARCH_WANT_OLD_READDIR 361#define __ARCH_WANT_OLD_READDIR
363#define __ARCH_WANT_OLD_STAT 362#define __ARCH_WANT_OLD_STAT
364#define __ARCH_WANT_STAT64 363#define __ARCH_WANT_STAT64
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 9a5d3cdc3e12..352f416269ce 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -115,11 +115,13 @@ config PPC
115 select HAVE_OPROFILE 115 select HAVE_OPROFILE
116 select HAVE_SYSCALL_WRAPPERS if PPC64 116 select HAVE_SYSCALL_WRAPPERS if PPC64
117 select GENERIC_ATOMIC64 if PPC32 117 select GENERIC_ATOMIC64 if PPC32
118 select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
118 select HAVE_IRQ_WORK 119 select HAVE_IRQ_WORK
119 select HAVE_PERF_EVENTS 120 select HAVE_PERF_EVENTS
120 select HAVE_REGS_AND_STACK_ACCESS_API 121 select HAVE_REGS_AND_STACK_ACCESS_API
121 select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64 122 select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64
122 select HAVE_GENERIC_HARDIRQS 123 select HAVE_GENERIC_HARDIRQS
124 select ARCH_WANT_IPC_PARSE_VERSION
123 select SPARSE_IRQ 125 select SPARSE_IRQ
124 select IRQ_PER_CPU 126 select IRQ_PER_CPU
125 select IRQ_DOMAIN 127 select IRQ_DOMAIN
diff --git a/arch/powerpc/include/asm/unistd.h b/arch/powerpc/include/asm/unistd.h
index d3d1b5efd7eb..bd377a368611 100644
--- a/arch/powerpc/include/asm/unistd.h
+++ b/arch/powerpc/include/asm/unistd.h
@@ -389,7 +389,6 @@
389#include <linux/compiler.h> 389#include <linux/compiler.h>
390#include <linux/linkage.h> 390#include <linux/linkage.h>
391 391
392#define __ARCH_WANT_IPC_PARSE_VERSION
393#define __ARCH_WANT_OLD_READDIR 392#define __ARCH_WANT_OLD_READDIR
394#define __ARCH_WANT_STAT64 393#define __ARCH_WANT_STAT64
395#define __ARCH_WANT_SYS_ALARM 394#define __ARCH_WANT_SYS_ALARM
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index a39b4690c171..296cd32466df 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -85,6 +85,7 @@ config S390
85 select HAVE_ARCH_MUTEX_CPU_RELAX 85 select HAVE_ARCH_MUTEX_CPU_RELAX
86 select HAVE_ARCH_JUMP_LABEL if !MARCH_G5 86 select HAVE_ARCH_JUMP_LABEL if !MARCH_G5
87 select ARCH_SAVE_PAGE_KEYS if HIBERNATION 87 select ARCH_SAVE_PAGE_KEYS if HIBERNATION
88 select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
88 select HAVE_MEMBLOCK 89 select HAVE_MEMBLOCK
89 select HAVE_MEMBLOCK_NODE_MAP 90 select HAVE_MEMBLOCK_NODE_MAP
90 select HAVE_CMPXCHG_LOCAL 91 select HAVE_CMPXCHG_LOCAL
@@ -117,6 +118,7 @@ config S390
117 select ARCH_INLINE_WRITE_UNLOCK_BH 118 select ARCH_INLINE_WRITE_UNLOCK_BH
118 select ARCH_INLINE_WRITE_UNLOCK_IRQ 119 select ARCH_INLINE_WRITE_UNLOCK_IRQ
119 select ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE 120 select ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE
121 select ARCH_WANT_IPC_PARSE_VERSION
120 select GENERIC_SMP_IDLE_THREAD 122 select GENERIC_SMP_IDLE_THREAD
121 select GENERIC_TIME_VSYSCALL 123 select GENERIC_TIME_VSYSCALL
122 select GENERIC_CLOCKEVENTS 124 select GENERIC_CLOCKEVENTS
diff --git a/arch/s390/include/asm/unistd.h b/arch/s390/include/asm/unistd.h
index 2e37157ba6a9..6756e78f4808 100644
--- a/arch/s390/include/asm/unistd.h
+++ b/arch/s390/include/asm/unistd.h
@@ -388,7 +388,6 @@
388#define __IGNORE_recvmmsg 388#define __IGNORE_recvmmsg
389#define __IGNORE_sendmmsg 389#define __IGNORE_sendmmsg
390 390
391#define __ARCH_WANT_IPC_PARSE_VERSION
392#define __ARCH_WANT_OLD_READDIR 391#define __ARCH_WANT_OLD_READDIR
393#define __ARCH_WANT_SYS_ALARM 392#define __ARCH_WANT_SYS_ALARM
394#define __ARCH_WANT_SYS_GETHOSTNAME 393#define __ARCH_WANT_SYS_GETHOSTNAME
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index a24595d83ad6..36f5141e8041 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -21,6 +21,7 @@ config SUPERH
21 select HAVE_KERNEL_LZMA 21 select HAVE_KERNEL_LZMA
22 select HAVE_KERNEL_XZ 22 select HAVE_KERNEL_XZ
23 select HAVE_KERNEL_LZO 23 select HAVE_KERNEL_LZO
24 select ARCH_WANT_IPC_PARSE_VERSION
24 select HAVE_SYSCALL_TRACEPOINTS 25 select HAVE_SYSCALL_TRACEPOINTS
25 select HAVE_REGS_AND_STACK_ACCESS_API 26 select HAVE_REGS_AND_STACK_ACCESS_API
26 select HAVE_GENERIC_HARDIRQS 27 select HAVE_GENERIC_HARDIRQS
@@ -50,6 +51,7 @@ config SUPERH32
50 select HAVE_DYNAMIC_FTRACE 51 select HAVE_DYNAMIC_FTRACE
51 select HAVE_FUNCTION_TRACE_MCOUNT_TEST 52 select HAVE_FUNCTION_TRACE_MCOUNT_TEST
52 select HAVE_FTRACE_NMI_ENTER if DYNAMIC_FTRACE 53 select HAVE_FTRACE_NMI_ENTER if DYNAMIC_FTRACE
54 select ARCH_WANT_IPC_PARSE_VERSION
53 select HAVE_FUNCTION_GRAPH_TRACER 55 select HAVE_FUNCTION_GRAPH_TRACER
54 select HAVE_ARCH_KGDB 56 select HAVE_ARCH_KGDB
55 select HAVE_HW_BREAKPOINT 57 select HAVE_HW_BREAKPOINT
diff --git a/arch/sh/include/asm/unistd.h b/arch/sh/include/asm/unistd.h
index e800a38c9f8d..7bc67076baac 100644
--- a/arch/sh/include/asm/unistd.h
+++ b/arch/sh/include/asm/unistd.h
@@ -6,7 +6,6 @@
6# endif 6# endif
7 7
8# define __ARCH_WANT_SYS_RT_SIGSUSPEND 8# define __ARCH_WANT_SYS_RT_SIGSUSPEND
9# define __ARCH_WANT_IPC_PARSE_VERSION
10# define __ARCH_WANT_OLD_READDIR 9# define __ARCH_WANT_OLD_READDIR
11# define __ARCH_WANT_OLD_STAT 10# define __ARCH_WANT_OLD_STAT
12# define __ARCH_WANT_STAT64 11# define __ARCH_WANT_STAT64
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
index e74ff1377626..67f1f6f5f4e1 100644
--- a/arch/sparc/Kconfig
+++ b/arch/sparc/Kconfig
@@ -27,6 +27,7 @@ config SPARC
27 select HAVE_ARCH_JUMP_LABEL 27 select HAVE_ARCH_JUMP_LABEL
28 select HAVE_GENERIC_HARDIRQS 28 select HAVE_GENERIC_HARDIRQS
29 select GENERIC_IRQ_SHOW 29 select GENERIC_IRQ_SHOW
30 select ARCH_WANT_IPC_PARSE_VERSION
30 select USE_GENERIC_SMP_HELPERS if SMP 31 select USE_GENERIC_SMP_HELPERS if SMP
31 select GENERIC_PCI_IOMAP 32 select GENERIC_PCI_IOMAP
32 select HAVE_NMI_WATCHDOG if SPARC64 33 select HAVE_NMI_WATCHDOG if SPARC64
diff --git a/arch/sparc/include/asm/unistd.h b/arch/sparc/include/asm/unistd.h
index c7cb0af0eb59..fb2693464807 100644
--- a/arch/sparc/include/asm/unistd.h
+++ b/arch/sparc/include/asm/unistd.h
@@ -423,7 +423,6 @@
423#endif 423#endif
424 424
425#ifdef __KERNEL__ 425#ifdef __KERNEL__
426#define __ARCH_WANT_IPC_PARSE_VERSION
427#define __ARCH_WANT_OLD_READDIR 426#define __ARCH_WANT_OLD_READDIR
428#define __ARCH_WANT_STAT64 427#define __ARCH_WANT_STAT64
429#define __ARCH_WANT_SYS_ALARM 428#define __ARCH_WANT_SYS_ALARM
diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c
index c38e5aaae56f..0dc1f5786081 100644
--- a/arch/sparc/kernel/sys_sparc_64.c
+++ b/arch/sparc/kernel/sys_sparc_64.c
@@ -470,7 +470,7 @@ SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, second
470 switch (call) { 470 switch (call) {
471 case SHMAT: { 471 case SHMAT: {
472 ulong raddr; 472 ulong raddr;
473 err = do_shmat(first, ptr, (int)second, &raddr); 473 err = do_shmat(first, ptr, (int)second, &raddr, SHMLBA);
474 if (!err) { 474 if (!err) {
475 if (put_user(raddr, 475 if (put_user(raddr,
476 (ulong __user *) third)) 476 (ulong __user *) third))
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index c70684f859e1..ba2657c49217 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -70,6 +70,7 @@ config X86
70 select HAVE_ARCH_JUMP_LABEL 70 select HAVE_ARCH_JUMP_LABEL
71 select HAVE_TEXT_POKE_SMP 71 select HAVE_TEXT_POKE_SMP
72 select HAVE_GENERIC_HARDIRQS 72 select HAVE_GENERIC_HARDIRQS
73 select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
73 select SPARSE_IRQ 74 select SPARSE_IRQ
74 select GENERIC_FIND_FIRST_BIT 75 select GENERIC_FIND_FIRST_BIT
75 select GENERIC_IRQ_PROBE 76 select GENERIC_IRQ_PROBE
@@ -84,6 +85,7 @@ config X86
84 select GENERIC_IOMAP 85 select GENERIC_IOMAP
85 select DCACHE_WORD_ACCESS 86 select DCACHE_WORD_ACCESS
86 select GENERIC_SMP_IDLE_THREAD 87 select GENERIC_SMP_IDLE_THREAD
88 select ARCH_WANT_IPC_PARSE_VERSION if X86_32
87 select HAVE_ARCH_SECCOMP_FILTER 89 select HAVE_ARCH_SECCOMP_FILTER
88 select BUILDTIME_EXTABLE_SORT 90 select BUILDTIME_EXTABLE_SORT
89 select GENERIC_CMOS_UPDATE 91 select GENERIC_CMOS_UPDATE
diff --git a/arch/x86/include/asm/unistd.h b/arch/x86/include/asm/unistd.h
index 4437001d8e3d..0d9776e9e2dc 100644
--- a/arch/x86/include/asm/unistd.h
+++ b/arch/x86/include/asm/unistd.h
@@ -15,7 +15,6 @@
15# ifdef CONFIG_X86_32 15# ifdef CONFIG_X86_32
16 16
17# include <asm/unistd_32.h> 17# include <asm/unistd_32.h>
18# define __ARCH_WANT_IPC_PARSE_VERSION
19# define __ARCH_WANT_STAT64 18# define __ARCH_WANT_STAT64
20# define __ARCH_WANT_SYS_IPC 19# define __ARCH_WANT_SYS_IPC
21# define __ARCH_WANT_SYS_OLD_MMAP 20# define __ARCH_WANT_SYS_OLD_MMAP
diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
index 41857970517f..ed858e9e9a74 100644
--- a/arch/x86/kernel/e820.c
+++ b/arch/x86/kernel/e820.c
@@ -944,7 +944,7 @@ void __init e820_reserve_resources(void)
944 for (i = 0; i < e820_saved.nr_map; i++) { 944 for (i = 0; i < e820_saved.nr_map; i++) {
945 struct e820entry *entry = &e820_saved.map[i]; 945 struct e820entry *entry = &e820_saved.map[i];
946 firmware_map_add_early(entry->addr, 946 firmware_map_add_early(entry->addr,
947 entry->addr + entry->size - 1, 947 entry->addr + entry->size,
948 e820_type_to_string(entry->type)); 948 e820_type_to_string(entry->type));
949 } 949 }
950} 950}
diff --git a/arch/xtensa/kernel/syscall.c b/arch/xtensa/kernel/syscall.c
index 816e6d0d686c..05b3f093d5d7 100644
--- a/arch/xtensa/kernel/syscall.c
+++ b/arch/xtensa/kernel/syscall.c
@@ -44,7 +44,7 @@ asmlinkage long xtensa_shmat(int shmid, char __user *shmaddr, int shmflg)
44 unsigned long ret; 44 unsigned long ret;
45 long err; 45 long err;
46 46
47 err = do_shmat(shmid, shmaddr, shmflg, &ret); 47 err = do_shmat(shmid, shmaddr, shmflg, &ret, SHMLBA);
48 if (err) 48 if (err)
49 return err; 49 return err;
50 return (long)ret; 50 return (long)ret;
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c
index b17885a0b508..5a74c53bc69c 100644
--- a/arch/xtensa/mm/fault.c
+++ b/arch/xtensa/mm/fault.c
@@ -44,6 +44,7 @@ void do_page_fault(struct pt_regs *regs)
44 44
45 int is_write, is_exec; 45 int is_write, is_exec;
46 int fault; 46 int fault;
47 unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
47 48
48 info.si_code = SEGV_MAPERR; 49 info.si_code = SEGV_MAPERR;
49 50
@@ -71,6 +72,7 @@ void do_page_fault(struct pt_regs *regs)
71 address, exccause, regs->pc, is_write? "w":"", is_exec? "x":""); 72 address, exccause, regs->pc, is_write? "w":"", is_exec? "x":"");
72#endif 73#endif
73 74
75retry:
74 down_read(&mm->mmap_sem); 76 down_read(&mm->mmap_sem);
75 vma = find_vma(mm, address); 77 vma = find_vma(mm, address);
76 78
@@ -93,6 +95,7 @@ good_area:
93 if (is_write) { 95 if (is_write) {
94 if (!(vma->vm_flags & VM_WRITE)) 96 if (!(vma->vm_flags & VM_WRITE))
95 goto bad_area; 97 goto bad_area;
98 flags |= FAULT_FLAG_WRITE;
96 } else if (is_exec) { 99 } else if (is_exec) {
97 if (!(vma->vm_flags & VM_EXEC)) 100 if (!(vma->vm_flags & VM_EXEC))
98 goto bad_area; 101 goto bad_area;
@@ -104,7 +107,11 @@ good_area:
104 * make sure we exit gracefully rather than endlessly redo 107 * make sure we exit gracefully rather than endlessly redo
105 * the fault. 108 * the fault.
106 */ 109 */
107 fault = handle_mm_fault(mm, vma, address, is_write ? FAULT_FLAG_WRITE : 0); 110 fault = handle_mm_fault(mm, vma, address, flags);
111
112 if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
113 return;
114
108 if (unlikely(fault & VM_FAULT_ERROR)) { 115 if (unlikely(fault & VM_FAULT_ERROR)) {
109 if (fault & VM_FAULT_OOM) 116 if (fault & VM_FAULT_OOM)
110 goto out_of_memory; 117 goto out_of_memory;
@@ -112,10 +119,22 @@ good_area:
112 goto do_sigbus; 119 goto do_sigbus;
113 BUG(); 120 BUG();
114 } 121 }
115 if (fault & VM_FAULT_MAJOR) 122 if (flags & FAULT_FLAG_ALLOW_RETRY) {
116 current->maj_flt++; 123 if (fault & VM_FAULT_MAJOR)
117 else 124 current->maj_flt++;
118 current->min_flt++; 125 else
126 current->min_flt++;
127 if (fault & VM_FAULT_RETRY) {
128 flags &= ~FAULT_FLAG_ALLOW_RETRY;
129
130 /* No need to up_read(&mm->mmap_sem) as we would
131 * have already released it in __lock_page_or_retry
132 * in mm/filemap.c.
133 */
134
135 goto retry;
136 }
137 }
119 138
120 up_read(&mm->mmap_sem); 139 up_read(&mm->mmap_sem);
121 return; 140 return;
diff --git a/drivers/ata/pata_arasan_cf.c b/drivers/ata/pata_arasan_cf.c
index ac6a5beb28f3..bfaa5cb1629a 100644
--- a/drivers/ata/pata_arasan_cf.c
+++ b/drivers/ata/pata_arasan_cf.c
@@ -184,10 +184,8 @@
184struct arasan_cf_dev { 184struct arasan_cf_dev {
185 /* pointer to ata_host structure */ 185 /* pointer to ata_host structure */
186 struct ata_host *host; 186 struct ata_host *host;
187 /* clk structure, only if HAVE_CLK is defined */ 187 /* clk structure */
188#ifdef CONFIG_HAVE_CLK
189 struct clk *clk; 188 struct clk *clk;
190#endif
191 189
192 /* physical base address of controller */ 190 /* physical base address of controller */
193 dma_addr_t pbase; 191 dma_addr_t pbase;
@@ -312,13 +310,11 @@ static int cf_init(struct arasan_cf_dev *acdev)
312 unsigned long flags; 310 unsigned long flags;
313 int ret = 0; 311 int ret = 0;
314 312
315#ifdef CONFIG_HAVE_CLK
316 ret = clk_enable(acdev->clk); 313 ret = clk_enable(acdev->clk);
317 if (ret) { 314 if (ret) {
318 dev_dbg(acdev->host->dev, "clock enable failed"); 315 dev_dbg(acdev->host->dev, "clock enable failed");
319 return ret; 316 return ret;
320 } 317 }
321#endif
322 318
323 spin_lock_irqsave(&acdev->host->lock, flags); 319 spin_lock_irqsave(&acdev->host->lock, flags);
324 /* configure CF interface clock */ 320 /* configure CF interface clock */
@@ -344,9 +340,7 @@ static void cf_exit(struct arasan_cf_dev *acdev)
344 writel(readl(acdev->vbase + OP_MODE) & ~CFHOST_ENB, 340 writel(readl(acdev->vbase + OP_MODE) & ~CFHOST_ENB,
345 acdev->vbase + OP_MODE); 341 acdev->vbase + OP_MODE);
346 spin_unlock_irqrestore(&acdev->host->lock, flags); 342 spin_unlock_irqrestore(&acdev->host->lock, flags);
347#ifdef CONFIG_HAVE_CLK
348 clk_disable(acdev->clk); 343 clk_disable(acdev->clk);
349#endif
350} 344}
351 345
352static void dma_callback(void *dev) 346static void dma_callback(void *dev)
@@ -828,13 +822,11 @@ static int __devinit arasan_cf_probe(struct platform_device *pdev)
828 return -ENOMEM; 822 return -ENOMEM;
829 } 823 }
830 824
831#ifdef CONFIG_HAVE_CLK
832 acdev->clk = clk_get(&pdev->dev, NULL); 825 acdev->clk = clk_get(&pdev->dev, NULL);
833 if (IS_ERR(acdev->clk)) { 826 if (IS_ERR(acdev->clk)) {
834 dev_warn(&pdev->dev, "Clock not found\n"); 827 dev_warn(&pdev->dev, "Clock not found\n");
835 return PTR_ERR(acdev->clk); 828 return PTR_ERR(acdev->clk);
836 } 829 }
837#endif
838 830
839 /* allocate host */ 831 /* allocate host */
840 host = ata_host_alloc(&pdev->dev, 1); 832 host = ata_host_alloc(&pdev->dev, 1);
@@ -899,9 +891,7 @@ static int __devinit arasan_cf_probe(struct platform_device *pdev)
899 &arasan_cf_sht); 891 &arasan_cf_sht);
900 892
901free_clk: 893free_clk:
902#ifdef CONFIG_HAVE_CLK
903 clk_put(acdev->clk); 894 clk_put(acdev->clk);
904#endif
905 return ret; 895 return ret;
906} 896}
907 897
@@ -912,9 +902,7 @@ static int __devexit arasan_cf_remove(struct platform_device *pdev)
912 902
913 ata_host_detach(host); 903 ata_host_detach(host);
914 cf_exit(acdev); 904 cf_exit(acdev);
915#ifdef CONFIG_HAVE_CLK
916 clk_put(acdev->clk); 905 clk_put(acdev->clk);
917#endif
918 906
919 return 0; 907 return 0;
920} 908}
diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig
index 3f99b9099658..7f0b5ca78516 100644
--- a/drivers/clk/Kconfig
+++ b/drivers/clk/Kconfig
@@ -25,7 +25,6 @@ menu "Common Clock Framework"
25 25
26config COMMON_CLK_DEBUG 26config COMMON_CLK_DEBUG
27 bool "DebugFS representation of clock tree" 27 bool "DebugFS representation of clock tree"
28 depends on COMMON_CLK
29 select DEBUG_FS 28 select DEBUG_FS
30 ---help--- 29 ---help---
31 Creates a directory hierchy in debugfs for visualizing the clk 30 Creates a directory hierchy in debugfs for visualizing the clk
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index c87fdd710560..efdfd009c270 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -465,6 +465,9 @@ static void __clk_disable(struct clk *clk)
465 if (!clk) 465 if (!clk)
466 return; 466 return;
467 467
468 if (WARN_ON(IS_ERR(clk)))
469 return;
470
468 if (WARN_ON(clk->enable_count == 0)) 471 if (WARN_ON(clk->enable_count == 0))
469 return; 472 return;
470 473
diff --git a/drivers/firmware/memmap.c b/drivers/firmware/memmap.c
index adc07102a20d..c1cdc9236666 100644
--- a/drivers/firmware/memmap.c
+++ b/drivers/firmware/memmap.c
@@ -98,7 +98,7 @@ static LIST_HEAD(map_entries);
98/** 98/**
99 * firmware_map_add_entry() - Does the real work to add a firmware memmap entry. 99 * firmware_map_add_entry() - Does the real work to add a firmware memmap entry.
100 * @start: Start of the memory range. 100 * @start: Start of the memory range.
101 * @end: End of the memory range (inclusive). 101 * @end: End of the memory range (exclusive).
102 * @type: Type of the memory range. 102 * @type: Type of the memory range.
103 * @entry: Pre-allocated (either kmalloc() or bootmem allocator), uninitialised 103 * @entry: Pre-allocated (either kmalloc() or bootmem allocator), uninitialised
104 * entry. 104 * entry.
@@ -113,7 +113,7 @@ static int firmware_map_add_entry(u64 start, u64 end,
113 BUG_ON(start > end); 113 BUG_ON(start > end);
114 114
115 entry->start = start; 115 entry->start = start;
116 entry->end = end; 116 entry->end = end - 1;
117 entry->type = type; 117 entry->type = type;
118 INIT_LIST_HEAD(&entry->list); 118 INIT_LIST_HEAD(&entry->list);
119 kobject_init(&entry->kobj, &memmap_ktype); 119 kobject_init(&entry->kobj, &memmap_ktype);
@@ -148,7 +148,7 @@ static int add_sysfs_fw_map_entry(struct firmware_map_entry *entry)
148 * firmware_map_add_hotplug() - Adds a firmware mapping entry when we do 148 * firmware_map_add_hotplug() - Adds a firmware mapping entry when we do
149 * memory hotplug. 149 * memory hotplug.
150 * @start: Start of the memory range. 150 * @start: Start of the memory range.
151 * @end: End of the memory range (inclusive). 151 * @end: End of the memory range (exclusive)
152 * @type: Type of the memory range. 152 * @type: Type of the memory range.
153 * 153 *
154 * Adds a firmware mapping entry. This function is for memory hotplug, it is 154 * Adds a firmware mapping entry. This function is for memory hotplug, it is
@@ -175,7 +175,7 @@ int __meminit firmware_map_add_hotplug(u64 start, u64 end, const char *type)
175/** 175/**
176 * firmware_map_add_early() - Adds a firmware mapping entry. 176 * firmware_map_add_early() - Adds a firmware mapping entry.
177 * @start: Start of the memory range. 177 * @start: Start of the memory range.
178 * @end: End of the memory range (inclusive). 178 * @end: End of the memory range.
179 * @type: Type of the memory range. 179 * @type: Type of the memory range.
180 * 180 *
181 * Adds a firmware mapping entry. This function uses the bootmem allocator 181 * Adds a firmware mapping entry. This function uses the bootmem allocator
diff --git a/drivers/firmware/pcdp.c b/drivers/firmware/pcdp.c
index 51e0e2d8fac6..a330492e06f9 100644
--- a/drivers/firmware/pcdp.c
+++ b/drivers/firmware/pcdp.c
@@ -95,7 +95,7 @@ efi_setup_pcdp_console(char *cmdline)
95 if (efi.hcdp == EFI_INVALID_TABLE_ADDR) 95 if (efi.hcdp == EFI_INVALID_TABLE_ADDR)
96 return -ENODEV; 96 return -ENODEV;
97 97
98 pcdp = ioremap(efi.hcdp, 4096); 98 pcdp = early_ioremap(efi.hcdp, 4096);
99 printk(KERN_INFO "PCDP: v%d at 0x%lx\n", pcdp->rev, efi.hcdp); 99 printk(KERN_INFO "PCDP: v%d at 0x%lx\n", pcdp->rev, efi.hcdp);
100 100
101 if (strstr(cmdline, "console=hcdp")) { 101 if (strstr(cmdline, "console=hcdp")) {
@@ -131,6 +131,6 @@ efi_setup_pcdp_console(char *cmdline)
131 } 131 }
132 132
133out: 133out:
134 iounmap(pcdp); 134 early_iounmap(pcdp, 4096);
135 return rc; 135 return rc;
136} 136}
diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c
index a997c7d3f95d..1034d93fb838 100644
--- a/drivers/i2c/busses/i2c-pxa.c
+++ b/drivers/i2c/busses/i2c-pxa.c
@@ -41,13 +41,6 @@
41 41
42#include <asm/irq.h> 42#include <asm/irq.h>
43 43
44#ifndef CONFIG_HAVE_CLK
45#define clk_get(dev, id) NULL
46#define clk_put(clk) do { } while (0)
47#define clk_disable(clk) do { } while (0)
48#define clk_enable(clk) do { } while (0)
49#endif
50
51struct pxa_reg_layout { 44struct pxa_reg_layout {
52 u32 ibmr; 45 u32 ibmr;
53 u32 idbr; 46 u32 idbr;
diff --git a/drivers/md/dm-log.c b/drivers/md/dm-log.c
index 65ebaebf502b..627d19186d5a 100644
--- a/drivers/md/dm-log.c
+++ b/drivers/md/dm-log.c
@@ -571,16 +571,6 @@ static void disk_dtr(struct dm_dirty_log *log)
571 destroy_log_context(lc); 571 destroy_log_context(lc);
572} 572}
573 573
574static int count_bits32(uint32_t *addr, unsigned size)
575{
576 int count = 0, i;
577
578 for (i = 0; i < size; i++) {
579 count += hweight32(*(addr+i));
580 }
581 return count;
582}
583
584static void fail_log_device(struct log_c *lc) 574static void fail_log_device(struct log_c *lc)
585{ 575{
586 if (lc->log_dev_failed) 576 if (lc->log_dev_failed)
@@ -629,7 +619,8 @@ static int disk_resume(struct dm_dirty_log *log)
629 619
630 /* copy clean across to sync */ 620 /* copy clean across to sync */
631 memcpy(lc->sync_bits, lc->clean_bits, size); 621 memcpy(lc->sync_bits, lc->clean_bits, size);
632 lc->sync_count = count_bits32(lc->clean_bits, lc->bitset_uint32_count); 622 lc->sync_count = memweight(lc->clean_bits,
623 lc->bitset_uint32_count * sizeof(uint32_t));
633 lc->sync_search = 0; 624 lc->sync_search = 0;
634 625
635 /* set the correct number of regions in the header */ 626 /* set the correct number of regions in the header */
diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c
index af26bbe6f76e..f7061a5ef1d2 100644
--- a/drivers/media/video/uvc/uvc_ctrl.c
+++ b/drivers/media/video/uvc/uvc_ctrl.c
@@ -2083,7 +2083,7 @@ int uvc_ctrl_init_device(struct uvc_device *dev)
2083 /* Walk the entities list and instantiate controls */ 2083 /* Walk the entities list and instantiate controls */
2084 list_for_each_entry(entity, &dev->entities, list) { 2084 list_for_each_entry(entity, &dev->entities, list) {
2085 struct uvc_control *ctrl; 2085 struct uvc_control *ctrl;
2086 unsigned int bControlSize = 0, ncontrols = 0; 2086 unsigned int bControlSize = 0, ncontrols;
2087 __u8 *bmControls = NULL; 2087 __u8 *bmControls = NULL;
2088 2088
2089 if (UVC_ENTITY_TYPE(entity) == UVC_VC_EXTENSION_UNIT) { 2089 if (UVC_ENTITY_TYPE(entity) == UVC_VC_EXTENSION_UNIT) {
@@ -2101,8 +2101,7 @@ int uvc_ctrl_init_device(struct uvc_device *dev)
2101 uvc_ctrl_prune_entity(dev, entity); 2101 uvc_ctrl_prune_entity(dev, entity);
2102 2102
2103 /* Count supported controls and allocate the controls array */ 2103 /* Count supported controls and allocate the controls array */
2104 for (i = 0; i < bControlSize; ++i) 2104 ncontrols = memweight(bmControls, bControlSize);
2105 ncontrols += hweight8(bmControls[i]);
2106 if (ncontrols == 0) 2105 if (ncontrols == 0)
2107 continue; 2106 continue;
2108 2107
diff --git a/drivers/message/i2o/i2o_config.c b/drivers/message/i2o/i2o_config.c
index 098de2b35784..9a49c243a6ac 100644
--- a/drivers/message/i2o/i2o_config.c
+++ b/drivers/message/i2o/i2o_config.c
@@ -188,6 +188,13 @@ static int i2o_cfg_parms(unsigned long arg, unsigned int type)
188 if (!dev) 188 if (!dev)
189 return -ENXIO; 189 return -ENXIO;
190 190
191 /*
192 * Stop users being able to try and allocate arbitary amounts
193 * of DMA space. 64K is way more than sufficient for this.
194 */
195 if (kcmd.oplen > 65536)
196 return -EMSGSIZE;
197
191 ops = memdup_user(kcmd.opbuf, kcmd.oplen); 198 ops = memdup_user(kcmd.opbuf, kcmd.oplen);
192 if (IS_ERR(ops)) 199 if (IS_ERR(ops))
193 return PTR_ERR(ops); 200 return PTR_ERR(ops);
diff --git a/drivers/message/i2o/i2o_proc.c b/drivers/message/i2o/i2o_proc.c
index 506c36f6e1db..8001aa6bfb48 100644
--- a/drivers/message/i2o/i2o_proc.c
+++ b/drivers/message/i2o/i2o_proc.c
@@ -255,9 +255,8 @@ static char *scsi_devices[] = {
255 "Array Controller Device" 255 "Array Controller Device"
256}; 256};
257 257
258static char *chtostr(u8 * chars, int n) 258static char *chtostr(char *tmp, u8 *chars, int n)
259{ 259{
260 char tmp[256];
261 tmp[0] = 0; 260 tmp[0] = 0;
262 return strncat(tmp, (char *)chars, n); 261 return strncat(tmp, (char *)chars, n);
263} 262}
@@ -791,6 +790,7 @@ static int i2o_seq_show_ddm_table(struct seq_file *seq, void *v)
791 } *result; 790 } *result;
792 791
793 i2o_exec_execute_ddm_table ddm_table; 792 i2o_exec_execute_ddm_table ddm_table;
793 char tmp[28 + 1];
794 794
795 result = kmalloc(sizeof(*result), GFP_KERNEL); 795 result = kmalloc(sizeof(*result), GFP_KERNEL);
796 if (!result) 796 if (!result)
@@ -826,7 +826,7 @@ static int i2o_seq_show_ddm_table(struct seq_file *seq, void *v)
826 seq_printf(seq, "%-#7x", ddm_table.i2o_vendor_id); 826 seq_printf(seq, "%-#7x", ddm_table.i2o_vendor_id);
827 seq_printf(seq, "%-#8x", ddm_table.module_id); 827 seq_printf(seq, "%-#8x", ddm_table.module_id);
828 seq_printf(seq, "%-29s", 828 seq_printf(seq, "%-29s",
829 chtostr(ddm_table.module_name_version, 28)); 829 chtostr(tmp, ddm_table.module_name_version, 28));
830 seq_printf(seq, "%9d ", ddm_table.data_size); 830 seq_printf(seq, "%9d ", ddm_table.data_size);
831 seq_printf(seq, "%8d", ddm_table.code_size); 831 seq_printf(seq, "%8d", ddm_table.code_size);
832 832
@@ -893,6 +893,7 @@ static int i2o_seq_show_drivers_stored(struct seq_file *seq, void *v)
893 893
894 i2o_driver_result_table *result; 894 i2o_driver_result_table *result;
895 i2o_driver_store_table *dst; 895 i2o_driver_store_table *dst;
896 char tmp[28 + 1];
896 897
897 result = kmalloc(sizeof(i2o_driver_result_table), GFP_KERNEL); 898 result = kmalloc(sizeof(i2o_driver_result_table), GFP_KERNEL);
898 if (result == NULL) 899 if (result == NULL)
@@ -927,8 +928,9 @@ static int i2o_seq_show_drivers_stored(struct seq_file *seq, void *v)
927 928
928 seq_printf(seq, "%-#7x", dst->i2o_vendor_id); 929 seq_printf(seq, "%-#7x", dst->i2o_vendor_id);
929 seq_printf(seq, "%-#8x", dst->module_id); 930 seq_printf(seq, "%-#8x", dst->module_id);
930 seq_printf(seq, "%-29s", chtostr(dst->module_name_version, 28)); 931 seq_printf(seq, "%-29s",
931 seq_printf(seq, "%-9s", chtostr(dst->date, 8)); 932 chtostr(tmp, dst->module_name_version, 28));
933 seq_printf(seq, "%-9s", chtostr(tmp, dst->date, 8));
932 seq_printf(seq, "%8d ", dst->module_size); 934 seq_printf(seq, "%8d ", dst->module_size);
933 seq_printf(seq, "%8d ", dst->mpb_size); 935 seq_printf(seq, "%8d ", dst->mpb_size);
934 seq_printf(seq, "0x%04x", dst->module_flags); 936 seq_printf(seq, "0x%04x", dst->module_flags);
@@ -1248,6 +1250,7 @@ static int i2o_seq_show_dev_identity(struct seq_file *seq, void *v)
1248 // == (allow) 512d bytes (max) 1250 // == (allow) 512d bytes (max)
1249 static u16 *work16 = (u16 *) work32; 1251 static u16 *work16 = (u16 *) work32;
1250 int token; 1252 int token;
1253 char tmp[16 + 1];
1251 1254
1252 token = i2o_parm_field_get(d, 0xF100, -1, &work32, sizeof(work32)); 1255 token = i2o_parm_field_get(d, 0xF100, -1, &work32, sizeof(work32));
1253 1256
@@ -1260,13 +1263,13 @@ static int i2o_seq_show_dev_identity(struct seq_file *seq, void *v)
1260 seq_printf(seq, "Owner TID : %0#5x\n", work16[2]); 1263 seq_printf(seq, "Owner TID : %0#5x\n", work16[2]);
1261 seq_printf(seq, "Parent TID : %0#5x\n", work16[3]); 1264 seq_printf(seq, "Parent TID : %0#5x\n", work16[3]);
1262 seq_printf(seq, "Vendor info : %s\n", 1265 seq_printf(seq, "Vendor info : %s\n",
1263 chtostr((u8 *) (work32 + 2), 16)); 1266 chtostr(tmp, (u8 *) (work32 + 2), 16));
1264 seq_printf(seq, "Product info : %s\n", 1267 seq_printf(seq, "Product info : %s\n",
1265 chtostr((u8 *) (work32 + 6), 16)); 1268 chtostr(tmp, (u8 *) (work32 + 6), 16));
1266 seq_printf(seq, "Description : %s\n", 1269 seq_printf(seq, "Description : %s\n",
1267 chtostr((u8 *) (work32 + 10), 16)); 1270 chtostr(tmp, (u8 *) (work32 + 10), 16));
1268 seq_printf(seq, "Product rev. : %s\n", 1271 seq_printf(seq, "Product rev. : %s\n",
1269 chtostr((u8 *) (work32 + 14), 8)); 1272 chtostr(tmp, (u8 *) (work32 + 14), 8));
1270 1273
1271 seq_printf(seq, "Serial number : "); 1274 seq_printf(seq, "Serial number : ");
1272 print_serial_number(seq, (u8 *) (work32 + 16), 1275 print_serial_number(seq, (u8 *) (work32 + 16),
@@ -1303,6 +1306,8 @@ static int i2o_seq_show_ddm_identity(struct seq_file *seq, void *v)
1303 u8 pad[256]; // allow up to 256 byte (max) serial number 1306 u8 pad[256]; // allow up to 256 byte (max) serial number
1304 } result; 1307 } result;
1305 1308
1309 char tmp[24 + 1];
1310
1306 token = i2o_parm_field_get(d, 0xF101, -1, &result, sizeof(result)); 1311 token = i2o_parm_field_get(d, 0xF101, -1, &result, sizeof(result));
1307 1312
1308 if (token < 0) { 1313 if (token < 0) {
@@ -1312,9 +1317,9 @@ static int i2o_seq_show_ddm_identity(struct seq_file *seq, void *v)
1312 1317
1313 seq_printf(seq, "Registering DDM TID : 0x%03x\n", result.ddm_tid); 1318 seq_printf(seq, "Registering DDM TID : 0x%03x\n", result.ddm_tid);
1314 seq_printf(seq, "Module name : %s\n", 1319 seq_printf(seq, "Module name : %s\n",
1315 chtostr(result.module_name, 24)); 1320 chtostr(tmp, result.module_name, 24));
1316 seq_printf(seq, "Module revision : %s\n", 1321 seq_printf(seq, "Module revision : %s\n",
1317 chtostr(result.module_rev, 8)); 1322 chtostr(tmp, result.module_rev, 8));
1318 1323
1319 seq_printf(seq, "Serial number : "); 1324 seq_printf(seq, "Serial number : ");
1320 print_serial_number(seq, result.serial_number, sizeof(result) - 36); 1325 print_serial_number(seq, result.serial_number, sizeof(result) - 36);
@@ -1338,6 +1343,8 @@ static int i2o_seq_show_uinfo(struct seq_file *seq, void *v)
1338 u8 instance_number[4]; 1343 u8 instance_number[4];
1339 } result; 1344 } result;
1340 1345
1346 char tmp[64 + 1];
1347
1341 token = i2o_parm_field_get(d, 0xF102, -1, &result, sizeof(result)); 1348 token = i2o_parm_field_get(d, 0xF102, -1, &result, sizeof(result));
1342 1349
1343 if (token < 0) { 1350 if (token < 0) {
@@ -1346,13 +1353,13 @@ static int i2o_seq_show_uinfo(struct seq_file *seq, void *v)
1346 } 1353 }
1347 1354
1348 seq_printf(seq, "Device name : %s\n", 1355 seq_printf(seq, "Device name : %s\n",
1349 chtostr(result.device_name, 64)); 1356 chtostr(tmp, result.device_name, 64));
1350 seq_printf(seq, "Service name : %s\n", 1357 seq_printf(seq, "Service name : %s\n",
1351 chtostr(result.service_name, 64)); 1358 chtostr(tmp, result.service_name, 64));
1352 seq_printf(seq, "Physical name : %s\n", 1359 seq_printf(seq, "Physical name : %s\n",
1353 chtostr(result.physical_location, 64)); 1360 chtostr(tmp, result.physical_location, 64));
1354 seq_printf(seq, "Instance number : %s\n", 1361 seq_printf(seq, "Instance number : %s\n",
1355 chtostr(result.instance_number, 4)); 1362 chtostr(tmp, result.instance_number, 4));
1356 1363
1357 return 0; 1364 return 0;
1358} 1365}
diff --git a/drivers/misc/lkdtm.c b/drivers/misc/lkdtm.c
index 28adefe70f96..08aad69c8da4 100644
--- a/drivers/misc/lkdtm.c
+++ b/drivers/misc/lkdtm.c
@@ -477,6 +477,8 @@ static ssize_t lkdtm_debugfs_read(struct file *f, char __user *user_buf,
477 int i, n, out; 477 int i, n, out;
478 478
479 buf = (char *)__get_free_page(GFP_KERNEL); 479 buf = (char *)__get_free_page(GFP_KERNEL);
480 if (buf == NULL)
481 return -ENOMEM;
480 482
481 n = snprintf(buf, PAGE_SIZE, "Available crash types:\n"); 483 n = snprintf(buf, PAGE_SIZE, "Available crash types:\n");
482 for (i = 0; i < ARRAY_SIZE(cp_type); i++) 484 for (i = 0; i < ARRAY_SIZE(cp_type); i++)
diff --git a/drivers/misc/ti-st/st_core.c b/drivers/misc/ti-st/st_core.c
index 2b62232c2c6a..acfaeeb9e01a 100644
--- a/drivers/misc/ti-st/st_core.c
+++ b/drivers/misc/ti-st/st_core.c
@@ -349,6 +349,11 @@ void st_int_recv(void *disc_data,
349 st_gdata->rx_skb = alloc_skb( 349 st_gdata->rx_skb = alloc_skb(
350 st_gdata->list[type]->max_frame_size, 350 st_gdata->list[type]->max_frame_size,
351 GFP_ATOMIC); 351 GFP_ATOMIC);
352 if (st_gdata->rx_skb == NULL) {
353 pr_err("out of memory: dropping\n");
354 goto done;
355 }
356
352 skb_reserve(st_gdata->rx_skb, 357 skb_reserve(st_gdata->rx_skb,
353 st_gdata->list[type]->reserve); 358 st_gdata->list[type]->reserve);
354 /* next 2 required for BT only */ 359 /* next 2 required for BT only */
diff --git a/drivers/net/can/c_can/c_can_platform.c b/drivers/net/can/c_can/c_can_platform.c
index f0921d16f0a9..6ff7ad006c30 100644
--- a/drivers/net/can/c_can/c_can_platform.c
+++ b/drivers/net/can/c_can/c_can_platform.c
@@ -74,7 +74,6 @@ static int __devinit c_can_plat_probe(struct platform_device *pdev)
74 const struct platform_device_id *id; 74 const struct platform_device_id *id;
75 struct resource *mem; 75 struct resource *mem;
76 int irq; 76 int irq;
77#ifdef CONFIG_HAVE_CLK
78 struct clk *clk; 77 struct clk *clk;
79 78
80 /* get the appropriate clk */ 79 /* get the appropriate clk */
@@ -84,7 +83,6 @@ static int __devinit c_can_plat_probe(struct platform_device *pdev)
84 ret = -ENODEV; 83 ret = -ENODEV;
85 goto exit; 84 goto exit;
86 } 85 }
87#endif
88 86
89 /* get the platform data */ 87 /* get the platform data */
90 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 88 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -145,10 +143,8 @@ static int __devinit c_can_plat_probe(struct platform_device *pdev)
145 143
146 dev->irq = irq; 144 dev->irq = irq;
147 priv->base = addr; 145 priv->base = addr;
148#ifdef CONFIG_HAVE_CLK
149 priv->can.clock.freq = clk_get_rate(clk); 146 priv->can.clock.freq = clk_get_rate(clk);
150 priv->priv = clk; 147 priv->priv = clk;
151#endif
152 148
153 platform_set_drvdata(pdev, dev); 149 platform_set_drvdata(pdev, dev);
154 SET_NETDEV_DEV(dev, &pdev->dev); 150 SET_NETDEV_DEV(dev, &pdev->dev);
@@ -172,10 +168,8 @@ exit_iounmap:
172exit_release_mem: 168exit_release_mem:
173 release_mem_region(mem->start, resource_size(mem)); 169 release_mem_region(mem->start, resource_size(mem));
174exit_free_clk: 170exit_free_clk:
175#ifdef CONFIG_HAVE_CLK
176 clk_put(clk); 171 clk_put(clk);
177exit: 172exit:
178#endif
179 dev_err(&pdev->dev, "probe failed\n"); 173 dev_err(&pdev->dev, "probe failed\n");
180 174
181 return ret; 175 return ret;
@@ -196,9 +190,7 @@ static int __devexit c_can_plat_remove(struct platform_device *pdev)
196 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 190 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
197 release_mem_region(mem->start, resource_size(mem)); 191 release_mem_region(mem->start, resource_size(mem));
198 192
199#ifdef CONFIG_HAVE_CLK
200 clk_put(priv->priv); 193 clk_put(priv->priv);
201#endif
202 194
203 return 0; 195 return 0;
204} 196}
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
index ab4c376cb276..f2d3665430ad 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
@@ -82,9 +82,7 @@ struct stmmac_priv {
82 struct stmmac_counters mmc; 82 struct stmmac_counters mmc;
83 struct dma_features dma_cap; 83 struct dma_features dma_cap;
84 int hw_cap_support; 84 int hw_cap_support;
85#ifdef CONFIG_HAVE_CLK
86 struct clk *stmmac_clk; 85 struct clk *stmmac_clk;
87#endif
88 int clk_csr; 86 int clk_csr;
89 int synopsys_id; 87 int synopsys_id;
90 struct timer_list eee_ctrl_timer; 88 struct timer_list eee_ctrl_timer;
@@ -113,46 +111,6 @@ struct stmmac_priv *stmmac_dvr_probe(struct device *device,
113void stmmac_disable_eee_mode(struct stmmac_priv *priv); 111void stmmac_disable_eee_mode(struct stmmac_priv *priv);
114bool stmmac_eee_init(struct stmmac_priv *priv); 112bool stmmac_eee_init(struct stmmac_priv *priv);
115 113
116#ifdef CONFIG_HAVE_CLK
117static inline int stmmac_clk_enable(struct stmmac_priv *priv)
118{
119 if (!IS_ERR(priv->stmmac_clk))
120 return clk_prepare_enable(priv->stmmac_clk);
121
122 return 0;
123}
124
125static inline void stmmac_clk_disable(struct stmmac_priv *priv)
126{
127 if (IS_ERR(priv->stmmac_clk))
128 return;
129
130 clk_disable_unprepare(priv->stmmac_clk);
131}
132static inline int stmmac_clk_get(struct stmmac_priv *priv)
133{
134 priv->stmmac_clk = clk_get(priv->device, NULL);
135
136 if (IS_ERR(priv->stmmac_clk))
137 return PTR_ERR(priv->stmmac_clk);
138
139 return 0;
140}
141#else
142static inline int stmmac_clk_enable(struct stmmac_priv *priv)
143{
144 return 0;
145}
146static inline void stmmac_clk_disable(struct stmmac_priv *priv)
147{
148}
149static inline int stmmac_clk_get(struct stmmac_priv *priv)
150{
151 return 0;
152}
153#endif /* CONFIG_HAVE_CLK */
154
155
156#ifdef CONFIG_STMMAC_PLATFORM 114#ifdef CONFIG_STMMAC_PLATFORM
157extern struct platform_driver stmmac_pltfr_driver; 115extern struct platform_driver stmmac_pltfr_driver;
158static inline int stmmac_register_platform(void) 116static inline int stmmac_register_platform(void)
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index f6b04c1a3672..fd8882f9602a 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -28,6 +28,7 @@
28 https://bugzilla.stlinux.com/ 28 https://bugzilla.stlinux.com/
29*******************************************************************************/ 29*******************************************************************************/
30 30
31#include <linux/clk.h>
31#include <linux/kernel.h> 32#include <linux/kernel.h>
32#include <linux/interrupt.h> 33#include <linux/interrupt.h>
33#include <linux/ip.h> 34#include <linux/ip.h>
@@ -173,12 +174,8 @@ static void stmmac_verify_args(void)
173 174
174static void stmmac_clk_csr_set(struct stmmac_priv *priv) 175static void stmmac_clk_csr_set(struct stmmac_priv *priv)
175{ 176{
176#ifdef CONFIG_HAVE_CLK
177 u32 clk_rate; 177 u32 clk_rate;
178 178
179 if (IS_ERR(priv->stmmac_clk))
180 return;
181
182 clk_rate = clk_get_rate(priv->stmmac_clk); 179 clk_rate = clk_get_rate(priv->stmmac_clk);
183 180
184 /* Platform provided default clk_csr would be assumed valid 181 /* Platform provided default clk_csr would be assumed valid
@@ -200,7 +197,6 @@ static void stmmac_clk_csr_set(struct stmmac_priv *priv)
200 * we can not estimate the proper divider as it is not known 197 * we can not estimate the proper divider as it is not known
201 * the frequency of clk_csr_i. So we do not change the default 198 * the frequency of clk_csr_i. So we do not change the default
202 * divider. */ 199 * divider. */
203#endif
204} 200}
205 201
206#if defined(STMMAC_XMIT_DEBUG) || defined(STMMAC_RX_DEBUG) 202#if defined(STMMAC_XMIT_DEBUG) || defined(STMMAC_RX_DEBUG)
@@ -1070,7 +1066,7 @@ static int stmmac_open(struct net_device *dev)
1070 } else 1066 } else
1071 priv->tm->enable = 1; 1067 priv->tm->enable = 1;
1072#endif 1068#endif
1073 stmmac_clk_enable(priv); 1069 clk_enable(priv->stmmac_clk);
1074 1070
1075 stmmac_check_ether_addr(priv); 1071 stmmac_check_ether_addr(priv);
1076 1072
@@ -1192,7 +1188,7 @@ open_error:
1192 if (priv->phydev) 1188 if (priv->phydev)
1193 phy_disconnect(priv->phydev); 1189 phy_disconnect(priv->phydev);
1194 1190
1195 stmmac_clk_disable(priv); 1191 clk_disable(priv->stmmac_clk);
1196 1192
1197 return ret; 1193 return ret;
1198} 1194}
@@ -1250,7 +1246,7 @@ static int stmmac_release(struct net_device *dev)
1250#ifdef CONFIG_STMMAC_DEBUG_FS 1246#ifdef CONFIG_STMMAC_DEBUG_FS
1251 stmmac_exit_fs(); 1247 stmmac_exit_fs();
1252#endif 1248#endif
1253 stmmac_clk_disable(priv); 1249 clk_disable(priv->stmmac_clk);
1254 1250
1255 return 0; 1251 return 0;
1256} 1252}
@@ -2078,11 +2074,14 @@ struct stmmac_priv *stmmac_dvr_probe(struct device *device,
2078 ret = register_netdev(ndev); 2074 ret = register_netdev(ndev);
2079 if (ret) { 2075 if (ret) {
2080 pr_err("%s: ERROR %i registering the device\n", __func__, ret); 2076 pr_err("%s: ERROR %i registering the device\n", __func__, ret);
2081 goto error; 2077 goto error_netdev_register;
2082 } 2078 }
2083 2079
2084 if (stmmac_clk_get(priv)) 2080 priv->stmmac_clk = clk_get(priv->device, NULL);
2081 if (IS_ERR(priv->stmmac_clk)) {
2085 pr_warning("%s: warning: cannot get CSR clock\n", __func__); 2082 pr_warning("%s: warning: cannot get CSR clock\n", __func__);
2083 goto error_clk_get;
2084 }
2086 2085
2087 /* If a specific clk_csr value is passed from the platform 2086 /* If a specific clk_csr value is passed from the platform
2088 * this means that the CSR Clock Range selection cannot be 2087 * this means that the CSR Clock Range selection cannot be
@@ -2100,15 +2099,17 @@ struct stmmac_priv *stmmac_dvr_probe(struct device *device,
2100 if (ret < 0) { 2099 if (ret < 0) {
2101 pr_debug("%s: MDIO bus (id: %d) registration failed", 2100 pr_debug("%s: MDIO bus (id: %d) registration failed",
2102 __func__, priv->plat->bus_id); 2101 __func__, priv->plat->bus_id);
2103 goto error; 2102 goto error_mdio_register;
2104 } 2103 }
2105 2104
2106 return priv; 2105 return priv;
2107 2106
2108error: 2107error_mdio_register:
2109 netif_napi_del(&priv->napi); 2108 clk_put(priv->stmmac_clk);
2110 2109error_clk_get:
2111 unregister_netdev(ndev); 2110 unregister_netdev(ndev);
2111error_netdev_register:
2112 netif_napi_del(&priv->napi);
2112 free_netdev(ndev); 2113 free_netdev(ndev);
2113 2114
2114 return NULL; 2115 return NULL;
@@ -2177,7 +2178,7 @@ int stmmac_suspend(struct net_device *ndev)
2177 else { 2178 else {
2178 stmmac_set_mac(priv->ioaddr, false); 2179 stmmac_set_mac(priv->ioaddr, false);
2179 /* Disable clock in case of PWM is off */ 2180 /* Disable clock in case of PWM is off */
2180 stmmac_clk_disable(priv); 2181 clk_disable(priv->stmmac_clk);
2181 } 2182 }
2182 spin_unlock_irqrestore(&priv->lock, flags); 2183 spin_unlock_irqrestore(&priv->lock, flags);
2183 return 0; 2184 return 0;
@@ -2202,7 +2203,7 @@ int stmmac_resume(struct net_device *ndev)
2202 priv->hw->mac->pmt(priv->ioaddr, 0); 2203 priv->hw->mac->pmt(priv->ioaddr, 0);
2203 else 2204 else
2204 /* enable the clk prevously disabled */ 2205 /* enable the clk prevously disabled */
2205 stmmac_clk_enable(priv); 2206 clk_enable(priv->stmmac_clk);
2206 2207
2207 netif_device_attach(ndev); 2208 netif_device_attach(ndev);
2208 2209
diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
index 98fbe62694d4..e771487132f7 100644
--- a/drivers/pps/pps.c
+++ b/drivers/pps/pps.c
@@ -327,8 +327,10 @@ int pps_register_cdev(struct pps_device *pps)
327 } 327 }
328 pps->dev = device_create(pps_class, pps->info.dev, devt, pps, 328 pps->dev = device_create(pps_class, pps->info.dev, devt, pps,
329 "pps%d", pps->id); 329 "pps%d", pps->id);
330 if (IS_ERR(pps->dev)) 330 if (IS_ERR(pps->dev)) {
331 err = PTR_ERR(pps->dev);
331 goto del_cdev; 332 goto del_cdev;
333 }
332 334
333 pps->dev->release = pps_device_destruct; 335 pps->dev->release = pps_device_destruct;
334 336
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index f049c02413ce..fabc99a75c65 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -704,6 +704,7 @@ config RTC_DRV_AB3100
704config RTC_DRV_AB8500 704config RTC_DRV_AB8500
705 tristate "ST-Ericsson AB8500 RTC" 705 tristate "ST-Ericsson AB8500 RTC"
706 depends on AB8500_CORE 706 depends on AB8500_CORE
707 select RTC_INTF_DEV_UIE_EMUL
707 help 708 help
708 Select this to enable the ST-Ericsson AB8500 power management IC RTC 709 Select this to enable the ST-Ericsson AB8500 power management IC RTC
709 support. This chip contains a battery- and capacitor-backed RTC. 710 support. This chip contains a battery- and capacitor-backed RTC.
diff --git a/drivers/rtc/rtc-ab8500.c b/drivers/rtc/rtc-ab8500.c
index 370889d0489b..bf3c2f669c3c 100644
--- a/drivers/rtc/rtc-ab8500.c
+++ b/drivers/rtc/rtc-ab8500.c
@@ -89,22 +89,17 @@ static int ab8500_rtc_read_time(struct device *dev, struct rtc_time *tm)
89 if (retval < 0) 89 if (retval < 0)
90 return retval; 90 return retval;
91 91
92 /* Early AB8500 chips will not clear the rtc read request bit */ 92 /* Wait for some cycles after enabling the rtc read in ab8500 */
93 if (abx500_get_chip_id(dev) == 0) { 93 while (time_before(jiffies, timeout)) {
94 usleep_range(1000, 1000); 94 retval = abx500_get_register_interruptible(dev,
95 } else { 95 AB8500_RTC, AB8500_RTC_READ_REQ_REG, &value);
96 /* Wait for some cycles after enabling the rtc read in ab8500 */ 96 if (retval < 0)
97 while (time_before(jiffies, timeout)) { 97 return retval;
98 retval = abx500_get_register_interruptible(dev, 98
99 AB8500_RTC, AB8500_RTC_READ_REQ_REG, &value); 99 if (!(value & RTC_READ_REQUEST))
100 if (retval < 0) 100 break;
101 return retval; 101
102 102 usleep_range(1000, 5000);
103 if (!(value & RTC_READ_REQUEST))
104 break;
105
106 usleep_range(1000, 5000);
107 }
108 } 103 }
109 104
110 /* Read the Watchtime registers */ 105 /* Read the Watchtime registers */
@@ -225,7 +220,8 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
225{ 220{
226 int retval, i; 221 int retval, i;
227 unsigned char buf[ARRAY_SIZE(ab8500_rtc_alarm_regs)]; 222 unsigned char buf[ARRAY_SIZE(ab8500_rtc_alarm_regs)];
228 unsigned long mins, secs = 0; 223 unsigned long mins, secs = 0, cursec = 0;
224 struct rtc_time curtm;
229 225
230 if (alarm->time.tm_year < (AB8500_RTC_EPOCH - 1900)) { 226 if (alarm->time.tm_year < (AB8500_RTC_EPOCH - 1900)) {
231 dev_dbg(dev, "year should be equal to or greater than %d\n", 227 dev_dbg(dev, "year should be equal to or greater than %d\n",
@@ -237,6 +233,18 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
237 rtc_tm_to_time(&alarm->time, &secs); 233 rtc_tm_to_time(&alarm->time, &secs);
238 234
239 /* 235 /*
236 * Check whether alarm is set less than 1min.
237 * Since our RTC doesn't support alarm resolution less than 1min,
238 * return -EINVAL, so UIE EMUL can take it up, incase of UIE_ON
239 */
240 ab8500_rtc_read_time(dev, &curtm); /* Read current time */
241 rtc_tm_to_time(&curtm, &cursec);
242 if ((secs - cursec) < 59) {
243 dev_dbg(dev, "Alarm less than 1 minute not supported\r\n");
244 return -EINVAL;
245 }
246
247 /*
240 * Convert it to the number of seconds since 01-01-2000 00:00:00, since 248 * Convert it to the number of seconds since 01-01-2000 00:00:00, since
241 * we only have a small counter in the RTC. 249 * we only have a small counter in the RTC.
242 */ 250 */
diff --git a/drivers/rtc/rtc-coh901331.c b/drivers/rtc/rtc-coh901331.c
index a5b8a0c4ea84..76b2156d3c62 100644
--- a/drivers/rtc/rtc-coh901331.c
+++ b/drivers/rtc/rtc-coh901331.c
@@ -155,13 +155,10 @@ static int __exit coh901331_remove(struct platform_device *pdev)
155 struct coh901331_port *rtap = dev_get_drvdata(&pdev->dev); 155 struct coh901331_port *rtap = dev_get_drvdata(&pdev->dev);
156 156
157 if (rtap) { 157 if (rtap) {
158 free_irq(rtap->irq, rtap);
159 rtc_device_unregister(rtap->rtc); 158 rtc_device_unregister(rtap->rtc);
159 clk_unprepare(rtap->clk);
160 clk_put(rtap->clk); 160 clk_put(rtap->clk);
161 iounmap(rtap->virtbase);
162 release_mem_region(rtap->phybase, rtap->physize);
163 platform_set_drvdata(pdev, NULL); 161 platform_set_drvdata(pdev, NULL);
164 kfree(rtap);
165 } 162 }
166 163
167 return 0; 164 return 0;
@@ -174,49 +171,43 @@ static int __init coh901331_probe(struct platform_device *pdev)
174 struct coh901331_port *rtap; 171 struct coh901331_port *rtap;
175 struct resource *res; 172 struct resource *res;
176 173
177 rtap = kzalloc(sizeof(struct coh901331_port), GFP_KERNEL); 174 rtap = devm_kzalloc(&pdev->dev,
175 sizeof(struct coh901331_port), GFP_KERNEL);
178 if (!rtap) 176 if (!rtap)
179 return -ENOMEM; 177 return -ENOMEM;
180 178
181 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 179 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
182 if (!res) { 180 if (!res)
183 ret = -ENOENT; 181 return -ENOENT;
184 goto out_no_resource; 182
185 }
186 rtap->phybase = res->start; 183 rtap->phybase = res->start;
187 rtap->physize = resource_size(res); 184 rtap->physize = resource_size(res);
188 185
189 if (request_mem_region(rtap->phybase, rtap->physize, 186 if (devm_request_mem_region(&pdev->dev, rtap->phybase, rtap->physize,
190 "rtc-coh901331") == NULL) { 187 "rtc-coh901331") == NULL)
191 ret = -EBUSY; 188 return -EBUSY;
192 goto out_no_memregion;
193 }
194 189
195 rtap->virtbase = ioremap(rtap->phybase, rtap->physize); 190 rtap->virtbase = devm_ioremap(&pdev->dev, rtap->phybase, rtap->physize);
196 if (!rtap->virtbase) { 191 if (!rtap->virtbase)
197 ret = -ENOMEM; 192 return -ENOMEM;
198 goto out_no_remap;
199 }
200 193
201 rtap->irq = platform_get_irq(pdev, 0); 194 rtap->irq = platform_get_irq(pdev, 0);
202 if (request_irq(rtap->irq, coh901331_interrupt, 0, 195 if (devm_request_irq(&pdev->dev, rtap->irq, coh901331_interrupt, 0,
203 "RTC COH 901 331 Alarm", rtap)) { 196 "RTC COH 901 331 Alarm", rtap))
204 ret = -EIO; 197 return -EIO;
205 goto out_no_irq;
206 }
207 198
208 rtap->clk = clk_get(&pdev->dev, NULL); 199 rtap->clk = clk_get(&pdev->dev, NULL);
209 if (IS_ERR(rtap->clk)) { 200 if (IS_ERR(rtap->clk)) {
210 ret = PTR_ERR(rtap->clk); 201 ret = PTR_ERR(rtap->clk);
211 dev_err(&pdev->dev, "could not get clock\n"); 202 dev_err(&pdev->dev, "could not get clock\n");
212 goto out_no_clk; 203 return ret;
213 } 204 }
214 205
215 /* We enable/disable the clock only to assure it works */ 206 /* We enable/disable the clock only to assure it works */
216 ret = clk_enable(rtap->clk); 207 ret = clk_prepare_enable(rtap->clk);
217 if (ret) { 208 if (ret) {
218 dev_err(&pdev->dev, "could not enable clock\n"); 209 dev_err(&pdev->dev, "could not enable clock\n");
219 goto out_no_clk_enable; 210 goto out_no_clk_prepenable;
220 } 211 }
221 clk_disable(rtap->clk); 212 clk_disable(rtap->clk);
222 213
@@ -232,18 +223,9 @@ static int __init coh901331_probe(struct platform_device *pdev)
232 223
233 out_no_rtc: 224 out_no_rtc:
234 platform_set_drvdata(pdev, NULL); 225 platform_set_drvdata(pdev, NULL);
235 out_no_clk_enable: 226 clk_unprepare(rtap->clk);
227 out_no_clk_prepenable:
236 clk_put(rtap->clk); 228 clk_put(rtap->clk);
237 out_no_clk:
238 free_irq(rtap->irq, rtap);
239 out_no_irq:
240 iounmap(rtap->virtbase);
241 out_no_remap:
242 platform_set_drvdata(pdev, NULL);
243 out_no_memregion:
244 release_mem_region(rtap->phybase, SZ_4K);
245 out_no_resource:
246 kfree(rtap);
247 return ret; 229 return ret;
248} 230}
249 231
@@ -265,6 +247,7 @@ static int coh901331_suspend(struct platform_device *pdev, pm_message_t state)
265 writel(0, rtap->virtbase + COH901331_IRQ_MASK); 247 writel(0, rtap->virtbase + COH901331_IRQ_MASK);
266 clk_disable(rtap->clk); 248 clk_disable(rtap->clk);
267 } 249 }
250 clk_unprepare(rtap->clk);
268 return 0; 251 return 0;
269} 252}
270 253
@@ -272,6 +255,7 @@ static int coh901331_resume(struct platform_device *pdev)
272{ 255{
273 struct coh901331_port *rtap = dev_get_drvdata(&pdev->dev); 256 struct coh901331_port *rtap = dev_get_drvdata(&pdev->dev);
274 257
258 clk_prepare(rtap->clk);
275 if (device_may_wakeup(&pdev->dev)) { 259 if (device_may_wakeup(&pdev->dev)) {
276 disable_irq_wake(rtap->irq); 260 disable_irq_wake(rtap->irq);
277 } else { 261 } else {
@@ -293,6 +277,7 @@ static void coh901331_shutdown(struct platform_device *pdev)
293 clk_enable(rtap->clk); 277 clk_enable(rtap->clk);
294 writel(0, rtap->virtbase + COH901331_IRQ_MASK); 278 writel(0, rtap->virtbase + COH901331_IRQ_MASK);
295 clk_disable(rtap->clk); 279 clk_disable(rtap->clk);
280 clk_unprepare(rtap->clk);
296} 281}
297 282
298static struct platform_driver coh901331_driver = { 283static struct platform_driver coh901331_driver = {
diff --git a/drivers/rtc/rtc-da9052.c b/drivers/rtc/rtc-da9052.c
index da6ab5291a41..78070255bd3f 100644
--- a/drivers/rtc/rtc-da9052.c
+++ b/drivers/rtc/rtc-da9052.c
@@ -245,7 +245,7 @@ static int __devinit da9052_rtc_probe(struct platform_device *pdev)
245 "ALM", rtc); 245 "ALM", rtc);
246 if (ret != 0) { 246 if (ret != 0) {
247 rtc_err(rtc->da9052, "irq registration failed: %d\n", ret); 247 rtc_err(rtc->da9052, "irq registration failed: %d\n", ret);
248 goto err_mem; 248 return ret;
249 } 249 }
250 250
251 rtc->rtc = rtc_device_register(pdev->name, &pdev->dev, 251 rtc->rtc = rtc_device_register(pdev->name, &pdev->dev,
@@ -259,8 +259,6 @@ static int __devinit da9052_rtc_probe(struct platform_device *pdev)
259 259
260err_free_irq: 260err_free_irq:
261 free_irq(rtc->irq, rtc); 261 free_irq(rtc->irq, rtc);
262err_mem:
263 devm_kfree(&pdev->dev, rtc);
264 return ret; 262 return ret;
265} 263}
266 264
@@ -271,7 +269,6 @@ static int __devexit da9052_rtc_remove(struct platform_device *pdev)
271 rtc_device_unregister(rtc->rtc); 269 rtc_device_unregister(rtc->rtc);
272 free_irq(rtc->irq, rtc); 270 free_irq(rtc->irq, rtc);
273 platform_set_drvdata(pdev, NULL); 271 platform_set_drvdata(pdev, NULL);
274 devm_kfree(&pdev->dev, rtc);
275 272
276 return 0; 273 return 0;
277} 274}
diff --git a/drivers/rtc/rtc-mc13xxx.c b/drivers/rtc/rtc-mc13xxx.c
index 546f6850bffb..2643d8874925 100644
--- a/drivers/rtc/rtc-mc13xxx.c
+++ b/drivers/rtc/rtc-mc13xxx.c
@@ -404,9 +404,12 @@ static const struct platform_device_id mc13xxx_rtc_idtable[] = {
404 .name = "mc13783-rtc", 404 .name = "mc13783-rtc",
405 }, { 405 }, {
406 .name = "mc13892-rtc", 406 .name = "mc13892-rtc",
407 }, {
408 .name = "mc34708-rtc",
407 }, 409 },
408 { } 410 { /* sentinel */ }
409}; 411};
412MODULE_DEVICE_TABLE(platform, mc13xxx_rtc_idtable);
410 413
411static struct platform_driver mc13xxx_rtc_driver = { 414static struct platform_driver mc13xxx_rtc_driver = {
412 .id_table = mc13xxx_rtc_idtable, 415 .id_table = mc13xxx_rtc_idtable,
@@ -432,4 +435,3 @@ module_exit(mc13xxx_rtc_exit);
432MODULE_AUTHOR("Sascha Hauer <s.hauer@pengutronix.de>"); 435MODULE_AUTHOR("Sascha Hauer <s.hauer@pengutronix.de>");
433MODULE_DESCRIPTION("RTC driver for Freescale MC13XXX PMIC"); 436MODULE_DESCRIPTION("RTC driver for Freescale MC13XXX PMIC");
434MODULE_LICENSE("GPL v2"); 437MODULE_LICENSE("GPL v2");
435MODULE_ALIAS("platform:" DRIVER_NAME);
diff --git a/drivers/rtc/rtc-pcf8563.c b/drivers/rtc/rtc-pcf8563.c
index 97a3284bb7c6..c2fe426a6ef2 100644
--- a/drivers/rtc/rtc-pcf8563.c
+++ b/drivers/rtc/rtc-pcf8563.c
@@ -19,6 +19,7 @@
19#include <linux/rtc.h> 19#include <linux/rtc.h>
20#include <linux/slab.h> 20#include <linux/slab.h>
21#include <linux/module.h> 21#include <linux/module.h>
22#include <linux/of.h>
22 23
23#define DRV_VERSION "0.4.3" 24#define DRV_VERSION "0.4.3"
24 25
@@ -285,9 +286,19 @@ static const struct i2c_device_id pcf8563_id[] = {
285}; 286};
286MODULE_DEVICE_TABLE(i2c, pcf8563_id); 287MODULE_DEVICE_TABLE(i2c, pcf8563_id);
287 288
289#ifdef CONFIG_OF
290static const struct of_device_id pcf8563_of_match[] __devinitconst = {
291 { .compatible = "nxp,pcf8563" },
292 {}
293};
294MODULE_DEVICE_TABLE(of, pcf8563_of_match);
295#endif
296
288static struct i2c_driver pcf8563_driver = { 297static struct i2c_driver pcf8563_driver = {
289 .driver = { 298 .driver = {
290 .name = "rtc-pcf8563", 299 .name = "rtc-pcf8563",
300 .owner = THIS_MODULE,
301 .of_match_table = of_match_ptr(pcf8563_of_match),
291 }, 302 },
292 .probe = pcf8563_probe, 303 .probe = pcf8563_probe,
293 .remove = pcf8563_remove, 304 .remove = pcf8563_remove,
diff --git a/drivers/rtc/rtc-pl031.c b/drivers/rtc/rtc-pl031.c
index cc0533994f6e..08378e3cc21c 100644
--- a/drivers/rtc/rtc-pl031.c
+++ b/drivers/rtc/rtc-pl031.c
@@ -68,11 +68,26 @@
68 68
69#define RTC_TIMER_FREQ 32768 69#define RTC_TIMER_FREQ 32768
70 70
71/**
72 * struct pl031_vendor_data - per-vendor variations
73 * @ops: the vendor-specific operations used on this silicon version
74 * @clockwatch: if this is an ST Microelectronics silicon version with a
75 * clockwatch function
76 * @st_weekday: if this is an ST Microelectronics silicon version that need
77 * the weekday fix
78 * @irqflags: special IRQ flags per variant
79 */
80struct pl031_vendor_data {
81 struct rtc_class_ops ops;
82 bool clockwatch;
83 bool st_weekday;
84 unsigned long irqflags;
85};
86
71struct pl031_local { 87struct pl031_local {
88 struct pl031_vendor_data *vendor;
72 struct rtc_device *rtc; 89 struct rtc_device *rtc;
73 void __iomem *base; 90 void __iomem *base;
74 u8 hw_designer;
75 u8 hw_revision:4;
76}; 91};
77 92
78static int pl031_alarm_irq_enable(struct device *dev, 93static int pl031_alarm_irq_enable(struct device *dev,
@@ -303,7 +318,8 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
303{ 318{
304 int ret; 319 int ret;
305 struct pl031_local *ldata; 320 struct pl031_local *ldata;
306 struct rtc_class_ops *ops = id->data; 321 struct pl031_vendor_data *vendor = id->data;
322 struct rtc_class_ops *ops = &vendor->ops;
307 unsigned long time; 323 unsigned long time;
308 324
309 ret = amba_request_regions(adev, NULL); 325 ret = amba_request_regions(adev, NULL);
@@ -315,6 +331,7 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
315 ret = -ENOMEM; 331 ret = -ENOMEM;
316 goto out; 332 goto out;
317 } 333 }
334 ldata->vendor = vendor;
318 335
319 ldata->base = ioremap(adev->res.start, resource_size(&adev->res)); 336 ldata->base = ioremap(adev->res.start, resource_size(&adev->res));
320 337
@@ -325,14 +342,11 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
325 342
326 amba_set_drvdata(adev, ldata); 343 amba_set_drvdata(adev, ldata);
327 344
328 ldata->hw_designer = amba_manf(adev); 345 dev_dbg(&adev->dev, "designer ID = 0x%02x\n", amba_manf(adev));
329 ldata->hw_revision = amba_rev(adev); 346 dev_dbg(&adev->dev, "revision = 0x%01x\n", amba_rev(adev));
330
331 dev_dbg(&adev->dev, "designer ID = 0x%02x\n", ldata->hw_designer);
332 dev_dbg(&adev->dev, "revision = 0x%01x\n", ldata->hw_revision);
333 347
334 /* Enable the clockwatch on ST Variants */ 348 /* Enable the clockwatch on ST Variants */
335 if (ldata->hw_designer == AMBA_VENDOR_ST) 349 if (vendor->clockwatch)
336 writel(readl(ldata->base + RTC_CR) | RTC_CR_CWEN, 350 writel(readl(ldata->base + RTC_CR) | RTC_CR_CWEN,
337 ldata->base + RTC_CR); 351 ldata->base + RTC_CR);
338 352
@@ -340,7 +354,7 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
340 * On ST PL031 variants, the RTC reset value does not provide correct 354 * On ST PL031 variants, the RTC reset value does not provide correct
341 * weekday for 2000-01-01. Correct the erroneous sunday to saturday. 355 * weekday for 2000-01-01. Correct the erroneous sunday to saturday.
342 */ 356 */
343 if (ldata->hw_designer == AMBA_VENDOR_ST) { 357 if (vendor->st_weekday) {
344 if (readl(ldata->base + RTC_YDR) == 0x2000) { 358 if (readl(ldata->base + RTC_YDR) == 0x2000) {
345 time = readl(ldata->base + RTC_DR); 359 time = readl(ldata->base + RTC_DR);
346 if ((time & 360 if ((time &
@@ -361,7 +375,7 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
361 } 375 }
362 376
363 if (request_irq(adev->irq[0], pl031_interrupt, 377 if (request_irq(adev->irq[0], pl031_interrupt,
364 0, "rtc-pl031", ldata)) { 378 vendor->irqflags, "rtc-pl031", ldata)) {
365 ret = -EIO; 379 ret = -EIO;
366 goto out_no_irq; 380 goto out_no_irq;
367 } 381 }
@@ -383,48 +397,65 @@ err_req:
383} 397}
384 398
385/* Operations for the original ARM version */ 399/* Operations for the original ARM version */
386static struct rtc_class_ops arm_pl031_ops = { 400static struct pl031_vendor_data arm_pl031 = {
387 .read_time = pl031_read_time, 401 .ops = {
388 .set_time = pl031_set_time, 402 .read_time = pl031_read_time,
389 .read_alarm = pl031_read_alarm, 403 .set_time = pl031_set_time,
390 .set_alarm = pl031_set_alarm, 404 .read_alarm = pl031_read_alarm,
391 .alarm_irq_enable = pl031_alarm_irq_enable, 405 .set_alarm = pl031_set_alarm,
406 .alarm_irq_enable = pl031_alarm_irq_enable,
407 },
408 .irqflags = IRQF_NO_SUSPEND,
392}; 409};
393 410
394/* The First ST derivative */ 411/* The First ST derivative */
395static struct rtc_class_ops stv1_pl031_ops = { 412static struct pl031_vendor_data stv1_pl031 = {
396 .read_time = pl031_read_time, 413 .ops = {
397 .set_time = pl031_set_time, 414 .read_time = pl031_read_time,
398 .read_alarm = pl031_read_alarm, 415 .set_time = pl031_set_time,
399 .set_alarm = pl031_set_alarm, 416 .read_alarm = pl031_read_alarm,
400 .alarm_irq_enable = pl031_alarm_irq_enable, 417 .set_alarm = pl031_set_alarm,
418 .alarm_irq_enable = pl031_alarm_irq_enable,
419 },
420 .clockwatch = true,
421 .st_weekday = true,
422 .irqflags = IRQF_NO_SUSPEND,
401}; 423};
402 424
403/* And the second ST derivative */ 425/* And the second ST derivative */
404static struct rtc_class_ops stv2_pl031_ops = { 426static struct pl031_vendor_data stv2_pl031 = {
405 .read_time = pl031_stv2_read_time, 427 .ops = {
406 .set_time = pl031_stv2_set_time, 428 .read_time = pl031_stv2_read_time,
407 .read_alarm = pl031_stv2_read_alarm, 429 .set_time = pl031_stv2_set_time,
408 .set_alarm = pl031_stv2_set_alarm, 430 .read_alarm = pl031_stv2_read_alarm,
409 .alarm_irq_enable = pl031_alarm_irq_enable, 431 .set_alarm = pl031_stv2_set_alarm,
432 .alarm_irq_enable = pl031_alarm_irq_enable,
433 },
434 .clockwatch = true,
435 .st_weekday = true,
436 /*
437 * This variant shares the IRQ with another block and must not
438 * suspend that IRQ line.
439 */
440 .irqflags = IRQF_SHARED | IRQF_NO_SUSPEND,
410}; 441};
411 442
412static struct amba_id pl031_ids[] = { 443static struct amba_id pl031_ids[] = {
413 { 444 {
414 .id = 0x00041031, 445 .id = 0x00041031,
415 .mask = 0x000fffff, 446 .mask = 0x000fffff,
416 .data = &arm_pl031_ops, 447 .data = &arm_pl031,
417 }, 448 },
418 /* ST Micro variants */ 449 /* ST Micro variants */
419 { 450 {
420 .id = 0x00180031, 451 .id = 0x00180031,
421 .mask = 0x00ffffff, 452 .mask = 0x00ffffff,
422 .data = &stv1_pl031_ops, 453 .data = &stv1_pl031,
423 }, 454 },
424 { 455 {
425 .id = 0x00280031, 456 .id = 0x00280031,
426 .mask = 0x00ffffff, 457 .mask = 0x00ffffff,
427 .data = &stv2_pl031_ops, 458 .data = &stv2_pl031,
428 }, 459 },
429 {0, 0}, 460 {0, 0},
430}; 461};
diff --git a/drivers/rtc/rtc-r9701.c b/drivers/rtc/rtc-r9701.c
index 33b6ba0afa0d..2c183ebff715 100644
--- a/drivers/rtc/rtc-r9701.c
+++ b/drivers/rtc/rtc-r9701.c
@@ -138,8 +138,7 @@ static int __devinit r9701_probe(struct spi_device *spi)
138 * contain invalid values. If so, try to write a default date: 138 * contain invalid values. If so, try to write a default date:
139 * 2000/1/1 00:00:00 139 * 2000/1/1 00:00:00
140 */ 140 */
141 r9701_get_datetime(&spi->dev, &dt); 141 if (r9701_get_datetime(&spi->dev, &dt)) {
142 if (rtc_valid_tm(&dt)) {
143 dev_info(&spi->dev, "trying to repair invalid date/time\n"); 142 dev_info(&spi->dev, "trying to repair invalid date/time\n");
144 dt.tm_sec = 0; 143 dt.tm_sec = 0;
145 dt.tm_min = 0; 144 dt.tm_min = 0;
@@ -148,7 +147,8 @@ static int __devinit r9701_probe(struct spi_device *spi)
148 dt.tm_mon = 0; 147 dt.tm_mon = 0;
149 dt.tm_year = 100; 148 dt.tm_year = 100;
150 149
151 if (r9701_set_datetime(&spi->dev, &dt)) { 150 if (r9701_set_datetime(&spi->dev, &dt) ||
151 r9701_get_datetime(&spi->dev, &dt)) {
152 dev_err(&spi->dev, "cannot repair RTC register\n"); 152 dev_err(&spi->dev, "cannot repair RTC register\n");
153 return -ENODEV; 153 return -ENODEV;
154 } 154 }
diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c
index 7e6af0b22f17..bfbd92c8d1c9 100644
--- a/drivers/rtc/rtc-s3c.c
+++ b/drivers/rtc/rtc-s3c.c
@@ -26,10 +26,10 @@
26#include <linux/log2.h> 26#include <linux/log2.h>
27#include <linux/slab.h> 27#include <linux/slab.h>
28#include <linux/of.h> 28#include <linux/of.h>
29#include <linux/uaccess.h>
30#include <linux/io.h>
29 31
30#include <mach/hardware.h> 32#include <mach/hardware.h>
31#include <asm/uaccess.h>
32#include <asm/io.h>
33#include <asm/irq.h> 33#include <asm/irq.h>
34#include <plat/regs-rtc.h> 34#include <plat/regs-rtc.h>
35 35
diff --git a/drivers/usb/gadget/m66592-udc.c b/drivers/usb/gadget/m66592-udc.c
index 8981fbb5748c..cf6bd626f3fe 100644
--- a/drivers/usb/gadget/m66592-udc.c
+++ b/drivers/usb/gadget/m66592-udc.c
@@ -1583,12 +1583,10 @@ static int __exit m66592_remove(struct platform_device *pdev)
1583 iounmap(m66592->reg); 1583 iounmap(m66592->reg);
1584 free_irq(platform_get_irq(pdev, 0), m66592); 1584 free_irq(platform_get_irq(pdev, 0), m66592);
1585 m66592_free_request(&m66592->ep[0].ep, m66592->ep0_req); 1585 m66592_free_request(&m66592->ep[0].ep, m66592->ep0_req);
1586#ifdef CONFIG_HAVE_CLK
1587 if (m66592->pdata->on_chip) { 1586 if (m66592->pdata->on_chip) {
1588 clk_disable(m66592->clk); 1587 clk_disable(m66592->clk);
1589 clk_put(m66592->clk); 1588 clk_put(m66592->clk);
1590 } 1589 }
1591#endif
1592 kfree(m66592); 1590 kfree(m66592);
1593 return 0; 1591 return 0;
1594} 1592}
@@ -1602,9 +1600,7 @@ static int __init m66592_probe(struct platform_device *pdev)
1602 struct resource *res, *ires; 1600 struct resource *res, *ires;
1603 void __iomem *reg = NULL; 1601 void __iomem *reg = NULL;
1604 struct m66592 *m66592 = NULL; 1602 struct m66592 *m66592 = NULL;
1605#ifdef CONFIG_HAVE_CLK
1606 char clk_name[8]; 1603 char clk_name[8];
1607#endif
1608 int ret = 0; 1604 int ret = 0;
1609 int i; 1605 int i;
1610 1606
@@ -1671,7 +1667,6 @@ static int __init m66592_probe(struct platform_device *pdev)
1671 goto clean_up; 1667 goto clean_up;
1672 } 1668 }
1673 1669
1674#ifdef CONFIG_HAVE_CLK
1675 if (m66592->pdata->on_chip) { 1670 if (m66592->pdata->on_chip) {
1676 snprintf(clk_name, sizeof(clk_name), "usbf%d", pdev->id); 1671 snprintf(clk_name, sizeof(clk_name), "usbf%d", pdev->id);
1677 m66592->clk = clk_get(&pdev->dev, clk_name); 1672 m66592->clk = clk_get(&pdev->dev, clk_name);
@@ -1683,7 +1678,7 @@ static int __init m66592_probe(struct platform_device *pdev)
1683 } 1678 }
1684 clk_enable(m66592->clk); 1679 clk_enable(m66592->clk);
1685 } 1680 }
1686#endif 1681
1687 INIT_LIST_HEAD(&m66592->gadget.ep_list); 1682 INIT_LIST_HEAD(&m66592->gadget.ep_list);
1688 m66592->gadget.ep0 = &m66592->ep[0].ep; 1683 m66592->gadget.ep0 = &m66592->ep[0].ep;
1689 INIT_LIST_HEAD(&m66592->gadget.ep0->ep_list); 1684 INIT_LIST_HEAD(&m66592->gadget.ep0->ep_list);
@@ -1731,13 +1726,11 @@ err_add_udc:
1731 m66592_free_request(&m66592->ep[0].ep, m66592->ep0_req); 1726 m66592_free_request(&m66592->ep[0].ep, m66592->ep0_req);
1732 1727
1733clean_up3: 1728clean_up3:
1734#ifdef CONFIG_HAVE_CLK
1735 if (m66592->pdata->on_chip) { 1729 if (m66592->pdata->on_chip) {
1736 clk_disable(m66592->clk); 1730 clk_disable(m66592->clk);
1737 clk_put(m66592->clk); 1731 clk_put(m66592->clk);
1738 } 1732 }
1739clean_up2: 1733clean_up2:
1740#endif
1741 free_irq(ires->start, m66592); 1734 free_irq(ires->start, m66592);
1742clean_up: 1735clean_up:
1743 if (m66592) { 1736 if (m66592) {
diff --git a/drivers/usb/gadget/m66592-udc.h b/drivers/usb/gadget/m66592-udc.h
index 88c85b4116a2..16c7e14678b8 100644
--- a/drivers/usb/gadget/m66592-udc.h
+++ b/drivers/usb/gadget/m66592-udc.h
@@ -13,10 +13,7 @@
13#ifndef __M66592_UDC_H__ 13#ifndef __M66592_UDC_H__
14#define __M66592_UDC_H__ 14#define __M66592_UDC_H__
15 15
16#ifdef CONFIG_HAVE_CLK
17#include <linux/clk.h> 16#include <linux/clk.h>
18#endif
19
20#include <linux/usb/m66592.h> 17#include <linux/usb/m66592.h>
21 18
22#define M66592_SYSCFG 0x00 19#define M66592_SYSCFG 0x00
@@ -468,9 +465,7 @@ struct m66592_ep {
468struct m66592 { 465struct m66592 {
469 spinlock_t lock; 466 spinlock_t lock;
470 void __iomem *reg; 467 void __iomem *reg;
471#ifdef CONFIG_HAVE_CLK
472 struct clk *clk; 468 struct clk *clk;
473#endif
474 struct m66592_platdata *pdata; 469 struct m66592_platdata *pdata;
475 unsigned long irq_trigger; 470 unsigned long irq_trigger;
476 471
diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c
index f3ac2a20c27c..5a80751accb7 100644
--- a/drivers/usb/gadget/r8a66597-udc.c
+++ b/drivers/usb/gadget/r8a66597-udc.c
@@ -1831,12 +1831,12 @@ static int __exit r8a66597_remove(struct platform_device *pdev)
1831 iounmap(r8a66597->sudmac_reg); 1831 iounmap(r8a66597->sudmac_reg);
1832 free_irq(platform_get_irq(pdev, 0), r8a66597); 1832 free_irq(platform_get_irq(pdev, 0), r8a66597);
1833 r8a66597_free_request(&r8a66597->ep[0].ep, r8a66597->ep0_req); 1833 r8a66597_free_request(&r8a66597->ep[0].ep, r8a66597->ep0_req);
1834#ifdef CONFIG_HAVE_CLK 1834
1835 if (r8a66597->pdata->on_chip) { 1835 if (r8a66597->pdata->on_chip) {
1836 clk_disable(r8a66597->clk); 1836 clk_disable(r8a66597->clk);
1837 clk_put(r8a66597->clk); 1837 clk_put(r8a66597->clk);
1838 } 1838 }
1839#endif 1839
1840 device_unregister(&r8a66597->gadget.dev); 1840 device_unregister(&r8a66597->gadget.dev);
1841 kfree(r8a66597); 1841 kfree(r8a66597);
1842 return 0; 1842 return 0;
@@ -1868,9 +1868,7 @@ static int __init r8a66597_sudmac_ioremap(struct r8a66597 *r8a66597,
1868 1868
1869static int __init r8a66597_probe(struct platform_device *pdev) 1869static int __init r8a66597_probe(struct platform_device *pdev)
1870{ 1870{
1871#ifdef CONFIG_HAVE_CLK
1872 char clk_name[8]; 1871 char clk_name[8];
1873#endif
1874 struct resource *res, *ires; 1872 struct resource *res, *ires;
1875 int irq; 1873 int irq;
1876 void __iomem *reg = NULL; 1874 void __iomem *reg = NULL;
@@ -1934,7 +1932,6 @@ static int __init r8a66597_probe(struct platform_device *pdev)
1934 r8a66597->timer.data = (unsigned long)r8a66597; 1932 r8a66597->timer.data = (unsigned long)r8a66597;
1935 r8a66597->reg = reg; 1933 r8a66597->reg = reg;
1936 1934
1937#ifdef CONFIG_HAVE_CLK
1938 if (r8a66597->pdata->on_chip) { 1935 if (r8a66597->pdata->on_chip) {
1939 snprintf(clk_name, sizeof(clk_name), "usb%d", pdev->id); 1936 snprintf(clk_name, sizeof(clk_name), "usb%d", pdev->id);
1940 r8a66597->clk = clk_get(&pdev->dev, clk_name); 1937 r8a66597->clk = clk_get(&pdev->dev, clk_name);
@@ -1946,7 +1943,7 @@ static int __init r8a66597_probe(struct platform_device *pdev)
1946 } 1943 }
1947 clk_enable(r8a66597->clk); 1944 clk_enable(r8a66597->clk);
1948 } 1945 }
1949#endif 1946
1950 if (r8a66597->pdata->sudmac) { 1947 if (r8a66597->pdata->sudmac) {
1951 ret = r8a66597_sudmac_ioremap(r8a66597, pdev); 1948 ret = r8a66597_sudmac_ioremap(r8a66597, pdev);
1952 if (ret < 0) 1949 if (ret < 0)
@@ -2006,13 +2003,11 @@ err_add_udc:
2006clean_up3: 2003clean_up3:
2007 free_irq(irq, r8a66597); 2004 free_irq(irq, r8a66597);
2008clean_up2: 2005clean_up2:
2009#ifdef CONFIG_HAVE_CLK
2010 if (r8a66597->pdata->on_chip) { 2006 if (r8a66597->pdata->on_chip) {
2011 clk_disable(r8a66597->clk); 2007 clk_disable(r8a66597->clk);
2012 clk_put(r8a66597->clk); 2008 clk_put(r8a66597->clk);
2013 } 2009 }
2014clean_up_dev: 2010clean_up_dev:
2015#endif
2016 device_unregister(&r8a66597->gadget.dev); 2011 device_unregister(&r8a66597->gadget.dev);
2017clean_up: 2012clean_up:
2018 if (r8a66597) { 2013 if (r8a66597) {
diff --git a/drivers/usb/gadget/r8a66597-udc.h b/drivers/usb/gadget/r8a66597-udc.h
index 99908c76ccd1..45c4b2df1785 100644
--- a/drivers/usb/gadget/r8a66597-udc.h
+++ b/drivers/usb/gadget/r8a66597-udc.h
@@ -13,10 +13,7 @@
13#ifndef __R8A66597_H__ 13#ifndef __R8A66597_H__
14#define __R8A66597_H__ 14#define __R8A66597_H__
15 15
16#ifdef CONFIG_HAVE_CLK
17#include <linux/clk.h> 16#include <linux/clk.h>
18#endif
19
20#include <linux/usb/r8a66597.h> 17#include <linux/usb/r8a66597.h>
21 18
22#define R8A66597_MAX_SAMPLING 10 19#define R8A66597_MAX_SAMPLING 10
@@ -92,9 +89,7 @@ struct r8a66597 {
92 void __iomem *reg; 89 void __iomem *reg;
93 void __iomem *sudmac_reg; 90 void __iomem *sudmac_reg;
94 91
95#ifdef CONFIG_HAVE_CLK
96 struct clk *clk; 92 struct clk *clk;
97#endif
98 struct r8a66597_platdata *pdata; 93 struct r8a66597_platdata *pdata;
99 94
100 struct usb_gadget gadget; 95 struct usb_gadget gadget;
diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c
index c868be65e763..4c634eb56358 100644
--- a/drivers/usb/host/r8a66597-hcd.c
+++ b/drivers/usb/host/r8a66597-hcd.c
@@ -95,9 +95,7 @@ static int r8a66597_clock_enable(struct r8a66597 *r8a66597)
95 int i = 0; 95 int i = 0;
96 96
97 if (r8a66597->pdata->on_chip) { 97 if (r8a66597->pdata->on_chip) {
98#ifdef CONFIG_HAVE_CLK
99 clk_enable(r8a66597->clk); 98 clk_enable(r8a66597->clk);
100#endif
101 do { 99 do {
102 r8a66597_write(r8a66597, SCKE, SYSCFG0); 100 r8a66597_write(r8a66597, SCKE, SYSCFG0);
103 tmp = r8a66597_read(r8a66597, SYSCFG0); 101 tmp = r8a66597_read(r8a66597, SYSCFG0);
@@ -141,9 +139,7 @@ static void r8a66597_clock_disable(struct r8a66597 *r8a66597)
141 udelay(1); 139 udelay(1);
142 140
143 if (r8a66597->pdata->on_chip) { 141 if (r8a66597->pdata->on_chip) {
144#ifdef CONFIG_HAVE_CLK
145 clk_disable(r8a66597->clk); 142 clk_disable(r8a66597->clk);
146#endif
147 } else { 143 } else {
148 r8a66597_bclr(r8a66597, PLLC, SYSCFG0); 144 r8a66597_bclr(r8a66597, PLLC, SYSCFG0);
149 r8a66597_bclr(r8a66597, XCKE, SYSCFG0); 145 r8a66597_bclr(r8a66597, XCKE, SYSCFG0);
@@ -2406,19 +2402,15 @@ static int __devexit r8a66597_remove(struct platform_device *pdev)
2406 del_timer_sync(&r8a66597->rh_timer); 2402 del_timer_sync(&r8a66597->rh_timer);
2407 usb_remove_hcd(hcd); 2403 usb_remove_hcd(hcd);
2408 iounmap(r8a66597->reg); 2404 iounmap(r8a66597->reg);
2409#ifdef CONFIG_HAVE_CLK
2410 if (r8a66597->pdata->on_chip) 2405 if (r8a66597->pdata->on_chip)
2411 clk_put(r8a66597->clk); 2406 clk_put(r8a66597->clk);
2412#endif
2413 usb_put_hcd(hcd); 2407 usb_put_hcd(hcd);
2414 return 0; 2408 return 0;
2415} 2409}
2416 2410
2417static int __devinit r8a66597_probe(struct platform_device *pdev) 2411static int __devinit r8a66597_probe(struct platform_device *pdev)
2418{ 2412{
2419#ifdef CONFIG_HAVE_CLK
2420 char clk_name[8]; 2413 char clk_name[8];
2421#endif
2422 struct resource *res = NULL, *ires; 2414 struct resource *res = NULL, *ires;
2423 int irq = -1; 2415 int irq = -1;
2424 void __iomem *reg = NULL; 2416 void __iomem *reg = NULL;
@@ -2482,7 +2474,6 @@ static int __devinit r8a66597_probe(struct platform_device *pdev)
2482 r8a66597->irq_sense_low = irq_trigger == IRQF_TRIGGER_LOW; 2474 r8a66597->irq_sense_low = irq_trigger == IRQF_TRIGGER_LOW;
2483 2475
2484 if (r8a66597->pdata->on_chip) { 2476 if (r8a66597->pdata->on_chip) {
2485#ifdef CONFIG_HAVE_CLK
2486 snprintf(clk_name, sizeof(clk_name), "usb%d", pdev->id); 2477 snprintf(clk_name, sizeof(clk_name), "usb%d", pdev->id);
2487 r8a66597->clk = clk_get(&pdev->dev, clk_name); 2478 r8a66597->clk = clk_get(&pdev->dev, clk_name);
2488 if (IS_ERR(r8a66597->clk)) { 2479 if (IS_ERR(r8a66597->clk)) {
@@ -2491,7 +2482,6 @@ static int __devinit r8a66597_probe(struct platform_device *pdev)
2491 ret = PTR_ERR(r8a66597->clk); 2482 ret = PTR_ERR(r8a66597->clk);
2492 goto clean_up2; 2483 goto clean_up2;
2493 } 2484 }
2494#endif
2495 r8a66597->max_root_hub = 1; 2485 r8a66597->max_root_hub = 1;
2496 } else 2486 } else
2497 r8a66597->max_root_hub = 2; 2487 r8a66597->max_root_hub = 2;
@@ -2531,11 +2521,9 @@ static int __devinit r8a66597_probe(struct platform_device *pdev)
2531 return 0; 2521 return 0;
2532 2522
2533clean_up3: 2523clean_up3:
2534#ifdef CONFIG_HAVE_CLK
2535 if (r8a66597->pdata->on_chip) 2524 if (r8a66597->pdata->on_chip)
2536 clk_put(r8a66597->clk); 2525 clk_put(r8a66597->clk);
2537clean_up2: 2526clean_up2:
2538#endif
2539 usb_put_hcd(hcd); 2527 usb_put_hcd(hcd);
2540 2528
2541clean_up: 2529clean_up:
diff --git a/drivers/usb/host/r8a66597.h b/drivers/usb/host/r8a66597.h
index f28782d20eef..672cea307abb 100644
--- a/drivers/usb/host/r8a66597.h
+++ b/drivers/usb/host/r8a66597.h
@@ -26,10 +26,7 @@
26#ifndef __R8A66597_H__ 26#ifndef __R8A66597_H__
27#define __R8A66597_H__ 27#define __R8A66597_H__
28 28
29#ifdef CONFIG_HAVE_CLK
30#include <linux/clk.h> 29#include <linux/clk.h>
31#endif
32
33#include <linux/usb/r8a66597.h> 30#include <linux/usb/r8a66597.h>
34 31
35#define R8A66597_MAX_NUM_PIPE 10 32#define R8A66597_MAX_NUM_PIPE 10
@@ -113,9 +110,7 @@ struct r8a66597_root_hub {
113struct r8a66597 { 110struct r8a66597 {
114 spinlock_t lock; 111 spinlock_t lock;
115 void __iomem *reg; 112 void __iomem *reg;
116#ifdef CONFIG_HAVE_CLK
117 struct clk *clk; 113 struct clk *clk;
118#endif
119 struct r8a66597_platdata *pdata; 114 struct r8a66597_platdata *pdata;
120 struct r8a66597_device device0; 115 struct r8a66597_device device0;
121 struct r8a66597_root_hub root_hub[R8A66597_MAX_ROOT_HUB]; 116 struct r8a66597_root_hub root_hub[R8A66597_MAX_ROOT_HUB];
diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h
index dbcdeea30f09..586105b55a7c 100644
--- a/drivers/usb/musb/musb_core.h
+++ b/drivers/usb/musb/musb_core.h
@@ -81,14 +81,6 @@ struct musb_ep;
81#define is_peripheral_active(m) (!(m)->is_host) 81#define is_peripheral_active(m) (!(m)->is_host)
82#define is_host_active(m) ((m)->is_host) 82#define is_host_active(m) ((m)->is_host)
83 83
84#ifndef CONFIG_HAVE_CLK
85/* Dummy stub for clk framework */
86#define clk_get(dev, id) NULL
87#define clk_put(clock) do {} while (0)
88#define clk_enable(clock) do {} while (0)
89#define clk_disable(clock) do {} while (0)
90#endif
91
92#ifdef CONFIG_PROC_FS 84#ifdef CONFIG_PROC_FS
93#include <linux/fs.h> 85#include <linux/fs.h>
94#define MUSB_CONFIG_PROC_FS 86#define MUSB_CONFIG_PROC_FS
diff --git a/drivers/video/backlight/atmel-pwm-bl.c b/drivers/video/backlight/atmel-pwm-bl.c
index 0443a4f71858..df1cbb7ef6ca 100644
--- a/drivers/video/backlight/atmel-pwm-bl.c
+++ b/drivers/video/backlight/atmel-pwm-bl.c
@@ -127,7 +127,8 @@ static int atmel_pwm_bl_probe(struct platform_device *pdev)
127 struct atmel_pwm_bl *pwmbl; 127 struct atmel_pwm_bl *pwmbl;
128 int retval; 128 int retval;
129 129
130 pwmbl = kzalloc(sizeof(struct atmel_pwm_bl), GFP_KERNEL); 130 pwmbl = devm_kzalloc(&pdev->dev, sizeof(struct atmel_pwm_bl),
131 GFP_KERNEL);
131 if (!pwmbl) 132 if (!pwmbl)
132 return -ENOMEM; 133 return -ENOMEM;
133 134
@@ -154,7 +155,8 @@ static int atmel_pwm_bl_probe(struct platform_device *pdev)
154 goto err_free_mem; 155 goto err_free_mem;
155 156
156 if (pwmbl->gpio_on != -1) { 157 if (pwmbl->gpio_on != -1) {
157 retval = gpio_request(pwmbl->gpio_on, "gpio_atmel_pwm_bl"); 158 retval = devm_gpio_request(&pdev->dev, pwmbl->gpio_on,
159 "gpio_atmel_pwm_bl");
158 if (retval) { 160 if (retval) {
159 pwmbl->gpio_on = -1; 161 pwmbl->gpio_on = -1;
160 goto err_free_pwm; 162 goto err_free_pwm;
@@ -164,7 +166,7 @@ static int atmel_pwm_bl_probe(struct platform_device *pdev)
164 retval = gpio_direction_output(pwmbl->gpio_on, 166 retval = gpio_direction_output(pwmbl->gpio_on,
165 0 ^ pdata->on_active_low); 167 0 ^ pdata->on_active_low);
166 if (retval) 168 if (retval)
167 goto err_free_gpio; 169 goto err_free_pwm;
168 } 170 }
169 171
170 memset(&props, 0, sizeof(struct backlight_properties)); 172 memset(&props, 0, sizeof(struct backlight_properties));
@@ -174,7 +176,7 @@ static int atmel_pwm_bl_probe(struct platform_device *pdev)
174 &atmel_pwm_bl_ops, &props); 176 &atmel_pwm_bl_ops, &props);
175 if (IS_ERR(bldev)) { 177 if (IS_ERR(bldev)) {
176 retval = PTR_ERR(bldev); 178 retval = PTR_ERR(bldev);
177 goto err_free_gpio; 179 goto err_free_pwm;
178 } 180 }
179 181
180 pwmbl->bldev = bldev; 182 pwmbl->bldev = bldev;
@@ -196,13 +198,9 @@ static int atmel_pwm_bl_probe(struct platform_device *pdev)
196err_free_bl_dev: 198err_free_bl_dev:
197 platform_set_drvdata(pdev, NULL); 199 platform_set_drvdata(pdev, NULL);
198 backlight_device_unregister(bldev); 200 backlight_device_unregister(bldev);
199err_free_gpio:
200 if (pwmbl->gpio_on != -1)
201 gpio_free(pwmbl->gpio_on);
202err_free_pwm: 201err_free_pwm:
203 pwm_channel_free(&pwmbl->pwmc); 202 pwm_channel_free(&pwmbl->pwmc);
204err_free_mem: 203err_free_mem:
205 kfree(pwmbl);
206 return retval; 204 return retval;
207} 205}
208 206
@@ -210,15 +208,12 @@ static int __exit atmel_pwm_bl_remove(struct platform_device *pdev)
210{ 208{
211 struct atmel_pwm_bl *pwmbl = platform_get_drvdata(pdev); 209 struct atmel_pwm_bl *pwmbl = platform_get_drvdata(pdev);
212 210
213 if (pwmbl->gpio_on != -1) { 211 if (pwmbl->gpio_on != -1)
214 gpio_set_value(pwmbl->gpio_on, 0); 212 gpio_set_value(pwmbl->gpio_on, 0);
215 gpio_free(pwmbl->gpio_on);
216 }
217 pwm_channel_disable(&pwmbl->pwmc); 213 pwm_channel_disable(&pwmbl->pwmc);
218 pwm_channel_free(&pwmbl->pwmc); 214 pwm_channel_free(&pwmbl->pwmc);
219 backlight_device_unregister(pwmbl->bldev); 215 backlight_device_unregister(pwmbl->bldev);
220 platform_set_drvdata(pdev, NULL); 216 platform_set_drvdata(pdev, NULL);
221 kfree(pwmbl);
222 217
223 return 0; 218 return 0;
224} 219}
diff --git a/drivers/video/backlight/corgi_lcd.c b/drivers/video/backlight/corgi_lcd.c
index 23d732677ba1..c781768ba892 100644
--- a/drivers/video/backlight/corgi_lcd.c
+++ b/drivers/video/backlight/corgi_lcd.c
@@ -492,7 +492,8 @@ static int setup_gpio_backlight(struct corgi_lcd *lcd,
492 lcd->gpio_backlight_cont = -1; 492 lcd->gpio_backlight_cont = -1;
493 493
494 if (gpio_is_valid(pdata->gpio_backlight_on)) { 494 if (gpio_is_valid(pdata->gpio_backlight_on)) {
495 err = gpio_request(pdata->gpio_backlight_on, "BL_ON"); 495 err = devm_gpio_request(&spi->dev, pdata->gpio_backlight_on,
496 "BL_ON");
496 if (err) { 497 if (err) {
497 dev_err(&spi->dev, "failed to request GPIO%d for " 498 dev_err(&spi->dev, "failed to request GPIO%d for "
498 "backlight_on\n", pdata->gpio_backlight_on); 499 "backlight_on\n", pdata->gpio_backlight_on);
@@ -504,11 +505,12 @@ static int setup_gpio_backlight(struct corgi_lcd *lcd,
504 } 505 }
505 506
506 if (gpio_is_valid(pdata->gpio_backlight_cont)) { 507 if (gpio_is_valid(pdata->gpio_backlight_cont)) {
507 err = gpio_request(pdata->gpio_backlight_cont, "BL_CONT"); 508 err = devm_gpio_request(&spi->dev, pdata->gpio_backlight_cont,
509 "BL_CONT");
508 if (err) { 510 if (err) {
509 dev_err(&spi->dev, "failed to request GPIO%d for " 511 dev_err(&spi->dev, "failed to request GPIO%d for "
510 "backlight_cont\n", pdata->gpio_backlight_cont); 512 "backlight_cont\n", pdata->gpio_backlight_cont);
511 goto err_free_backlight_on; 513 return err;
512 } 514 }
513 515
514 lcd->gpio_backlight_cont = pdata->gpio_backlight_cont; 516 lcd->gpio_backlight_cont = pdata->gpio_backlight_cont;
@@ -525,11 +527,6 @@ static int setup_gpio_backlight(struct corgi_lcd *lcd,
525 } 527 }
526 } 528 }
527 return 0; 529 return 0;
528
529err_free_backlight_on:
530 if (gpio_is_valid(lcd->gpio_backlight_on))
531 gpio_free(lcd->gpio_backlight_on);
532 return err;
533} 530}
534 531
535static int __devinit corgi_lcd_probe(struct spi_device *spi) 532static int __devinit corgi_lcd_probe(struct spi_device *spi)
@@ -602,12 +599,6 @@ static int __devexit corgi_lcd_remove(struct spi_device *spi)
602 backlight_update_status(lcd->bl_dev); 599 backlight_update_status(lcd->bl_dev);
603 backlight_device_unregister(lcd->bl_dev); 600 backlight_device_unregister(lcd->bl_dev);
604 601
605 if (gpio_is_valid(lcd->gpio_backlight_on))
606 gpio_free(lcd->gpio_backlight_on);
607
608 if (gpio_is_valid(lcd->gpio_backlight_cont))
609 gpio_free(lcd->gpio_backlight_cont);
610
611 corgi_lcd_set_power(lcd->lcd_dev, FB_BLANK_POWERDOWN); 602 corgi_lcd_set_power(lcd->lcd_dev, FB_BLANK_POWERDOWN);
612 lcd_device_unregister(lcd->lcd_dev); 603 lcd_device_unregister(lcd->lcd_dev);
613 604
diff --git a/drivers/video/backlight/l4f00242t03.c b/drivers/video/backlight/l4f00242t03.c
index 40f606a86093..2d90c0648aa0 100644
--- a/drivers/video/backlight/l4f00242t03.c
+++ b/drivers/video/backlight/l4f00242t03.c
@@ -175,28 +175,27 @@ static int __devinit l4f00242t03_probe(struct spi_device *spi)
175 175
176 priv->spi = spi; 176 priv->spi = spi;
177 177
178 ret = gpio_request_one(pdata->reset_gpio, GPIOF_OUT_INIT_HIGH, 178 ret = devm_gpio_request_one(&spi->dev, pdata->reset_gpio,
179 "lcd l4f00242t03 reset"); 179 GPIOF_OUT_INIT_HIGH, "lcd l4f00242t03 reset");
180 if (ret) { 180 if (ret) {
181 dev_err(&spi->dev, 181 dev_err(&spi->dev,
182 "Unable to get the lcd l4f00242t03 reset gpio.\n"); 182 "Unable to get the lcd l4f00242t03 reset gpio.\n");
183 return ret; 183 return ret;
184 } 184 }
185 185
186 ret = gpio_request_one(pdata->data_enable_gpio, GPIOF_OUT_INIT_LOW, 186 ret = devm_gpio_request_one(&spi->dev, pdata->data_enable_gpio,
187 "lcd l4f00242t03 data enable"); 187 GPIOF_OUT_INIT_LOW, "lcd l4f00242t03 data enable");
188 if (ret) { 188 if (ret) {
189 dev_err(&spi->dev, 189 dev_err(&spi->dev,
190 "Unable to get the lcd l4f00242t03 data en gpio.\n"); 190 "Unable to get the lcd l4f00242t03 data en gpio.\n");
191 goto err; 191 return ret;
192 } 192 }
193 193
194 priv->io_reg = regulator_get(&spi->dev, "vdd"); 194 priv->io_reg = regulator_get(&spi->dev, "vdd");
195 if (IS_ERR(priv->io_reg)) { 195 if (IS_ERR(priv->io_reg)) {
196 ret = PTR_ERR(priv->io_reg);
197 dev_err(&spi->dev, "%s: Unable to get the IO regulator\n", 196 dev_err(&spi->dev, "%s: Unable to get the IO regulator\n",
198 __func__); 197 __func__);
199 goto err2; 198 return PTR_ERR(priv->io_reg);
200 } 199 }
201 200
202 priv->core_reg = regulator_get(&spi->dev, "vcore"); 201 priv->core_reg = regulator_get(&spi->dev, "vcore");
@@ -204,14 +203,14 @@ static int __devinit l4f00242t03_probe(struct spi_device *spi)
204 ret = PTR_ERR(priv->core_reg); 203 ret = PTR_ERR(priv->core_reg);
205 dev_err(&spi->dev, "%s: Unable to get the core regulator\n", 204 dev_err(&spi->dev, "%s: Unable to get the core regulator\n",
206 __func__); 205 __func__);
207 goto err3; 206 goto err1;
208 } 207 }
209 208
210 priv->ld = lcd_device_register("l4f00242t03", 209 priv->ld = lcd_device_register("l4f00242t03",
211 &spi->dev, priv, &l4f_ops); 210 &spi->dev, priv, &l4f_ops);
212 if (IS_ERR(priv->ld)) { 211 if (IS_ERR(priv->ld)) {
213 ret = PTR_ERR(priv->ld); 212 ret = PTR_ERR(priv->ld);
214 goto err4; 213 goto err2;
215 } 214 }
216 215
217 /* Init the LCD */ 216 /* Init the LCD */
@@ -223,14 +222,10 @@ static int __devinit l4f00242t03_probe(struct spi_device *spi)
223 222
224 return 0; 223 return 0;
225 224
226err4: 225err2:
227 regulator_put(priv->core_reg); 226 regulator_put(priv->core_reg);
228err3: 227err1:
229 regulator_put(priv->io_reg); 228 regulator_put(priv->io_reg);
230err2:
231 gpio_free(pdata->data_enable_gpio);
232err:
233 gpio_free(pdata->reset_gpio);
234 229
235 return ret; 230 return ret;
236} 231}
@@ -238,16 +233,12 @@ err:
238static int __devexit l4f00242t03_remove(struct spi_device *spi) 233static int __devexit l4f00242t03_remove(struct spi_device *spi)
239{ 234{
240 struct l4f00242t03_priv *priv = dev_get_drvdata(&spi->dev); 235 struct l4f00242t03_priv *priv = dev_get_drvdata(&spi->dev);
241 struct l4f00242t03_pdata *pdata = priv->spi->dev.platform_data;
242 236
243 l4f00242t03_lcd_power_set(priv->ld, FB_BLANK_POWERDOWN); 237 l4f00242t03_lcd_power_set(priv->ld, FB_BLANK_POWERDOWN);
244 lcd_device_unregister(priv->ld); 238 lcd_device_unregister(priv->ld);
245 239
246 dev_set_drvdata(&spi->dev, NULL); 240 dev_set_drvdata(&spi->dev, NULL);
247 241
248 gpio_free(pdata->data_enable_gpio);
249 gpio_free(pdata->reset_gpio);
250
251 regulator_put(priv->io_reg); 242 regulator_put(priv->io_reg);
252 regulator_put(priv->core_reg); 243 regulator_put(priv->core_reg);
253 244
diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/lm3533_bl.c
index bebeb63607db..18dca0c29c68 100644
--- a/drivers/video/backlight/lm3533_bl.c
+++ b/drivers/video/backlight/lm3533_bl.c
@@ -295,7 +295,7 @@ static int __devinit lm3533_bl_probe(struct platform_device *pdev)
295 return -EINVAL; 295 return -EINVAL;
296 } 296 }
297 297
298 bl = kzalloc(sizeof(*bl), GFP_KERNEL); 298 bl = devm_kzalloc(&pdev->dev, sizeof(*bl), GFP_KERNEL);
299 if (!bl) { 299 if (!bl) {
300 dev_err(&pdev->dev, 300 dev_err(&pdev->dev,
301 "failed to allocate memory for backlight\n"); 301 "failed to allocate memory for backlight\n");
@@ -317,8 +317,7 @@ static int __devinit lm3533_bl_probe(struct platform_device *pdev)
317 &lm3533_bl_ops, &props); 317 &lm3533_bl_ops, &props);
318 if (IS_ERR(bd)) { 318 if (IS_ERR(bd)) {
319 dev_err(&pdev->dev, "failed to register backlight device\n"); 319 dev_err(&pdev->dev, "failed to register backlight device\n");
320 ret = PTR_ERR(bd); 320 return PTR_ERR(bd);
321 goto err_free;
322 } 321 }
323 322
324 bl->bd = bd; 323 bl->bd = bd;
@@ -348,8 +347,6 @@ err_sysfs_remove:
348 sysfs_remove_group(&bd->dev.kobj, &lm3533_bl_attribute_group); 347 sysfs_remove_group(&bd->dev.kobj, &lm3533_bl_attribute_group);
349err_unregister: 348err_unregister:
350 backlight_device_unregister(bd); 349 backlight_device_unregister(bd);
351err_free:
352 kfree(bl);
353 350
354 return ret; 351 return ret;
355} 352}
@@ -367,7 +364,6 @@ static int __devexit lm3533_bl_remove(struct platform_device *pdev)
367 lm3533_ctrlbank_disable(&bl->cb); 364 lm3533_ctrlbank_disable(&bl->cb);
368 sysfs_remove_group(&bd->dev.kobj, &lm3533_bl_attribute_group); 365 sysfs_remove_group(&bd->dev.kobj, &lm3533_bl_attribute_group);
369 backlight_device_unregister(bd); 366 backlight_device_unregister(bd);
370 kfree(bl);
371 367
372 return 0; 368 return 0;
373} 369}
diff --git a/drivers/video/backlight/lms283gf05.c b/drivers/video/backlight/lms283gf05.c
index a9f2c36966f1..ea43f2254196 100644
--- a/drivers/video/backlight/lms283gf05.c
+++ b/drivers/video/backlight/lms283gf05.c
@@ -158,29 +158,27 @@ static int __devinit lms283gf05_probe(struct spi_device *spi)
158 int ret = 0; 158 int ret = 0;
159 159
160 if (pdata != NULL) { 160 if (pdata != NULL) {
161 ret = gpio_request(pdata->reset_gpio, "LMS285GF05 RESET"); 161 ret = devm_gpio_request(&spi->dev, pdata->reset_gpio,
162 "LMS285GF05 RESET");
162 if (ret) 163 if (ret)
163 return ret; 164 return ret;
164 165
165 ret = gpio_direction_output(pdata->reset_gpio, 166 ret = gpio_direction_output(pdata->reset_gpio,
166 !pdata->reset_inverted); 167 !pdata->reset_inverted);
167 if (ret) 168 if (ret)
168 goto err; 169 return ret;
169 } 170 }
170 171
171 st = devm_kzalloc(&spi->dev, sizeof(struct lms283gf05_state), 172 st = devm_kzalloc(&spi->dev, sizeof(struct lms283gf05_state),
172 GFP_KERNEL); 173 GFP_KERNEL);
173 if (st == NULL) { 174 if (st == NULL) {
174 dev_err(&spi->dev, "No memory for device state\n"); 175 dev_err(&spi->dev, "No memory for device state\n");
175 ret = -ENOMEM; 176 return -ENOMEM;
176 goto err;
177 } 177 }
178 178
179 ld = lcd_device_register("lms283gf05", &spi->dev, st, &lms_ops); 179 ld = lcd_device_register("lms283gf05", &spi->dev, st, &lms_ops);
180 if (IS_ERR(ld)) { 180 if (IS_ERR(ld))
181 ret = PTR_ERR(ld); 181 return PTR_ERR(ld);
182 goto err;
183 }
184 182
185 st->spi = spi; 183 st->spi = spi;
186 st->ld = ld; 184 st->ld = ld;
@@ -193,24 +191,14 @@ static int __devinit lms283gf05_probe(struct spi_device *spi)
193 lms283gf05_toggle(spi, disp_initseq, ARRAY_SIZE(disp_initseq)); 191 lms283gf05_toggle(spi, disp_initseq, ARRAY_SIZE(disp_initseq));
194 192
195 return 0; 193 return 0;
196
197err:
198 if (pdata != NULL)
199 gpio_free(pdata->reset_gpio);
200
201 return ret;
202} 194}
203 195
204static int __devexit lms283gf05_remove(struct spi_device *spi) 196static int __devexit lms283gf05_remove(struct spi_device *spi)
205{ 197{
206 struct lms283gf05_state *st = dev_get_drvdata(&spi->dev); 198 struct lms283gf05_state *st = dev_get_drvdata(&spi->dev);
207 struct lms283gf05_pdata *pdata = st->spi->dev.platform_data;
208 199
209 lcd_device_unregister(st->ld); 200 lcd_device_unregister(st->ld);
210 201
211 if (pdata != NULL)
212 gpio_free(pdata->reset_gpio);
213
214 return 0; 202 return 0;
215} 203}
216 204
diff --git a/drivers/video/backlight/lp855x_bl.c b/drivers/video/backlight/lp855x_bl.c
index 72a0e0c917cf..aa6d4f71131f 100644
--- a/drivers/video/backlight/lp855x_bl.c
+++ b/drivers/video/backlight/lp855x_bl.c
@@ -14,11 +14,15 @@
14#include <linux/i2c.h> 14#include <linux/i2c.h>
15#include <linux/backlight.h> 15#include <linux/backlight.h>
16#include <linux/err.h> 16#include <linux/err.h>
17#include <linux/lp855x.h> 17#include <linux/platform_data/lp855x.h>
18 18
19/* Registers */ 19/* Registers */
20#define BRIGHTNESS_CTRL (0x00) 20#define BRIGHTNESS_CTRL 0x00
21#define DEVICE_CTRL (0x01) 21#define DEVICE_CTRL 0x01
22#define EEPROM_START 0xA0
23#define EEPROM_END 0xA7
24#define EPROM_START 0xA0
25#define EPROM_END 0xAF
22 26
23#define BUF_SIZE 20 27#define BUF_SIZE 20
24#define DEFAULT_BL_NAME "lcd-backlight" 28#define DEFAULT_BL_NAME "lcd-backlight"
diff --git a/drivers/video/backlight/ot200_bl.c b/drivers/video/backlight/ot200_bl.c
index f519d55a294c..469cf0f109d2 100644
--- a/drivers/video/backlight/ot200_bl.c
+++ b/drivers/video/backlight/ot200_bl.c
@@ -84,7 +84,8 @@ static int ot200_backlight_probe(struct platform_device *pdev)
84 int retval = 0; 84 int retval = 0;
85 85
86 /* request gpio */ 86 /* request gpio */
87 if (gpio_request(GPIO_DIMM, "ot200 backlight dimmer") < 0) { 87 if (devm_gpio_request(&pdev->dev, GPIO_DIMM,
88 "ot200 backlight dimmer") < 0) {
88 dev_err(&pdev->dev, "failed to request GPIO %d\n", GPIO_DIMM); 89 dev_err(&pdev->dev, "failed to request GPIO %d\n", GPIO_DIMM);
89 return -ENODEV; 90 return -ENODEV;
90 } 91 }
@@ -93,14 +94,13 @@ static int ot200_backlight_probe(struct platform_device *pdev)
93 pwm_timer = cs5535_mfgpt_alloc_timer(7, MFGPT_DOMAIN_ANY); 94 pwm_timer = cs5535_mfgpt_alloc_timer(7, MFGPT_DOMAIN_ANY);
94 if (!pwm_timer) { 95 if (!pwm_timer) {
95 dev_err(&pdev->dev, "MFGPT 7 not available\n"); 96 dev_err(&pdev->dev, "MFGPT 7 not available\n");
96 retval = -ENODEV; 97 return -ENODEV;
97 goto error_mfgpt_alloc;
98 } 98 }
99 99
100 data = kzalloc(sizeof(*data), GFP_KERNEL); 100 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
101 if (!data) { 101 if (!data) {
102 retval = -ENOMEM; 102 retval = -ENOMEM;
103 goto error_kzalloc; 103 goto error_devm_kzalloc;
104 } 104 }
105 105
106 /* setup gpio */ 106 /* setup gpio */
@@ -122,26 +122,21 @@ static int ot200_backlight_probe(struct platform_device *pdev)
122 if (IS_ERR(bl)) { 122 if (IS_ERR(bl)) {
123 dev_err(&pdev->dev, "failed to register backlight\n"); 123 dev_err(&pdev->dev, "failed to register backlight\n");
124 retval = PTR_ERR(bl); 124 retval = PTR_ERR(bl);
125 goto error_backlight_device_register; 125 goto error_devm_kzalloc;
126 } 126 }
127 127
128 platform_set_drvdata(pdev, bl); 128 platform_set_drvdata(pdev, bl);
129 129
130 return 0; 130 return 0;
131 131
132error_backlight_device_register: 132error_devm_kzalloc:
133 kfree(data);
134error_kzalloc:
135 cs5535_mfgpt_free_timer(pwm_timer); 133 cs5535_mfgpt_free_timer(pwm_timer);
136error_mfgpt_alloc:
137 gpio_free(GPIO_DIMM);
138 return retval; 134 return retval;
139} 135}
140 136
141static int ot200_backlight_remove(struct platform_device *pdev) 137static int ot200_backlight_remove(struct platform_device *pdev)
142{ 138{
143 struct backlight_device *bl = platform_get_drvdata(pdev); 139 struct backlight_device *bl = platform_get_drvdata(pdev);
144 struct ot200_backlight_data *data = bl_get_data(bl);
145 140
146 backlight_device_unregister(bl); 141 backlight_device_unregister(bl);
147 142
@@ -152,9 +147,7 @@ static int ot200_backlight_remove(struct platform_device *pdev)
152 MAX_COMP2 - dim_table[100]); 147 MAX_COMP2 - dim_table[100]);
153 148
154 cs5535_mfgpt_free_timer(pwm_timer); 149 cs5535_mfgpt_free_timer(pwm_timer);
155 gpio_free(GPIO_DIMM);
156 150
157 kfree(data);
158 return 0; 151 return 0;
159} 152}
160 153
diff --git a/drivers/video/backlight/tosa_bl.c b/drivers/video/backlight/tosa_bl.c
index 0d54e607e82d..49342e1d20be 100644
--- a/drivers/video/backlight/tosa_bl.c
+++ b/drivers/video/backlight/tosa_bl.c
@@ -92,14 +92,14 @@ static int __devinit tosa_bl_probe(struct i2c_client *client,
92 92
93 data->comadj = sharpsl_param.comadj == -1 ? COMADJ_DEFAULT : sharpsl_param.comadj; 93 data->comadj = sharpsl_param.comadj == -1 ? COMADJ_DEFAULT : sharpsl_param.comadj;
94 94
95 ret = gpio_request(TOSA_GPIO_BL_C20MA, "backlight"); 95 ret = devm_gpio_request(&client->dev, TOSA_GPIO_BL_C20MA, "backlight");
96 if (ret) { 96 if (ret) {
97 dev_dbg(&data->bl->dev, "Unable to request gpio!\n"); 97 dev_dbg(&data->bl->dev, "Unable to request gpio!\n");
98 return ret; 98 return ret;
99 } 99 }
100 ret = gpio_direction_output(TOSA_GPIO_BL_C20MA, 0); 100 ret = gpio_direction_output(TOSA_GPIO_BL_C20MA, 0);
101 if (ret) 101 if (ret)
102 goto err_gpio_dir; 102 return ret;
103 103
104 i2c_set_clientdata(client, data); 104 i2c_set_clientdata(client, data);
105 data->i2c = client; 105 data->i2c = client;
@@ -123,8 +123,6 @@ static int __devinit tosa_bl_probe(struct i2c_client *client,
123 123
124err_reg: 124err_reg:
125 data->bl = NULL; 125 data->bl = NULL;
126err_gpio_dir:
127 gpio_free(TOSA_GPIO_BL_C20MA);
128 return ret; 126 return ret;
129} 127}
130 128
@@ -135,8 +133,6 @@ static int __devexit tosa_bl_remove(struct i2c_client *client)
135 backlight_device_unregister(data->bl); 133 backlight_device_unregister(data->bl);
136 data->bl = NULL; 134 data->bl = NULL;
137 135
138 gpio_free(TOSA_GPIO_BL_C20MA);
139
140 return 0; 136 return 0;
141} 137}
142 138
diff --git a/drivers/video/backlight/tosa_lcd.c b/drivers/video/backlight/tosa_lcd.c
index 47823b8efff0..33047a66cc24 100644
--- a/drivers/video/backlight/tosa_lcd.c
+++ b/drivers/video/backlight/tosa_lcd.c
@@ -193,7 +193,7 @@ static int __devinit tosa_lcd_probe(struct spi_device *spi)
193 data->spi = spi; 193 data->spi = spi;
194 dev_set_drvdata(&spi->dev, data); 194 dev_set_drvdata(&spi->dev, data);
195 195
196 ret = gpio_request(TOSA_GPIO_TG_ON, "tg #pwr"); 196 ret = devm_gpio_request(&spi->dev, TOSA_GPIO_TG_ON, "tg #pwr");
197 if (ret < 0) 197 if (ret < 0)
198 goto err_gpio_tg; 198 goto err_gpio_tg;
199 199
@@ -201,7 +201,7 @@ static int __devinit tosa_lcd_probe(struct spi_device *spi)
201 201
202 ret = gpio_direction_output(TOSA_GPIO_TG_ON, 0); 202 ret = gpio_direction_output(TOSA_GPIO_TG_ON, 0);
203 if (ret < 0) 203 if (ret < 0)
204 goto err_gpio_dir; 204 goto err_gpio_tg;
205 205
206 mdelay(60); 206 mdelay(60);
207 tosa_lcd_tg_init(data); 207 tosa_lcd_tg_init(data);
@@ -221,8 +221,6 @@ static int __devinit tosa_lcd_probe(struct spi_device *spi)
221 221
222err_register: 222err_register:
223 tosa_lcd_tg_off(data); 223 tosa_lcd_tg_off(data);
224err_gpio_dir:
225 gpio_free(TOSA_GPIO_TG_ON);
226err_gpio_tg: 224err_gpio_tg:
227 dev_set_drvdata(&spi->dev, NULL); 225 dev_set_drvdata(&spi->dev, NULL);
228 return ret; 226 return ret;
@@ -239,7 +237,6 @@ static int __devexit tosa_lcd_remove(struct spi_device *spi)
239 237
240 tosa_lcd_tg_off(data); 238 tosa_lcd_tg_off(data);
241 239
242 gpio_free(TOSA_GPIO_TG_ON);
243 dev_set_drvdata(&spi->dev, NULL); 240 dev_set_drvdata(&spi->dev, NULL);
244 241
245 return 0; 242 return 0;
diff --git a/fs/affs/bitmap.c b/fs/affs/bitmap.c
index 6e0be43ef6ef..a32246b8359e 100644
--- a/fs/affs/bitmap.c
+++ b/fs/affs/bitmap.c
@@ -10,30 +10,6 @@
10#include <linux/slab.h> 10#include <linux/slab.h>
11#include "affs.h" 11#include "affs.h"
12 12
13/* This is, of course, shamelessly stolen from fs/minix */
14
15static const int nibblemap[] = { 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4 };
16
17static u32
18affs_count_free_bits(u32 blocksize, const void *data)
19{
20 const u32 *map;
21 u32 free;
22 u32 tmp;
23
24 map = data;
25 free = 0;
26 for (blocksize /= 4; blocksize > 0; blocksize--) {
27 tmp = *map++;
28 while (tmp) {
29 free += nibblemap[tmp & 0xf];
30 tmp >>= 4;
31 }
32 }
33
34 return free;
35}
36
37u32 13u32
38affs_count_free_blocks(struct super_block *sb) 14affs_count_free_blocks(struct super_block *sb)
39{ 15{
@@ -317,7 +293,7 @@ int affs_init_bitmap(struct super_block *sb, int *flags)
317 goto out; 293 goto out;
318 } 294 }
319 pr_debug("AFFS: read bitmap block %d: %d\n", blk, bm->bm_key); 295 pr_debug("AFFS: read bitmap block %d: %d\n", blk, bm->bm_key);
320 bm->bm_free = affs_count_free_bits(sb->s_blocksize - 4, bh->b_data + 4); 296 bm->bm_free = memweight(bh->b_data + 4, sb->s_blocksize - 4);
321 297
322 /* Don't try read the extension if this is the last block, 298 /* Don't try read the extension if this is the last block,
323 * but we also need the right bm pointer below 299 * but we also need the right bm pointer below
@@ -367,7 +343,7 @@ int affs_init_bitmap(struct super_block *sb, int *flags)
367 343
368 /* recalculate bitmap count for last block */ 344 /* recalculate bitmap count for last block */
369 bm--; 345 bm--;
370 bm->bm_free = affs_count_free_bits(sb->s_blocksize - 4, bh->b_data + 4); 346 bm->bm_free = memweight(bh->b_data + 4, sb->s_blocksize - 4);
371 347
372out: 348out:
373 affs_brelse(bh); 349 affs_brelse(bh);
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index adb1cd7ceb9b..4bab807227ad 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -3342,10 +3342,22 @@ ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size);
3342/* super.c */ 3342/* super.c */
3343int btrfs_parse_options(struct btrfs_root *root, char *options); 3343int btrfs_parse_options(struct btrfs_root *root, char *options);
3344int btrfs_sync_fs(struct super_block *sb, int wait); 3344int btrfs_sync_fs(struct super_block *sb, int wait);
3345
3346#ifdef CONFIG_PRINTK
3347__printf(2, 3)
3345void btrfs_printk(struct btrfs_fs_info *fs_info, const char *fmt, ...); 3348void btrfs_printk(struct btrfs_fs_info *fs_info, const char *fmt, ...);
3349#else
3350static inline __printf(2, 3)
3351void btrfs_printk(struct btrfs_fs_info *fs_info, const char *fmt, ...)
3352{
3353}
3354#endif
3355
3356__printf(5, 6)
3346void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function, 3357void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function,
3347 unsigned int line, int errno, const char *fmt, ...); 3358 unsigned int line, int errno, const char *fmt, ...);
3348 3359
3360
3349void __btrfs_abort_transaction(struct btrfs_trans_handle *trans, 3361void __btrfs_abort_transaction(struct btrfs_trans_handle *trans,
3350 struct btrfs_root *root, const char *function, 3362 struct btrfs_root *root, const char *function,
3351 unsigned int line, int errno); 3363 unsigned int line, int errno);
@@ -3386,6 +3398,7 @@ do { \
3386 (errno), fmt, ##args); \ 3398 (errno), fmt, ##args); \
3387} while (0) 3399} while (0)
3388 3400
3401__printf(5, 6)
3389void __btrfs_panic(struct btrfs_fs_info *fs_info, const char *function, 3402void __btrfs_panic(struct btrfs_fs_info *fs_info, const char *function,
3390 unsigned int line, int errno, const char *fmt, ...); 3403 unsigned int line, int errno, const char *fmt, ...);
3391 3404
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 502b20c56e84..fadeba6a5db9 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -1114,7 +1114,7 @@ void clean_tree_block(struct btrfs_trans_handle *trans, struct btrfs_root *root,
1114 spin_unlock(&root->fs_info->delalloc_lock); 1114 spin_unlock(&root->fs_info->delalloc_lock);
1115 btrfs_panic(root->fs_info, -EOVERFLOW, 1115 btrfs_panic(root->fs_info, -EOVERFLOW,
1116 "Can't clear %lu bytes from " 1116 "Can't clear %lu bytes from "
1117 " dirty_mdatadata_bytes (%lu)", 1117 " dirty_mdatadata_bytes (%llu)",
1118 buf->len, 1118 buf->len,
1119 root->fs_info->dirty_metadata_bytes); 1119 root->fs_info->dirty_metadata_bytes);
1120 } 1120 }
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
index c5dbd9149679..4da08652004d 100644
--- a/fs/btrfs/relocation.c
+++ b/fs/btrfs/relocation.c
@@ -1241,7 +1241,7 @@ static int __must_check __add_reloc_root(struct btrfs_root *root)
1241 if (rb_node) { 1241 if (rb_node) {
1242 btrfs_panic(root->fs_info, -EEXIST, "Duplicate root found " 1242 btrfs_panic(root->fs_info, -EEXIST, "Duplicate root found "
1243 "for start=%llu while inserting into relocation " 1243 "for start=%llu while inserting into relocation "
1244 "tree\n"); 1244 "tree\n", node->bytenr);
1245 kfree(node); 1245 kfree(node);
1246 return -EEXIST; 1246 return -EEXIST;
1247 } 1247 }
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index fa61ef59cd61..8c6e61d6eed5 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -125,6 +125,7 @@ static void btrfs_handle_error(struct btrfs_fs_info *fs_info)
125 } 125 }
126} 126}
127 127
128#ifdef CONFIG_PRINTK
128/* 129/*
129 * __btrfs_std_error decodes expected errors from the caller and 130 * __btrfs_std_error decodes expected errors from the caller and
130 * invokes the approciate error response. 131 * invokes the approciate error response.
@@ -167,7 +168,7 @@ void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function,
167 va_end(args); 168 va_end(args);
168} 169}
169 170
170const char *logtypes[] = { 171static const char * const logtypes[] = {
171 "emergency", 172 "emergency",
172 "alert", 173 "alert",
173 "critical", 174 "critical",
@@ -185,22 +186,50 @@ void btrfs_printk(struct btrfs_fs_info *fs_info, const char *fmt, ...)
185 struct va_format vaf; 186 struct va_format vaf;
186 va_list args; 187 va_list args;
187 const char *type = logtypes[4]; 188 const char *type = logtypes[4];
189 int kern_level;
188 190
189 va_start(args, fmt); 191 va_start(args, fmt);
190 192
191 if (fmt[0] == '<' && isdigit(fmt[1]) && fmt[2] == '>') { 193 kern_level = printk_get_level(fmt);
192 memcpy(lvl, fmt, 3); 194 if (kern_level) {
193 lvl[3] = '\0'; 195 size_t size = printk_skip_level(fmt) - fmt;
194 fmt += 3; 196 memcpy(lvl, fmt, size);
195 type = logtypes[fmt[1] - '0']; 197 lvl[size] = '\0';
198 fmt += size;
199 type = logtypes[kern_level - '0'];
196 } else 200 } else
197 *lvl = '\0'; 201 *lvl = '\0';
198 202
199 vaf.fmt = fmt; 203 vaf.fmt = fmt;
200 vaf.va = &args; 204 vaf.va = &args;
205
201 printk("%sBTRFS %s (device %s): %pV", lvl, type, sb->s_id, &vaf); 206 printk("%sBTRFS %s (device %s): %pV", lvl, type, sb->s_id, &vaf);
207
208 va_end(args);
202} 209}
203 210
211#else
212
213void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function,
214 unsigned int line, int errno, const char *fmt, ...)
215{
216 struct super_block *sb = fs_info->sb;
217
218 /*
219 * Special case: if the error is EROFS, and we're already
220 * under MS_RDONLY, then it is safe here.
221 */
222 if (errno == -EROFS && (sb->s_flags & MS_RDONLY))
223 return;
224
225 /* Don't go through full error handling during mount */
226 if (sb->s_flags & MS_BORN) {
227 save_error_info(fs_info);
228 btrfs_handle_error(fs_info);
229 }
230}
231#endif
232
204/* 233/*
205 * We only mark the transaction aborted and then set the file system read-only. 234 * We only mark the transaction aborted and then set the file system read-only.
206 * This will prevent new transactions from starting or trying to join this 235 * This will prevent new transactions from starting or trying to join this
diff --git a/fs/cachefiles/rdwr.c b/fs/cachefiles/rdwr.c
index c0353dfac51f..c994691d9445 100644
--- a/fs/cachefiles/rdwr.c
+++ b/fs/cachefiles/rdwr.c
@@ -919,7 +919,7 @@ int cachefiles_write_page(struct fscache_storage *op, struct page *page)
919 * own time */ 919 * own time */
920 path.mnt = cache->mnt; 920 path.mnt = cache->mnt;
921 path.dentry = object->backer; 921 path.dentry = object->backer;
922 file = dentry_open(&path, O_RDWR, cache->cache_cred); 922 file = dentry_open(&path, O_RDWR | O_LARGEFILE, cache->cache_cred);
923 if (IS_ERR(file)) { 923 if (IS_ERR(file)) {
924 ret = PTR_ERR(file); 924 ret = PTR_ERR(file);
925 } else { 925 } else {
diff --git a/fs/exec.c b/fs/exec.c
index e95aeeddd25c..3684353ebd5f 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -2002,17 +2002,17 @@ static void coredump_finish(struct mm_struct *mm)
2002void set_dumpable(struct mm_struct *mm, int value) 2002void set_dumpable(struct mm_struct *mm, int value)
2003{ 2003{
2004 switch (value) { 2004 switch (value) {
2005 case 0: 2005 case SUID_DUMPABLE_DISABLED:
2006 clear_bit(MMF_DUMPABLE, &mm->flags); 2006 clear_bit(MMF_DUMPABLE, &mm->flags);
2007 smp_wmb(); 2007 smp_wmb();
2008 clear_bit(MMF_DUMP_SECURELY, &mm->flags); 2008 clear_bit(MMF_DUMP_SECURELY, &mm->flags);
2009 break; 2009 break;
2010 case 1: 2010 case SUID_DUMPABLE_ENABLED:
2011 set_bit(MMF_DUMPABLE, &mm->flags); 2011 set_bit(MMF_DUMPABLE, &mm->flags);
2012 smp_wmb(); 2012 smp_wmb();
2013 clear_bit(MMF_DUMP_SECURELY, &mm->flags); 2013 clear_bit(MMF_DUMP_SECURELY, &mm->flags);
2014 break; 2014 break;
2015 case 2: 2015 case SUID_DUMPABLE_SAFE:
2016 set_bit(MMF_DUMP_SECURELY, &mm->flags); 2016 set_bit(MMF_DUMP_SECURELY, &mm->flags);
2017 smp_wmb(); 2017 smp_wmb();
2018 set_bit(MMF_DUMPABLE, &mm->flags); 2018 set_bit(MMF_DUMPABLE, &mm->flags);
@@ -2025,7 +2025,7 @@ static int __get_dumpable(unsigned long mm_flags)
2025 int ret; 2025 int ret;
2026 2026
2027 ret = mm_flags & MMF_DUMPABLE_MASK; 2027 ret = mm_flags & MMF_DUMPABLE_MASK;
2028 return (ret >= 2) ? 2 : ret; 2028 return (ret > SUID_DUMPABLE_ENABLED) ? SUID_DUMPABLE_SAFE : ret;
2029} 2029}
2030 2030
2031int get_dumpable(struct mm_struct *mm) 2031int get_dumpable(struct mm_struct *mm)
@@ -2111,6 +2111,7 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
2111 int retval = 0; 2111 int retval = 0;
2112 int flag = 0; 2112 int flag = 0;
2113 int ispipe; 2113 int ispipe;
2114 bool need_nonrelative = false;
2114 static atomic_t core_dump_count = ATOMIC_INIT(0); 2115 static atomic_t core_dump_count = ATOMIC_INIT(0);
2115 struct coredump_params cprm = { 2116 struct coredump_params cprm = {
2116 .signr = signr, 2117 .signr = signr,
@@ -2136,14 +2137,16 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
2136 if (!cred) 2137 if (!cred)
2137 goto fail; 2138 goto fail;
2138 /* 2139 /*
2139 * We cannot trust fsuid as being the "true" uid of the 2140 * We cannot trust fsuid as being the "true" uid of the process
2140 * process nor do we know its entire history. We only know it 2141 * nor do we know its entire history. We only know it was tainted
2141 * was tainted so we dump it as root in mode 2. 2142 * so we dump it as root in mode 2, and only into a controlled
2143 * environment (pipe handler or fully qualified path).
2142 */ 2144 */
2143 if (__get_dumpable(cprm.mm_flags) == 2) { 2145 if (__get_dumpable(cprm.mm_flags) == SUID_DUMPABLE_SAFE) {
2144 /* Setuid core dump mode */ 2146 /* Setuid core dump mode */
2145 flag = O_EXCL; /* Stop rewrite attacks */ 2147 flag = O_EXCL; /* Stop rewrite attacks */
2146 cred->fsuid = GLOBAL_ROOT_UID; /* Dump root private */ 2148 cred->fsuid = GLOBAL_ROOT_UID; /* Dump root private */
2149 need_nonrelative = true;
2147 } 2150 }
2148 2151
2149 retval = coredump_wait(exit_code, &core_state); 2152 retval = coredump_wait(exit_code, &core_state);
@@ -2171,15 +2174,16 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
2171 } 2174 }
2172 2175
2173 if (cprm.limit == 1) { 2176 if (cprm.limit == 1) {
2174 /* 2177 /* See umh_pipe_setup() which sets RLIMIT_CORE = 1.
2178 *
2175 * Normally core limits are irrelevant to pipes, since 2179 * Normally core limits are irrelevant to pipes, since
2176 * we're not writing to the file system, but we use 2180 * we're not writing to the file system, but we use
2177 * cprm.limit of 1 here as a speacial value. Any 2181 * cprm.limit of 1 here as a speacial value, this is a
2178 * non-1 limit gets set to RLIM_INFINITY below, but 2182 * consistent way to catch recursive crashes.
2179 * a limit of 0 skips the dump. This is a consistent 2183 * We can still crash if the core_pattern binary sets
2180 * way to catch recursive crashes. We can still crash 2184 * RLIM_CORE = !1, but it runs as root, and can do
2181 * if the core_pattern binary sets RLIM_CORE = !1 2185 * lots of stupid things.
2182 * but it runs as root, and can do lots of stupid things 2186 *
2183 * Note that we use task_tgid_vnr here to grab the pid 2187 * Note that we use task_tgid_vnr here to grab the pid
2184 * of the process group leader. That way we get the 2188 * of the process group leader. That way we get the
2185 * right pid if a thread in a multi-threaded 2189 * right pid if a thread in a multi-threaded
@@ -2223,6 +2227,14 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
2223 if (cprm.limit < binfmt->min_coredump) 2227 if (cprm.limit < binfmt->min_coredump)
2224 goto fail_unlock; 2228 goto fail_unlock;
2225 2229
2230 if (need_nonrelative && cn.corename[0] != '/') {
2231 printk(KERN_WARNING "Pid %d(%s) can only dump core "\
2232 "to fully qualified path!\n",
2233 task_tgid_vnr(current), current->comm);
2234 printk(KERN_WARNING "Skipping core dump\n");
2235 goto fail_unlock;
2236 }
2237
2226 cprm.file = filp_open(cn.corename, 2238 cprm.file = filp_open(cn.corename,
2227 O_CREAT | 2 | O_NOFOLLOW | O_LARGEFILE | flag, 2239 O_CREAT | 2 | O_NOFOLLOW | O_LARGEFILE | flag,
2228 0600); 2240 0600);
diff --git a/fs/ext2/balloc.c b/fs/ext2/balloc.c
index 1c3613998862..376aa77f3ca7 100644
--- a/fs/ext2/balloc.c
+++ b/fs/ext2/balloc.c
@@ -1444,19 +1444,9 @@ ext2_fsblk_t ext2_new_block(struct inode *inode, unsigned long goal, int *errp)
1444 1444
1445#ifdef EXT2FS_DEBUG 1445#ifdef EXT2FS_DEBUG
1446 1446
1447static const int nibblemap[] = {4, 3, 3, 2, 3, 2, 2, 1, 3, 2, 2, 1, 2, 1, 1, 0}; 1447unsigned long ext2_count_free(struct buffer_head *map, unsigned int numchars)
1448
1449unsigned long ext2_count_free (struct buffer_head * map, unsigned int numchars)
1450{ 1448{
1451 unsigned int i; 1449 return numchars * BITS_PER_BYTE - memweight(map->b_data, numchars);
1452 unsigned long sum = 0;
1453
1454 if (!map)
1455 return (0);
1456 for (i = 0; i < numchars; i++)
1457 sum += nibblemap[map->b_data[i] & 0xf] +
1458 nibblemap[(map->b_data[i] >> 4) & 0xf];
1459 return (sum);
1460} 1450}
1461 1451
1462#endif /* EXT2FS_DEBUG */ 1452#endif /* EXT2FS_DEBUG */
diff --git a/fs/ext2/ialloc.c b/fs/ext2/ialloc.c
index c13eb7b91a11..8f370e012e61 100644
--- a/fs/ext2/ialloc.c
+++ b/fs/ext2/ialloc.c
@@ -644,6 +644,7 @@ unsigned long ext2_count_free_inodes (struct super_block * sb)
644 } 644 }
645 brelse(bitmap_bh); 645 brelse(bitmap_bh);
646 printk("ext2_count_free_inodes: stored = %lu, computed = %lu, %lu\n", 646 printk("ext2_count_free_inodes: stored = %lu, computed = %lu, %lu\n",
647 (unsigned long)
647 percpu_counter_read(&EXT2_SB(sb)->s_freeinodes_counter), 648 percpu_counter_read(&EXT2_SB(sb)->s_freeinodes_counter),
648 desc_count, bitmap_count); 649 desc_count, bitmap_count);
649 return desc_count; 650 return desc_count;
diff --git a/fs/ext3/balloc.c b/fs/ext3/balloc.c
index 25cd60892116..90d901f0486b 100644
--- a/fs/ext3/balloc.c
+++ b/fs/ext3/balloc.c
@@ -1813,7 +1813,7 @@ ext3_fsblk_t ext3_count_free_blocks(struct super_block *sb)
1813 brelse(bitmap_bh); 1813 brelse(bitmap_bh);
1814 printk("ext3_count_free_blocks: stored = "E3FSBLK 1814 printk("ext3_count_free_blocks: stored = "E3FSBLK
1815 ", computed = "E3FSBLK", "E3FSBLK"\n", 1815 ", computed = "E3FSBLK", "E3FSBLK"\n",
1816 le32_to_cpu(es->s_free_blocks_count), 1816 (ext3_fsblk_t)le32_to_cpu(es->s_free_blocks_count),
1817 desc_count, bitmap_count); 1817 desc_count, bitmap_count);
1818 return bitmap_count; 1818 return bitmap_count;
1819#else 1819#else
diff --git a/fs/ext3/bitmap.c b/fs/ext3/bitmap.c
index 909d13e26560..ef9c643e8e9d 100644
--- a/fs/ext3/bitmap.c
+++ b/fs/ext3/bitmap.c
@@ -11,19 +11,9 @@
11 11
12#ifdef EXT3FS_DEBUG 12#ifdef EXT3FS_DEBUG
13 13
14static const int nibblemap[] = {4, 3, 3, 2, 3, 2, 2, 1, 3, 2, 2, 1, 2, 1, 1, 0};
15
16unsigned long ext3_count_free (struct buffer_head * map, unsigned int numchars) 14unsigned long ext3_count_free (struct buffer_head * map, unsigned int numchars)
17{ 15{
18 unsigned int i; 16 return numchars * BITS_PER_BYTE - memweight(map->b_data, numchars);
19 unsigned long sum = 0;
20
21 if (!map)
22 return (0);
23 for (i = 0; i < numchars; i++)
24 sum += nibblemap[map->b_data[i] & 0xf] +
25 nibblemap[(map->b_data[i] >> 4) & 0xf];
26 return (sum);
27} 17}
28 18
29#endif /* EXT3FS_DEBUG */ 19#endif /* EXT3FS_DEBUG */
diff --git a/fs/ext4/bitmap.c b/fs/ext4/bitmap.c
index a94b9c63ee5c..f8716eab9995 100644
--- a/fs/ext4/bitmap.c
+++ b/fs/ext4/bitmap.c
@@ -11,16 +11,9 @@
11#include <linux/jbd2.h> 11#include <linux/jbd2.h>
12#include "ext4.h" 12#include "ext4.h"
13 13
14static const int nibblemap[] = {4, 3, 3, 2, 3, 2, 2, 1, 3, 2, 2, 1, 2, 1, 1, 0};
15
16unsigned int ext4_count_free(char *bitmap, unsigned int numchars) 14unsigned int ext4_count_free(char *bitmap, unsigned int numchars)
17{ 15{
18 unsigned int i, sum = 0; 16 return numchars * BITS_PER_BYTE - memweight(bitmap, numchars);
19
20 for (i = 0; i < numchars; i++)
21 sum += nibblemap[bitmap[i] & 0xf] +
22 nibblemap[(bitmap[i] >> 4) & 0xf];
23 return sum;
24} 17}
25 18
26int ext4_inode_bitmap_csum_verify(struct super_block *sb, ext4_group_t group, 19int ext4_inode_bitmap_csum_verify(struct super_block *sb, ext4_group_t group,
diff --git a/fs/fat/dir.c b/fs/fat/dir.c
index 6eaa28c98ad1..dc49ed2cbffa 100644
--- a/fs/fat/dir.c
+++ b/fs/fat/dir.c
@@ -35,6 +35,11 @@
35#define FAT_MAX_UNI_CHARS ((MSDOS_SLOTS - 1) * 13 + 1) 35#define FAT_MAX_UNI_CHARS ((MSDOS_SLOTS - 1) * 13 + 1)
36#define FAT_MAX_UNI_SIZE (FAT_MAX_UNI_CHARS * sizeof(wchar_t)) 36#define FAT_MAX_UNI_SIZE (FAT_MAX_UNI_CHARS * sizeof(wchar_t))
37 37
38static inline unsigned char fat_tolower(unsigned char c)
39{
40 return ((c >= 'A') && (c <= 'Z')) ? c+32 : c;
41}
42
38static inline loff_t fat_make_i_pos(struct super_block *sb, 43static inline loff_t fat_make_i_pos(struct super_block *sb,
39 struct buffer_head *bh, 44 struct buffer_head *bh,
40 struct msdos_dir_entry *de) 45 struct msdos_dir_entry *de)
@@ -333,6 +338,124 @@ parse_long:
333 return 0; 338 return 0;
334} 339}
335 340
341/**
342 * fat_parse_short - Parse MS-DOS (short) directory entry.
343 * @sb: superblock
344 * @de: directory entry to parse
345 * @name: FAT_MAX_SHORT_SIZE array in which to place extracted name
346 * @dot_hidden: Nonzero == prepend '.' to names with ATTR_HIDDEN
347 *
348 * Returns the number of characters extracted into 'name'.
349 */
350static int fat_parse_short(struct super_block *sb,
351 const struct msdos_dir_entry *de,
352 unsigned char *name, int dot_hidden)
353{
354 const struct msdos_sb_info *sbi = MSDOS_SB(sb);
355 int isvfat = sbi->options.isvfat;
356 int nocase = sbi->options.nocase;
357 unsigned short opt_shortname = sbi->options.shortname;
358 struct nls_table *nls_disk = sbi->nls_disk;
359 wchar_t uni_name[14];
360 unsigned char c, work[MSDOS_NAME];
361 unsigned char *ptname = name;
362 int chi, chl, i, j, k;
363 int dotoffset = 0;
364 int name_len = 0, uni_len = 0;
365
366 if (!isvfat && dot_hidden && (de->attr & ATTR_HIDDEN)) {
367 *ptname++ = '.';
368 dotoffset = 1;
369 }
370
371 memcpy(work, de->name, sizeof(work));
372 /* see namei.c, msdos_format_name */
373 if (work[0] == 0x05)
374 work[0] = 0xE5;
375
376 /* Filename */
377 for (i = 0, j = 0; i < 8;) {
378 c = work[i];
379 if (!c)
380 break;
381 chl = fat_shortname2uni(nls_disk, &work[i], 8 - i,
382 &uni_name[j++], opt_shortname,
383 de->lcase & CASE_LOWER_BASE);
384 if (chl <= 1) {
385 if (!isvfat)
386 ptname[i] = nocase ? c : fat_tolower(c);
387 i++;
388 if (c != ' ') {
389 name_len = i;
390 uni_len = j;
391 }
392 } else {
393 uni_len = j;
394 if (isvfat)
395 i += min(chl, 8-i);
396 else {
397 for (chi = 0; chi < chl && i < 8; chi++, i++)
398 ptname[i] = work[i];
399 }
400 if (chl)
401 name_len = i;
402 }
403 }
404
405 i = name_len;
406 j = uni_len;
407 fat_short2uni(nls_disk, ".", 1, &uni_name[j++]);
408 if (!isvfat)
409 ptname[i] = '.';
410 i++;
411
412 /* Extension */
413 for (k = 8; k < MSDOS_NAME;) {
414 c = work[k];
415 if (!c)
416 break;
417 chl = fat_shortname2uni(nls_disk, &work[k], MSDOS_NAME - k,
418 &uni_name[j++], opt_shortname,
419 de->lcase & CASE_LOWER_EXT);
420 if (chl <= 1) {
421 k++;
422 if (!isvfat)
423 ptname[i] = nocase ? c : fat_tolower(c);
424 i++;
425 if (c != ' ') {
426 name_len = i;
427 uni_len = j;
428 }
429 } else {
430 uni_len = j;
431 if (isvfat) {
432 int offset = min(chl, MSDOS_NAME-k);
433 k += offset;
434 i += offset;
435 } else {
436 for (chi = 0; chi < chl && k < MSDOS_NAME;
437 chi++, i++, k++) {
438 ptname[i] = work[k];
439 }
440 }
441 if (chl)
442 name_len = i;
443 }
444 }
445
446 if (name_len > 0) {
447 name_len += dotoffset;
448
449 if (sbi->options.isvfat) {
450 uni_name[uni_len] = 0x0000;
451 name_len = fat_uni_to_x8(sb, uni_name, name,
452 FAT_MAX_SHORT_SIZE);
453 }
454 }
455
456 return name_len;
457}
458
336/* 459/*
337 * Return values: negative -> error, 0 -> not found, positive -> found, 460 * Return values: negative -> error, 0 -> not found, positive -> found,
338 * value is the total amount of slots, including the shortname entry. 461 * value is the total amount of slots, including the shortname entry.
@@ -344,15 +467,11 @@ int fat_search_long(struct inode *inode, const unsigned char *name,
344 struct msdos_sb_info *sbi = MSDOS_SB(sb); 467 struct msdos_sb_info *sbi = MSDOS_SB(sb);
345 struct buffer_head *bh = NULL; 468 struct buffer_head *bh = NULL;
346 struct msdos_dir_entry *de; 469 struct msdos_dir_entry *de;
347 struct nls_table *nls_disk = sbi->nls_disk;
348 unsigned char nr_slots; 470 unsigned char nr_slots;
349 wchar_t bufuname[14];
350 wchar_t *unicode = NULL; 471 wchar_t *unicode = NULL;
351 unsigned char work[MSDOS_NAME];
352 unsigned char bufname[FAT_MAX_SHORT_SIZE]; 472 unsigned char bufname[FAT_MAX_SHORT_SIZE];
353 unsigned short opt_shortname = sbi->options.shortname;
354 loff_t cpos = 0; 473 loff_t cpos = 0;
355 int chl, i, j, last_u, err, len; 474 int err, len;
356 475
357 err = -ENOENT; 476 err = -ENOENT;
358 while (1) { 477 while (1) {
@@ -380,47 +499,16 @@ parse_record:
380 goto end_of_dir; 499 goto end_of_dir;
381 } 500 }
382 501
383 memcpy(work, de->name, sizeof(de->name)); 502 /* Never prepend '.' to hidden files here.
384 /* see namei.c, msdos_format_name */ 503 * That is done only for msdos mounts (and only when
385 if (work[0] == 0x05) 504 * 'dotsOK=yes'); if we are executing here, it is in the
386 work[0] = 0xE5; 505 * context of a vfat mount.
387 for (i = 0, j = 0, last_u = 0; i < 8;) { 506 */
388 if (!work[i]) 507 len = fat_parse_short(sb, de, bufname, 0);
389 break; 508 if (len == 0)
390 chl = fat_shortname2uni(nls_disk, &work[i], 8 - i,
391 &bufuname[j++], opt_shortname,
392 de->lcase & CASE_LOWER_BASE);
393 if (chl <= 1) {
394 if (work[i] != ' ')
395 last_u = j;
396 } else {
397 last_u = j;
398 }
399 i += chl;
400 }
401 j = last_u;
402 fat_short2uni(nls_disk, ".", 1, &bufuname[j++]);
403 for (i = 8; i < MSDOS_NAME;) {
404 if (!work[i])
405 break;
406 chl = fat_shortname2uni(nls_disk, &work[i],
407 MSDOS_NAME - i,
408 &bufuname[j++], opt_shortname,
409 de->lcase & CASE_LOWER_EXT);
410 if (chl <= 1) {
411 if (work[i] != ' ')
412 last_u = j;
413 } else {
414 last_u = j;
415 }
416 i += chl;
417 }
418 if (!last_u)
419 continue; 509 continue;
420 510
421 /* Compare shortname */ 511 /* Compare shortname */
422 bufuname[last_u] = 0x0000;
423 len = fat_uni_to_x8(sb, bufuname, bufname, sizeof(bufname));
424 if (fat_name_match(sbi, name, name_len, bufname, len)) 512 if (fat_name_match(sbi, name, name_len, bufname, len))
425 goto found; 513 goto found;
426 514
@@ -469,20 +557,15 @@ static int __fat_readdir(struct inode *inode, struct file *filp, void *dirent,
469 struct msdos_sb_info *sbi = MSDOS_SB(sb); 557 struct msdos_sb_info *sbi = MSDOS_SB(sb);
470 struct buffer_head *bh; 558 struct buffer_head *bh;
471 struct msdos_dir_entry *de; 559 struct msdos_dir_entry *de;
472 struct nls_table *nls_disk = sbi->nls_disk;
473 unsigned char nr_slots; 560 unsigned char nr_slots;
474 wchar_t bufuname[14];
475 wchar_t *unicode = NULL; 561 wchar_t *unicode = NULL;
476 unsigned char c, work[MSDOS_NAME]; 562 unsigned char bufname[FAT_MAX_SHORT_SIZE];
477 unsigned char bufname[FAT_MAX_SHORT_SIZE], *ptname = bufname;
478 unsigned short opt_shortname = sbi->options.shortname;
479 int isvfat = sbi->options.isvfat; 563 int isvfat = sbi->options.isvfat;
480 int nocase = sbi->options.nocase;
481 const char *fill_name = NULL; 564 const char *fill_name = NULL;
482 unsigned long inum; 565 unsigned long inum;
483 unsigned long lpos, dummy, *furrfu = &lpos; 566 unsigned long lpos, dummy, *furrfu = &lpos;
484 loff_t cpos; 567 loff_t cpos;
485 int chi, chl, i, i2, j, last, last_u, dotoffset = 0, fill_len = 0; 568 int short_len = 0, fill_len = 0;
486 int ret = 0; 569 int ret = 0;
487 570
488 lock_super(sb); 571 lock_super(sb);
@@ -556,74 +639,10 @@ parse_record:
556 } 639 }
557 } 640 }
558 641
559 if (sbi->options.dotsOK) { 642 short_len = fat_parse_short(sb, de, bufname, sbi->options.dotsOK);
560 ptname = bufname; 643 if (short_len == 0)
561 dotoffset = 0;
562 if (de->attr & ATTR_HIDDEN) {
563 *ptname++ = '.';
564 dotoffset = 1;
565 }
566 }
567
568 memcpy(work, de->name, sizeof(de->name));
569 /* see namei.c, msdos_format_name */
570 if (work[0] == 0x05)
571 work[0] = 0xE5;
572 for (i = 0, j = 0, last = 0, last_u = 0; i < 8;) {
573 if (!(c = work[i]))
574 break;
575 chl = fat_shortname2uni(nls_disk, &work[i], 8 - i,
576 &bufuname[j++], opt_shortname,
577 de->lcase & CASE_LOWER_BASE);
578 if (chl <= 1) {
579 ptname[i++] = (!nocase && c>='A' && c<='Z') ? c+32 : c;
580 if (c != ' ') {
581 last = i;
582 last_u = j;
583 }
584 } else {
585 last_u = j;
586 for (chi = 0; chi < chl && i < 8; chi++) {
587 ptname[i] = work[i];
588 i++; last = i;
589 }
590 }
591 }
592 i = last;
593 j = last_u;
594 fat_short2uni(nls_disk, ".", 1, &bufuname[j++]);
595 ptname[i++] = '.';
596 for (i2 = 8; i2 < MSDOS_NAME;) {
597 if (!(c = work[i2]))
598 break;
599 chl = fat_shortname2uni(nls_disk, &work[i2], MSDOS_NAME - i2,
600 &bufuname[j++], opt_shortname,
601 de->lcase & CASE_LOWER_EXT);
602 if (chl <= 1) {
603 i2++;
604 ptname[i++] = (!nocase && c>='A' && c<='Z') ? c+32 : c;
605 if (c != ' ') {
606 last = i;
607 last_u = j;
608 }
609 } else {
610 last_u = j;
611 for (chi = 0; chi < chl && i2 < MSDOS_NAME; chi++) {
612 ptname[i++] = work[i2++];
613 last = i;
614 }
615 }
616 }
617 if (!last)
618 goto record_end; 644 goto record_end;
619 645
620 i = last + dotoffset;
621 j = last_u;
622
623 if (isvfat) {
624 bufuname[j] = 0x0000;
625 i = fat_uni_to_x8(sb, bufuname, bufname, sizeof(bufname));
626 }
627 if (nr_slots) { 646 if (nr_slots) {
628 /* hack for fat_ioctl_filldir() */ 647 /* hack for fat_ioctl_filldir() */
629 struct fat_ioctl_filldir_callback *p = dirent; 648 struct fat_ioctl_filldir_callback *p = dirent;
@@ -631,12 +650,12 @@ parse_record:
631 p->longname = fill_name; 650 p->longname = fill_name;
632 p->long_len = fill_len; 651 p->long_len = fill_len;
633 p->shortname = bufname; 652 p->shortname = bufname;
634 p->short_len = i; 653 p->short_len = short_len;
635 fill_name = NULL; 654 fill_name = NULL;
636 fill_len = 0; 655 fill_len = 0;
637 } else { 656 } else {
638 fill_name = bufname; 657 fill_name = bufname;
639 fill_len = i; 658 fill_len = short_len;
640 } 659 }
641 660
642start_filldir: 661start_filldir:
diff --git a/fs/fat/fat.h b/fs/fat/fat.h
index fc35c5c69136..2deeeb86f331 100644
--- a/fs/fat/fat.h
+++ b/fs/fat/fat.h
@@ -217,6 +217,21 @@ static inline void fat16_towchar(wchar_t *dst, const __u8 *src, size_t len)
217#endif 217#endif
218} 218}
219 219
220static inline int fat_get_start(const struct msdos_sb_info *sbi,
221 const struct msdos_dir_entry *de)
222{
223 int cluster = le16_to_cpu(de->start);
224 if (sbi->fat_bits == 32)
225 cluster |= (le16_to_cpu(de->starthi) << 16);
226 return cluster;
227}
228
229static inline void fat_set_start(struct msdos_dir_entry *de, int cluster)
230{
231 de->start = cpu_to_le16(cluster);
232 de->starthi = cpu_to_le16(cluster >> 16);
233}
234
220static inline void fatwchar_to16(__u8 *dst, const wchar_t *src, size_t len) 235static inline void fatwchar_to16(__u8 *dst, const wchar_t *src, size_t len)
221{ 236{
222#ifdef __BIG_ENDIAN 237#ifdef __BIG_ENDIAN
diff --git a/fs/fat/inode.c b/fs/fat/inode.c
index 0038b32cb362..05e897fe9866 100644
--- a/fs/fat/inode.c
+++ b/fs/fat/inode.c
@@ -369,10 +369,7 @@ static int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de)
369 inode->i_op = sbi->dir_ops; 369 inode->i_op = sbi->dir_ops;
370 inode->i_fop = &fat_dir_operations; 370 inode->i_fop = &fat_dir_operations;
371 371
372 MSDOS_I(inode)->i_start = le16_to_cpu(de->start); 372 MSDOS_I(inode)->i_start = fat_get_start(sbi, de);
373 if (sbi->fat_bits == 32)
374 MSDOS_I(inode)->i_start |= (le16_to_cpu(de->starthi) << 16);
375
376 MSDOS_I(inode)->i_logstart = MSDOS_I(inode)->i_start; 373 MSDOS_I(inode)->i_logstart = MSDOS_I(inode)->i_start;
377 error = fat_calc_dir_size(inode); 374 error = fat_calc_dir_size(inode);
378 if (error < 0) 375 if (error < 0)
@@ -385,9 +382,7 @@ static int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de)
385 inode->i_mode = fat_make_mode(sbi, de->attr, 382 inode->i_mode = fat_make_mode(sbi, de->attr,
386 ((sbi->options.showexec && !is_exec(de->name + 8)) 383 ((sbi->options.showexec && !is_exec(de->name + 8))
387 ? S_IRUGO|S_IWUGO : S_IRWXUGO)); 384 ? S_IRUGO|S_IWUGO : S_IRWXUGO));
388 MSDOS_I(inode)->i_start = le16_to_cpu(de->start); 385 MSDOS_I(inode)->i_start = fat_get_start(sbi, de);
389 if (sbi->fat_bits == 32)
390 MSDOS_I(inode)->i_start |= (le16_to_cpu(de->starthi) << 16);
391 386
392 MSDOS_I(inode)->i_logstart = MSDOS_I(inode)->i_start; 387 MSDOS_I(inode)->i_logstart = MSDOS_I(inode)->i_start;
393 inode->i_size = le32_to_cpu(de->size); 388 inode->i_size = le32_to_cpu(de->size);
@@ -613,8 +608,7 @@ retry:
613 else 608 else
614 raw_entry->size = cpu_to_le32(inode->i_size); 609 raw_entry->size = cpu_to_le32(inode->i_size);
615 raw_entry->attr = fat_make_attrs(inode); 610 raw_entry->attr = fat_make_attrs(inode);
616 raw_entry->start = cpu_to_le16(MSDOS_I(inode)->i_logstart); 611 fat_set_start(raw_entry, MSDOS_I(inode)->i_logstart);
617 raw_entry->starthi = cpu_to_le16(MSDOS_I(inode)->i_logstart >> 16);
618 fat_time_unix2fat(sbi, &inode->i_mtime, &raw_entry->time, 612 fat_time_unix2fat(sbi, &inode->i_mtime, &raw_entry->time,
619 &raw_entry->date, NULL); 613 &raw_entry->date, NULL);
620 if (sbi->options.isvfat) { 614 if (sbi->options.isvfat) {
diff --git a/fs/fat/namei_msdos.c b/fs/fat/namei_msdos.c
index 70d993a93805..b0e12bf9f4a1 100644
--- a/fs/fat/namei_msdos.c
+++ b/fs/fat/namei_msdos.c
@@ -246,8 +246,7 @@ static int msdos_add_entry(struct inode *dir, const unsigned char *name,
246 de.ctime_cs = 0; 246 de.ctime_cs = 0;
247 de.time = time; 247 de.time = time;
248 de.date = date; 248 de.date = date;
249 de.start = cpu_to_le16(cluster); 249 fat_set_start(&de, cluster);
250 de.starthi = cpu_to_le16(cluster >> 16);
251 de.size = 0; 250 de.size = 0;
252 251
253 err = fat_add_entries(dir, &de, 1, sinfo); 252 err = fat_add_entries(dir, &de, 1, sinfo);
@@ -530,9 +529,7 @@ static int do_msdos_rename(struct inode *old_dir, unsigned char *old_name,
530 mark_inode_dirty(old_inode); 529 mark_inode_dirty(old_inode);
531 530
532 if (update_dotdot) { 531 if (update_dotdot) {
533 int start = MSDOS_I(new_dir)->i_logstart; 532 fat_set_start(dotdot_de, MSDOS_I(new_dir)->i_logstart);
534 dotdot_de->start = cpu_to_le16(start);
535 dotdot_de->starthi = cpu_to_le16(start >> 16);
536 mark_buffer_dirty_inode(dotdot_bh, old_inode); 533 mark_buffer_dirty_inode(dotdot_bh, old_inode);
537 if (IS_DIRSYNC(new_dir)) { 534 if (IS_DIRSYNC(new_dir)) {
538 err = sync_dirty_buffer(dotdot_bh); 535 err = sync_dirty_buffer(dotdot_bh);
@@ -572,9 +569,7 @@ error_dotdot:
572 corrupt = 1; 569 corrupt = 1;
573 570
574 if (update_dotdot) { 571 if (update_dotdot) {
575 int start = MSDOS_I(old_dir)->i_logstart; 572 fat_set_start(dotdot_de, MSDOS_I(old_dir)->i_logstart);
576 dotdot_de->start = cpu_to_le16(start);
577 dotdot_de->starthi = cpu_to_le16(start >> 16);
578 mark_buffer_dirty_inode(dotdot_bh, old_inode); 573 mark_buffer_dirty_inode(dotdot_bh, old_inode);
579 corrupt |= sync_dirty_buffer(dotdot_bh); 574 corrupt |= sync_dirty_buffer(dotdot_bh);
580 } 575 }
diff --git a/fs/fat/namei_vfat.c b/fs/fat/namei_vfat.c
index 6cc480652433..6a6d8c0715a1 100644
--- a/fs/fat/namei_vfat.c
+++ b/fs/fat/namei_vfat.c
@@ -651,8 +651,7 @@ shortname:
651 de->time = de->ctime = time; 651 de->time = de->ctime = time;
652 de->date = de->cdate = de->adate = date; 652 de->date = de->cdate = de->adate = date;
653 de->ctime_cs = time_cs; 653 de->ctime_cs = time_cs;
654 de->start = cpu_to_le16(cluster); 654 fat_set_start(de, cluster);
655 de->starthi = cpu_to_le16(cluster >> 16);
656 de->size = 0; 655 de->size = 0;
657out_free: 656out_free:
658 __putname(uname); 657 __putname(uname);
@@ -965,9 +964,7 @@ static int vfat_rename(struct inode *old_dir, struct dentry *old_dentry,
965 mark_inode_dirty(old_inode); 964 mark_inode_dirty(old_inode);
966 965
967 if (update_dotdot) { 966 if (update_dotdot) {
968 int start = MSDOS_I(new_dir)->i_logstart; 967 fat_set_start(dotdot_de, MSDOS_I(new_dir)->i_logstart);
969 dotdot_de->start = cpu_to_le16(start);
970 dotdot_de->starthi = cpu_to_le16(start >> 16);
971 mark_buffer_dirty_inode(dotdot_bh, old_inode); 968 mark_buffer_dirty_inode(dotdot_bh, old_inode);
972 if (IS_DIRSYNC(new_dir)) { 969 if (IS_DIRSYNC(new_dir)) {
973 err = sync_dirty_buffer(dotdot_bh); 970 err = sync_dirty_buffer(dotdot_bh);
@@ -1009,9 +1006,7 @@ error_dotdot:
1009 corrupt = 1; 1006 corrupt = 1;
1010 1007
1011 if (update_dotdot) { 1008 if (update_dotdot) {
1012 int start = MSDOS_I(old_dir)->i_logstart; 1009 fat_set_start(dotdot_de, MSDOS_I(old_dir)->i_logstart);
1013 dotdot_de->start = cpu_to_le16(start);
1014 dotdot_de->starthi = cpu_to_le16(start >> 16);
1015 mark_buffer_dirty_inode(dotdot_bh, old_inode); 1010 mark_buffer_dirty_inode(dotdot_bh, old_inode);
1016 corrupt |= sync_dirty_buffer(dotdot_bh); 1011 corrupt |= sync_dirty_buffer(dotdot_bh);
1017 } 1012 }
diff --git a/fs/fcntl.c b/fs/fcntl.c
index 81b70e665bf0..887b5ba8c9b5 100644
--- a/fs/fcntl.c
+++ b/fs/fcntl.c
@@ -20,6 +20,7 @@
20#include <linux/signal.h> 20#include <linux/signal.h>
21#include <linux/rcupdate.h> 21#include <linux/rcupdate.h>
22#include <linux/pid_namespace.h> 22#include <linux/pid_namespace.h>
23#include <linux/user_namespace.h>
23 24
24#include <asm/poll.h> 25#include <asm/poll.h>
25#include <asm/siginfo.h> 26#include <asm/siginfo.h>
@@ -340,6 +341,31 @@ static int f_getown_ex(struct file *filp, unsigned long arg)
340 return ret; 341 return ret;
341} 342}
342 343
344#ifdef CONFIG_CHECKPOINT_RESTORE
345static int f_getowner_uids(struct file *filp, unsigned long arg)
346{
347 struct user_namespace *user_ns = current_user_ns();
348 uid_t * __user dst = (void * __user)arg;
349 uid_t src[2];
350 int err;
351
352 read_lock(&filp->f_owner.lock);
353 src[0] = from_kuid(user_ns, filp->f_owner.uid);
354 src[1] = from_kuid(user_ns, filp->f_owner.euid);
355 read_unlock(&filp->f_owner.lock);
356
357 err = put_user(src[0], &dst[0]);
358 err |= put_user(src[1], &dst[1]);
359
360 return err;
361}
362#else
363static int f_getowner_uids(struct file *filp, unsigned long arg)
364{
365 return -EINVAL;
366}
367#endif
368
343static long do_fcntl(int fd, unsigned int cmd, unsigned long arg, 369static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,
344 struct file *filp) 370 struct file *filp)
345{ 371{
@@ -396,6 +422,9 @@ static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,
396 case F_SETOWN_EX: 422 case F_SETOWN_EX:
397 err = f_setown_ex(filp, arg); 423 err = f_setown_ex(filp, arg);
398 break; 424 break;
425 case F_GETOWNER_UIDS:
426 err = f_getowner_uids(filp, arg);
427 break;
399 case F_GETSIG: 428 case F_GETSIG:
400 err = filp->f_owner.signum; 429 err = filp->f_owner.signum;
401 break; 430 break;
diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c
index 473332098013..fdafb2d71654 100644
--- a/fs/hfsplus/super.c
+++ b/fs/hfsplus/super.c
@@ -365,7 +365,7 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent)
365 u64 last_fs_block, last_fs_page; 365 u64 last_fs_block, last_fs_page;
366 int err; 366 int err;
367 367
368 err = -EINVAL; 368 err = -ENOMEM;
369 sbi = kzalloc(sizeof(*sbi), GFP_KERNEL); 369 sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
370 if (!sbi) 370 if (!sbi)
371 goto out; 371 goto out;
diff --git a/fs/minix/itree_v2.c b/fs/minix/itree_v2.c
index 13487ad16894..78e2d93e5c83 100644
--- a/fs/minix/itree_v2.c
+++ b/fs/minix/itree_v2.c
@@ -32,7 +32,8 @@ static int block_to_path(struct inode * inode, long block, int offsets[DEPTH])
32 if (block < 0) { 32 if (block < 0) {
33 printk("MINIX-fs: block_to_path: block %ld < 0 on dev %s\n", 33 printk("MINIX-fs: block_to_path: block %ld < 0 on dev %s\n",
34 block, bdevname(sb->s_bdev, b)); 34 block, bdevname(sb->s_bdev, b));
35 } else if (block >= (minix_sb(inode->i_sb)->s_max_size/sb->s_blocksize)) { 35 } else if ((u64)block * (u64)sb->s_blocksize >=
36 minix_sb(sb)->s_max_size) {
36 if (printk_ratelimit()) 37 if (printk_ratelimit())
37 printk("MINIX-fs: block_to_path: " 38 printk("MINIX-fs: block_to_path: "
38 "block %ld too big on dev %s\n", 39 "block %ld too big on dev %s\n",
diff --git a/fs/nilfs2/alloc.h b/fs/nilfs2/alloc.h
index f5fde36b9e28..fb7238100548 100644
--- a/fs/nilfs2/alloc.h
+++ b/fs/nilfs2/alloc.h
@@ -76,15 +76,23 @@ int nilfs_palloc_freev(struct inode *, __u64 *, size_t);
76#define nilfs_clear_bit_atomic ext2_clear_bit_atomic 76#define nilfs_clear_bit_atomic ext2_clear_bit_atomic
77#define nilfs_find_next_zero_bit find_next_zero_bit_le 77#define nilfs_find_next_zero_bit find_next_zero_bit_le
78 78
79/* 79/**
80 * persistent object allocator cache 80 * struct nilfs_bh_assoc - block offset and buffer head association
81 * @blkoff: block offset
82 * @bh: buffer head
81 */ 83 */
82
83struct nilfs_bh_assoc { 84struct nilfs_bh_assoc {
84 unsigned long blkoff; 85 unsigned long blkoff;
85 struct buffer_head *bh; 86 struct buffer_head *bh;
86}; 87};
87 88
89/**
90 * struct nilfs_palloc_cache - persistent object allocator cache
91 * @lock: cache protecting lock
92 * @prev_desc: blockgroup descriptors cache
93 * @prev_bitmap: blockgroup bitmap cache
94 * @prev_entry: translation entries cache
95 */
88struct nilfs_palloc_cache { 96struct nilfs_palloc_cache {
89 spinlock_t lock; 97 spinlock_t lock;
90 struct nilfs_bh_assoc prev_desc; 98 struct nilfs_bh_assoc prev_desc;
diff --git a/fs/nilfs2/bmap.h b/fs/nilfs2/bmap.h
index 40d9f453d31c..b89e68076adc 100644
--- a/fs/nilfs2/bmap.h
+++ b/fs/nilfs2/bmap.h
@@ -135,6 +135,13 @@ struct nilfs_bmap {
135/* state */ 135/* state */
136#define NILFS_BMAP_DIRTY 0x00000001 136#define NILFS_BMAP_DIRTY 0x00000001
137 137
138/**
139 * struct nilfs_bmap_store - shadow copy of bmap state
140 * @data: cached raw block mapping of on-disk inode
141 * @last_allocated_key: cached value of last allocated key for data block
142 * @last_allocated_ptr: cached value of last allocated ptr for data block
143 * @state: cached value of state field of bmap structure
144 */
138struct nilfs_bmap_store { 145struct nilfs_bmap_store {
139 __le64 data[NILFS_BMAP_SIZE / sizeof(__le64)]; 146 __le64 data[NILFS_BMAP_SIZE / sizeof(__le64)];
140 __u64 last_allocated_key; 147 __u64 last_allocated_key;
diff --git a/fs/nilfs2/btnode.h b/fs/nilfs2/btnode.h
index 3a4dd2d8d3fc..d876b565ce64 100644
--- a/fs/nilfs2/btnode.h
+++ b/fs/nilfs2/btnode.h
@@ -29,7 +29,13 @@
29#include <linux/fs.h> 29#include <linux/fs.h>
30#include <linux/backing-dev.h> 30#include <linux/backing-dev.h>
31 31
32 32/**
33 * struct nilfs_btnode_chkey_ctxt - change key context
34 * @oldkey: old key of block's moving content
35 * @newkey: new key for block's content
36 * @bh: buffer head of old buffer
37 * @newbh: buffer head of new buffer
38 */
33struct nilfs_btnode_chkey_ctxt { 39struct nilfs_btnode_chkey_ctxt {
34 __u64 oldkey; 40 __u64 oldkey;
35 __u64 newkey; 41 __u64 newkey;
diff --git a/fs/nilfs2/cpfile.c b/fs/nilfs2/cpfile.c
index dab5c4c6dfaf..deaa3d33a0aa 100644
--- a/fs/nilfs2/cpfile.c
+++ b/fs/nilfs2/cpfile.c
@@ -286,7 +286,7 @@ int nilfs_cpfile_delete_checkpoints(struct inode *cpfile,
286 __u64 cno; 286 __u64 cno;
287 void *kaddr; 287 void *kaddr;
288 unsigned long tnicps; 288 unsigned long tnicps;
289 int ret, ncps, nicps, count, i; 289 int ret, ncps, nicps, nss, count, i;
290 290
291 if (unlikely(start == 0 || start > end)) { 291 if (unlikely(start == 0 || start > end)) {
292 printk(KERN_ERR "%s: invalid range of checkpoint numbers: " 292 printk(KERN_ERR "%s: invalid range of checkpoint numbers: "
@@ -301,6 +301,7 @@ int nilfs_cpfile_delete_checkpoints(struct inode *cpfile,
301 if (ret < 0) 301 if (ret < 0)
302 goto out_sem; 302 goto out_sem;
303 tnicps = 0; 303 tnicps = 0;
304 nss = 0;
304 305
305 for (cno = start; cno < end; cno += ncps) { 306 for (cno = start; cno < end; cno += ncps) {
306 ncps = nilfs_cpfile_checkpoints_in_block(cpfile, cno, end); 307 ncps = nilfs_cpfile_checkpoints_in_block(cpfile, cno, end);
@@ -318,8 +319,9 @@ int nilfs_cpfile_delete_checkpoints(struct inode *cpfile,
318 cpfile, cno, cp_bh, kaddr); 319 cpfile, cno, cp_bh, kaddr);
319 nicps = 0; 320 nicps = 0;
320 for (i = 0; i < ncps; i++, cp = (void *)cp + cpsz) { 321 for (i = 0; i < ncps; i++, cp = (void *)cp + cpsz) {
321 WARN_ON(nilfs_checkpoint_snapshot(cp)); 322 if (nilfs_checkpoint_snapshot(cp)) {
322 if (!nilfs_checkpoint_invalid(cp)) { 323 nss++;
324 } else if (!nilfs_checkpoint_invalid(cp)) {
323 nilfs_checkpoint_set_invalid(cp); 325 nilfs_checkpoint_set_invalid(cp);
324 nicps++; 326 nicps++;
325 } 327 }
@@ -364,6 +366,8 @@ int nilfs_cpfile_delete_checkpoints(struct inode *cpfile,
364 } 366 }
365 367
366 brelse(header_bh); 368 brelse(header_bh);
369 if (nss > 0)
370 ret = -EBUSY;
367 371
368 out_sem: 372 out_sem:
369 up_write(&NILFS_MDT(cpfile)->mi_sem); 373 up_write(&NILFS_MDT(cpfile)->mi_sem);
diff --git a/fs/nilfs2/dat.c b/fs/nilfs2/dat.c
index b5c13f3576b9..fa0f80308c2d 100644
--- a/fs/nilfs2/dat.c
+++ b/fs/nilfs2/dat.c
@@ -33,6 +33,12 @@
33#define NILFS_CNO_MIN ((__u64)1) 33#define NILFS_CNO_MIN ((__u64)1)
34#define NILFS_CNO_MAX (~(__u64)0) 34#define NILFS_CNO_MAX (~(__u64)0)
35 35
36/**
37 * struct nilfs_dat_info - on-memory private data of DAT file
38 * @mi: on-memory private data of metadata file
39 * @palloc_cache: persistent object allocator cache of DAT file
40 * @shadow: shadow map of DAT file
41 */
36struct nilfs_dat_info { 42struct nilfs_dat_info {
37 struct nilfs_mdt_info mi; 43 struct nilfs_mdt_info mi;
38 struct nilfs_palloc_cache palloc_cache; 44 struct nilfs_palloc_cache palloc_cache;
diff --git a/fs/nilfs2/export.h b/fs/nilfs2/export.h
index a71cc412b651..19ccbf9522ab 100644
--- a/fs/nilfs2/export.h
+++ b/fs/nilfs2/export.h
@@ -5,6 +5,14 @@
5 5
6extern const struct export_operations nilfs_export_ops; 6extern const struct export_operations nilfs_export_ops;
7 7
8/**
9 * struct nilfs_fid - NILFS file id type
10 * @cno: checkpoint number
11 * @ino: inode number
12 * @gen: file generation (version) for NFS
13 * @parent_gen: parent generation (version) for NFS
14 * @parent_ino: parent inode number
15 */
8struct nilfs_fid { 16struct nilfs_fid {
9 u64 cno; 17 u64 cno;
10 u64 ino; 18 u64 ino;
diff --git a/fs/nilfs2/ifile.c b/fs/nilfs2/ifile.c
index 5a48df79d674..d8e65bde083c 100644
--- a/fs/nilfs2/ifile.c
+++ b/fs/nilfs2/ifile.c
@@ -29,7 +29,11 @@
29#include "alloc.h" 29#include "alloc.h"
30#include "ifile.h" 30#include "ifile.h"
31 31
32 32/**
33 * struct nilfs_ifile_info - on-memory private data of ifile
34 * @mi: on-memory private data of metadata file
35 * @palloc_cache: persistent object allocator cache of ifile
36 */
33struct nilfs_ifile_info { 37struct nilfs_ifile_info {
34 struct nilfs_mdt_info mi; 38 struct nilfs_mdt_info mi;
35 struct nilfs_palloc_cache palloc_cache; 39 struct nilfs_palloc_cache palloc_cache;
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
index 7cc64465ec26..6e2c3db976b2 100644
--- a/fs/nilfs2/inode.c
+++ b/fs/nilfs2/inode.c
@@ -34,6 +34,13 @@
34#include "cpfile.h" 34#include "cpfile.h"
35#include "ifile.h" 35#include "ifile.h"
36 36
37/**
38 * struct nilfs_iget_args - arguments used during comparison between inodes
39 * @ino: inode number
40 * @cno: checkpoint number
41 * @root: pointer on NILFS root object (mounted checkpoint)
42 * @for_gc: inode for GC flag
43 */
37struct nilfs_iget_args { 44struct nilfs_iget_args {
38 u64 ino; 45 u64 ino;
39 __u64 cno; 46 __u64 cno;
diff --git a/fs/nilfs2/ioctl.c b/fs/nilfs2/ioctl.c
index 06658caa18bd..0b6387c67e6c 100644
--- a/fs/nilfs2/ioctl.c
+++ b/fs/nilfs2/ioctl.c
@@ -182,7 +182,7 @@ static int nilfs_ioctl_change_cpmode(struct inode *inode, struct file *filp,
182 if (copy_from_user(&cpmode, argp, sizeof(cpmode))) 182 if (copy_from_user(&cpmode, argp, sizeof(cpmode)))
183 goto out; 183 goto out;
184 184
185 down_read(&inode->i_sb->s_umount); 185 mutex_lock(&nilfs->ns_snapshot_mount_mutex);
186 186
187 nilfs_transaction_begin(inode->i_sb, &ti, 0); 187 nilfs_transaction_begin(inode->i_sb, &ti, 0);
188 ret = nilfs_cpfile_change_cpmode( 188 ret = nilfs_cpfile_change_cpmode(
@@ -192,7 +192,7 @@ static int nilfs_ioctl_change_cpmode(struct inode *inode, struct file *filp,
192 else 192 else
193 nilfs_transaction_commit(inode->i_sb); /* never fails */ 193 nilfs_transaction_commit(inode->i_sb); /* never fails */
194 194
195 up_read(&inode->i_sb->s_umount); 195 mutex_unlock(&nilfs->ns_snapshot_mount_mutex);
196out: 196out:
197 mnt_drop_write_file(filp); 197 mnt_drop_write_file(filp);
198 return ret; 198 return ret;
diff --git a/fs/nilfs2/mdt.h b/fs/nilfs2/mdt.h
index ab20a4baa50f..ab172e8549c5 100644
--- a/fs/nilfs2/mdt.h
+++ b/fs/nilfs2/mdt.h
@@ -28,6 +28,13 @@
28#include "nilfs.h" 28#include "nilfs.h"
29#include "page.h" 29#include "page.h"
30 30
31/**
32 * struct nilfs_shadow_map - shadow mapping of meta data file
33 * @bmap_store: shadow copy of bmap state
34 * @frozen_data: shadowed dirty data pages
35 * @frozen_btnodes: shadowed dirty b-tree nodes' pages
36 * @frozen_buffers: list of frozen buffers
37 */
31struct nilfs_shadow_map { 38struct nilfs_shadow_map {
32 struct nilfs_bmap_store bmap_store; 39 struct nilfs_bmap_store bmap_store;
33 struct address_space frozen_data; 40 struct address_space frozen_data;
diff --git a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h
index 250add84da76..74cece80e9a3 100644
--- a/fs/nilfs2/nilfs.h
+++ b/fs/nilfs2/nilfs.h
@@ -32,8 +32,21 @@
32#include "the_nilfs.h" 32#include "the_nilfs.h"
33#include "bmap.h" 33#include "bmap.h"
34 34
35/* 35/**
36 * nilfs inode data in memory 36 * struct nilfs_inode_info - nilfs inode data in memory
37 * @i_flags: inode flags
38 * @i_state: dynamic state flags
39 * @i_bmap: pointer on i_bmap_data
40 * @i_bmap_data: raw block mapping
41 * @i_xattr: <TODO>
42 * @i_dir_start_lookup: page index of last successful search
43 * @i_cno: checkpoint number for GC inode
44 * @i_btnode_cache: cached pages of b-tree nodes
45 * @i_dirty: list for connecting dirty files
46 * @xattr_sem: semaphore for extended attributes processing
47 * @i_bh: buffer contains disk inode
48 * @i_root: root object of the current filesystem tree
49 * @vfs_inode: VFS inode object
37 */ 50 */
38struct nilfs_inode_info { 51struct nilfs_inode_info {
39 __u32 i_flags; 52 __u32 i_flags;
diff --git a/fs/nilfs2/sufile.c b/fs/nilfs2/sufile.c
index c5b7653a4391..3127e9f438a7 100644
--- a/fs/nilfs2/sufile.c
+++ b/fs/nilfs2/sufile.c
@@ -30,7 +30,13 @@
30#include "mdt.h" 30#include "mdt.h"
31#include "sufile.h" 31#include "sufile.h"
32 32
33 33/**
34 * struct nilfs_sufile_info - on-memory private data of sufile
35 * @mi: on-memory private data of metadata file
36 * @ncleansegs: number of clean segments
37 * @allocmin: lower limit of allocatable segment range
38 * @allocmax: upper limit of allocatable segment range
39 */
34struct nilfs_sufile_info { 40struct nilfs_sufile_info {
35 struct nilfs_mdt_info mi; 41 struct nilfs_mdt_info mi;
36 unsigned long ncleansegs;/* number of clean segments */ 42 unsigned long ncleansegs;/* number of clean segments */
diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c
index d57c42f974ea..6522cac6057c 100644
--- a/fs/nilfs2/super.c
+++ b/fs/nilfs2/super.c
@@ -677,7 +677,6 @@ static const struct super_operations nilfs_sops = {
677 .destroy_inode = nilfs_destroy_inode, 677 .destroy_inode = nilfs_destroy_inode,
678 .dirty_inode = nilfs_dirty_inode, 678 .dirty_inode = nilfs_dirty_inode,
679 /* .write_inode = nilfs_write_inode, */ 679 /* .write_inode = nilfs_write_inode, */
680 /* .put_inode = nilfs_put_inode, */
681 /* .drop_inode = nilfs_drop_inode, */ 680 /* .drop_inode = nilfs_drop_inode, */
682 .evict_inode = nilfs_evict_inode, 681 .evict_inode = nilfs_evict_inode,
683 .put_super = nilfs_put_super, 682 .put_super = nilfs_put_super,
@@ -685,8 +684,6 @@ static const struct super_operations nilfs_sops = {
685 .sync_fs = nilfs_sync_fs, 684 .sync_fs = nilfs_sync_fs,
686 .freeze_fs = nilfs_freeze, 685 .freeze_fs = nilfs_freeze,
687 .unfreeze_fs = nilfs_unfreeze, 686 .unfreeze_fs = nilfs_unfreeze,
688 /* .write_super_lockfs */
689 /* .unlockfs */
690 .statfs = nilfs_statfs, 687 .statfs = nilfs_statfs,
691 .remount_fs = nilfs_remount, 688 .remount_fs = nilfs_remount,
692 /* .umount_begin */ 689 /* .umount_begin */
@@ -948,6 +945,8 @@ static int nilfs_attach_snapshot(struct super_block *s, __u64 cno,
948 struct nilfs_root *root; 945 struct nilfs_root *root;
949 int ret; 946 int ret;
950 947
948 mutex_lock(&nilfs->ns_snapshot_mount_mutex);
949
951 down_read(&nilfs->ns_segctor_sem); 950 down_read(&nilfs->ns_segctor_sem);
952 ret = nilfs_cpfile_is_snapshot(nilfs->ns_cpfile, cno); 951 ret = nilfs_cpfile_is_snapshot(nilfs->ns_cpfile, cno);
953 up_read(&nilfs->ns_segctor_sem); 952 up_read(&nilfs->ns_segctor_sem);
@@ -972,6 +971,7 @@ static int nilfs_attach_snapshot(struct super_block *s, __u64 cno,
972 ret = nilfs_get_root_dentry(s, root, root_dentry); 971 ret = nilfs_get_root_dentry(s, root, root_dentry);
973 nilfs_put_root(root); 972 nilfs_put_root(root);
974 out: 973 out:
974 mutex_unlock(&nilfs->ns_snapshot_mount_mutex);
975 return ret; 975 return ret;
976} 976}
977 977
diff --git a/fs/nilfs2/the_nilfs.c b/fs/nilfs2/the_nilfs.c
index 501b7f8b739f..41e6a04a561f 100644
--- a/fs/nilfs2/the_nilfs.c
+++ b/fs/nilfs2/the_nilfs.c
@@ -76,6 +76,7 @@ struct the_nilfs *alloc_nilfs(struct block_device *bdev)
76 nilfs->ns_bdev = bdev; 76 nilfs->ns_bdev = bdev;
77 atomic_set(&nilfs->ns_ndirtyblks, 0); 77 atomic_set(&nilfs->ns_ndirtyblks, 0);
78 init_rwsem(&nilfs->ns_sem); 78 init_rwsem(&nilfs->ns_sem);
79 mutex_init(&nilfs->ns_snapshot_mount_mutex);
79 INIT_LIST_HEAD(&nilfs->ns_dirty_files); 80 INIT_LIST_HEAD(&nilfs->ns_dirty_files);
80 INIT_LIST_HEAD(&nilfs->ns_gc_inodes); 81 INIT_LIST_HEAD(&nilfs->ns_gc_inodes);
81 spin_lock_init(&nilfs->ns_inode_lock); 82 spin_lock_init(&nilfs->ns_inode_lock);
diff --git a/fs/nilfs2/the_nilfs.h b/fs/nilfs2/the_nilfs.h
index 9992b11312ff..6eee4177807b 100644
--- a/fs/nilfs2/the_nilfs.h
+++ b/fs/nilfs2/the_nilfs.h
@@ -47,11 +47,13 @@ enum {
47 * @ns_flags: flags 47 * @ns_flags: flags
48 * @ns_bdev: block device 48 * @ns_bdev: block device
49 * @ns_sem: semaphore for shared states 49 * @ns_sem: semaphore for shared states
50 * @ns_snapshot_mount_mutex: mutex to protect snapshot mounts
50 * @ns_sbh: buffer heads of on-disk super blocks 51 * @ns_sbh: buffer heads of on-disk super blocks
51 * @ns_sbp: pointers to super block data 52 * @ns_sbp: pointers to super block data
52 * @ns_sbwtime: previous write time of super block 53 * @ns_sbwtime: previous write time of super block
53 * @ns_sbwcount: write count of super block 54 * @ns_sbwcount: write count of super block
54 * @ns_sbsize: size of valid data in super block 55 * @ns_sbsize: size of valid data in super block
56 * @ns_mount_state: file system state
55 * @ns_seg_seq: segment sequence counter 57 * @ns_seg_seq: segment sequence counter
56 * @ns_segnum: index number of the latest full segment. 58 * @ns_segnum: index number of the latest full segment.
57 * @ns_nextnum: index number of the full segment index to be used next 59 * @ns_nextnum: index number of the full segment index to be used next
@@ -99,6 +101,7 @@ struct the_nilfs {
99 101
100 struct block_device *ns_bdev; 102 struct block_device *ns_bdev;
101 struct rw_semaphore ns_sem; 103 struct rw_semaphore ns_sem;
104 struct mutex ns_snapshot_mount_mutex;
102 105
103 /* 106 /*
104 * used for 107 * used for
@@ -229,9 +232,8 @@ THE_NILFS_FNS(SB_DIRTY, sb_dirty)
229 * @count: refcount of this structure 232 * @count: refcount of this structure
230 * @nilfs: nilfs object 233 * @nilfs: nilfs object
231 * @ifile: inode file 234 * @ifile: inode file
232 * @root: root inode
233 * @inodes_count: number of inodes 235 * @inodes_count: number of inodes
234 * @blocks_count: number of blocks (Reserved) 236 * @blocks_count: number of blocks
235 */ 237 */
236struct nilfs_root { 238struct nilfs_root {
237 __u64 cno; 239 __u64 cno;
diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c
index b341492542ca..2bc149d6a784 100644
--- a/fs/ntfs/super.c
+++ b/fs/ntfs/super.c
@@ -2660,31 +2660,14 @@ static const struct super_operations ntfs_sops = {
2660 .alloc_inode = ntfs_alloc_big_inode, /* VFS: Allocate new inode. */ 2660 .alloc_inode = ntfs_alloc_big_inode, /* VFS: Allocate new inode. */
2661 .destroy_inode = ntfs_destroy_big_inode, /* VFS: Deallocate inode. */ 2661 .destroy_inode = ntfs_destroy_big_inode, /* VFS: Deallocate inode. */
2662#ifdef NTFS_RW 2662#ifdef NTFS_RW
2663 //.dirty_inode = NULL, /* VFS: Called from
2664 // __mark_inode_dirty(). */
2665 .write_inode = ntfs_write_inode, /* VFS: Write dirty inode to 2663 .write_inode = ntfs_write_inode, /* VFS: Write dirty inode to
2666 disk. */ 2664 disk. */
2667 //.drop_inode = NULL, /* VFS: Called just after the
2668 // inode reference count has
2669 // been decreased to zero.
2670 // NOTE: The inode lock is
2671 // held. See fs/inode.c::
2672 // generic_drop_inode(). */
2673 //.delete_inode = NULL, /* VFS: Delete inode from disk.
2674 // Called when i_count becomes
2675 // 0 and i_nlink is also 0. */
2676 //.write_super = NULL, /* Flush dirty super block to
2677 // disk. */
2678 //.sync_fs = NULL, /* ? */
2679 //.write_super_lockfs = NULL, /* ? */
2680 //.unlockfs = NULL, /* ? */
2681#endif /* NTFS_RW */ 2665#endif /* NTFS_RW */
2682 .put_super = ntfs_put_super, /* Syscall: umount. */ 2666 .put_super = ntfs_put_super, /* Syscall: umount. */
2683 .statfs = ntfs_statfs, /* Syscall: statfs */ 2667 .statfs = ntfs_statfs, /* Syscall: statfs */
2684 .remount_fs = ntfs_remount, /* Syscall: mount -o remount. */ 2668 .remount_fs = ntfs_remount, /* Syscall: mount -o remount. */
2685 .evict_inode = ntfs_evict_big_inode, /* VFS: Called when an inode is 2669 .evict_inode = ntfs_evict_big_inode, /* VFS: Called when an inode is
2686 removed from memory. */ 2670 removed from memory. */
2687 //.umount_begin = NULL, /* Forced umount. */
2688 .show_options = ntfs_show_options, /* Show mount options in 2671 .show_options = ntfs_show_options, /* Show mount options in
2689 proc. */ 2672 proc. */
2690}; 2673};
diff --git a/fs/ocfs2/localalloc.c b/fs/ocfs2/localalloc.c
index 210c35237548..a9f78c74d687 100644
--- a/fs/ocfs2/localalloc.c
+++ b/fs/ocfs2/localalloc.c
@@ -784,14 +784,10 @@ bail:
784 784
785static u32 ocfs2_local_alloc_count_bits(struct ocfs2_dinode *alloc) 785static u32 ocfs2_local_alloc_count_bits(struct ocfs2_dinode *alloc)
786{ 786{
787 int i; 787 u32 count;
788 u8 *buffer;
789 u32 count = 0;
790 struct ocfs2_local_alloc *la = OCFS2_LOCAL_ALLOC(alloc); 788 struct ocfs2_local_alloc *la = OCFS2_LOCAL_ALLOC(alloc);
791 789
792 buffer = la->la_bitmap; 790 count = memweight(la->la_bitmap, le16_to_cpu(la->la_size));
793 for (i = 0; i < le16_to_cpu(la->la_size); i++)
794 count += hweight8(buffer[i]);
795 791
796 trace_ocfs2_local_alloc_count_bits(count); 792 trace_ocfs2_local_alloc_count_bits(count);
797 return count; 793 return count;
diff --git a/fs/proc/base.c b/fs/proc/base.c
index 2772208338f8..1b6c84cbdb73 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -695,8 +695,6 @@ static int __mem_open(struct inode *inode, struct file *file, unsigned int mode)
695 mmput(mm); 695 mmput(mm);
696 } 696 }
697 697
698 /* OK to pass negative loff_t, we can catch out-of-range */
699 file->f_mode |= FMODE_UNSIGNED_OFFSET;
700 file->private_data = mm; 698 file->private_data = mm;
701 699
702 return 0; 700 return 0;
@@ -704,7 +702,12 @@ static int __mem_open(struct inode *inode, struct file *file, unsigned int mode)
704 702
705static int mem_open(struct inode *inode, struct file *file) 703static int mem_open(struct inode *inode, struct file *file)
706{ 704{
707 return __mem_open(inode, file, PTRACE_MODE_ATTACH); 705 int ret = __mem_open(inode, file, PTRACE_MODE_ATTACH);
706
707 /* OK to pass negative loff_t, we can catch out-of-range */
708 file->f_mode |= FMODE_UNSIGNED_OFFSET;
709
710 return ret;
708} 711}
709 712
710static ssize_t mem_rw(struct file *file, char __user *buf, 713static ssize_t mem_rw(struct file *file, char __user *buf,
@@ -827,15 +830,16 @@ static ssize_t environ_read(struct file *file, char __user *buf,
827 if (!atomic_inc_not_zero(&mm->mm_users)) 830 if (!atomic_inc_not_zero(&mm->mm_users))
828 goto free; 831 goto free;
829 while (count > 0) { 832 while (count > 0) {
830 int this_len, retval, max_len; 833 size_t this_len, max_len;
831 834 int retval;
832 this_len = mm->env_end - (mm->env_start + src);
833 835
834 if (this_len <= 0) 836 if (src >= (mm->env_end - mm->env_start))
835 break; 837 break;
836 838
837 max_len = (count > PAGE_SIZE) ? PAGE_SIZE : count; 839 this_len = mm->env_end - (mm->env_start + src);
838 this_len = (this_len > max_len) ? max_len : this_len; 840
841 max_len = min_t(size_t, PAGE_SIZE, count);
842 this_len = min(max_len, this_len);
839 843
840 retval = access_remote_vm(mm, (mm->env_start + src), 844 retval = access_remote_vm(mm, (mm->env_start + src),
841 page, this_len, 0); 845 page, this_len, 0);
diff --git a/fs/qnx4/bitmap.c b/fs/qnx4/bitmap.c
index 22e0d60e53ef..76a7a697b778 100644
--- a/fs/qnx4/bitmap.c
+++ b/fs/qnx4/bitmap.c
@@ -17,23 +17,6 @@
17#include <linux/bitops.h> 17#include <linux/bitops.h>
18#include "qnx4.h" 18#include "qnx4.h"
19 19
20static void count_bits(register const char *bmPart, register int size,
21 int *const tf)
22{
23 char b;
24 int tot = *tf;
25
26 if (size > QNX4_BLOCK_SIZE) {
27 size = QNX4_BLOCK_SIZE;
28 }
29 do {
30 b = *bmPart++;
31 tot += 8 - hweight8(b);
32 size--;
33 } while (size != 0);
34 *tf = tot;
35}
36
37unsigned long qnx4_count_free_blocks(struct super_block *sb) 20unsigned long qnx4_count_free_blocks(struct super_block *sb)
38{ 21{
39 int start = le32_to_cpu(qnx4_sb(sb)->BitMap->di_first_xtnt.xtnt_blk) - 1; 22 int start = le32_to_cpu(qnx4_sb(sb)->BitMap->di_first_xtnt.xtnt_blk) - 1;
@@ -44,13 +27,16 @@ unsigned long qnx4_count_free_blocks(struct super_block *sb)
44 struct buffer_head *bh; 27 struct buffer_head *bh;
45 28
46 while (total < size) { 29 while (total < size) {
30 int bytes = min(size - total, QNX4_BLOCK_SIZE);
31
47 if ((bh = sb_bread(sb, start + offset)) == NULL) { 32 if ((bh = sb_bread(sb, start + offset)) == NULL) {
48 printk(KERN_ERR "qnx4: I/O error in counting free blocks\n"); 33 printk(KERN_ERR "qnx4: I/O error in counting free blocks\n");
49 break; 34 break;
50 } 35 }
51 count_bits(bh->b_data, size - total, &total_free); 36 total_free += bytes * BITS_PER_BYTE -
37 memweight(bh->b_data, bytes);
52 brelse(bh); 38 brelse(bh);
53 total += QNX4_BLOCK_SIZE; 39 total += bytes;
54 offset++; 40 offset++;
55 } 41 }
56 42
diff --git a/fs/xattr.c b/fs/xattr.c
index 1d7ac3790458..4d45b7189e7e 100644
--- a/fs/xattr.c
+++ b/fs/xattr.c
@@ -427,6 +427,7 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,
427{ 427{
428 ssize_t error; 428 ssize_t error;
429 void *kvalue = NULL; 429 void *kvalue = NULL;
430 void *vvalue = NULL;
430 char kname[XATTR_NAME_MAX + 1]; 431 char kname[XATTR_NAME_MAX + 1];
431 432
432 error = strncpy_from_user(kname, name, sizeof(kname)); 433 error = strncpy_from_user(kname, name, sizeof(kname));
@@ -438,9 +439,13 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,
438 if (size) { 439 if (size) {
439 if (size > XATTR_SIZE_MAX) 440 if (size > XATTR_SIZE_MAX)
440 size = XATTR_SIZE_MAX; 441 size = XATTR_SIZE_MAX;
441 kvalue = kzalloc(size, GFP_KERNEL); 442 kvalue = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
442 if (!kvalue) 443 if (!kvalue) {
443 return -ENOMEM; 444 vvalue = vmalloc(size);
445 if (!vvalue)
446 return -ENOMEM;
447 kvalue = vvalue;
448 }
444 } 449 }
445 450
446 error = vfs_getxattr(d, kname, kvalue, size); 451 error = vfs_getxattr(d, kname, kvalue, size);
@@ -452,7 +457,10 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,
452 than XATTR_SIZE_MAX bytes. Not possible. */ 457 than XATTR_SIZE_MAX bytes. Not possible. */
453 error = -E2BIG; 458 error = -E2BIG;
454 } 459 }
455 kfree(kvalue); 460 if (vvalue)
461 vfree(vvalue);
462 else
463 kfree(kvalue);
456 return error; 464 return error;
457} 465}
458 466
diff --git a/include/asm-generic/fcntl.h b/include/asm-generic/fcntl.h
index 9e5b0356e2bb..a48937d4a5ea 100644
--- a/include/asm-generic/fcntl.h
+++ b/include/asm-generic/fcntl.h
@@ -120,6 +120,10 @@
120#define F_GETOWN_EX 16 120#define F_GETOWN_EX 16
121#endif 121#endif
122 122
123#ifndef F_GETOWNER_UIDS
124#define F_GETOWNER_UIDS 17
125#endif
126
123#define F_OWNER_TID 0 127#define F_OWNER_TID 0
124#define F_OWNER_PID 1 128#define F_OWNER_PID 1
125#define F_OWNER_PGRP 2 129#define F_OWNER_PGRP 2
diff --git a/include/linux/aio.h b/include/linux/aio.h
index b1a520ec8b59..31ff6dba4872 100644
--- a/include/linux/aio.h
+++ b/include/linux/aio.h
@@ -126,22 +126,20 @@ struct kiocb {
126 struct eventfd_ctx *ki_eventfd; 126 struct eventfd_ctx *ki_eventfd;
127}; 127};
128 128
129#define is_sync_kiocb(iocb) ((iocb)->ki_key == KIOCB_SYNC_KEY) 129static inline bool is_sync_kiocb(struct kiocb *kiocb)
130#define init_sync_kiocb(x, filp) \ 130{
131 do { \ 131 return kiocb->ki_key == KIOCB_SYNC_KEY;
132 struct task_struct *tsk = current; \ 132}
133 (x)->ki_flags = 0; \ 133
134 (x)->ki_users = 1; \ 134static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp)
135 (x)->ki_key = KIOCB_SYNC_KEY; \ 135{
136 (x)->ki_filp = (filp); \ 136 *kiocb = (struct kiocb) {
137 (x)->ki_ctx = NULL; \ 137 .ki_users = 1,
138 (x)->ki_cancel = NULL; \ 138 .ki_key = KIOCB_SYNC_KEY,
139 (x)->ki_retry = NULL; \ 139 .ki_filp = filp,
140 (x)->ki_dtor = NULL; \ 140 .ki_obj.tsk = current,
141 (x)->ki_obj.tsk = tsk; \ 141 };
142 (x)->ki_user_data = 0; \ 142}
143 (x)->private = NULL; \
144 } while (0)
145 143
146#define AIO_RING_MAGIC 0xa10a10a1 144#define AIO_RING_MAGIC 0xa10a10a1
147#define AIO_RING_COMPAT_FEATURES 1 145#define AIO_RING_COMPAT_FEATURES 1
@@ -161,8 +159,6 @@ struct aio_ring {
161 struct io_event io_events[0]; 159 struct io_event io_events[0];
162}; /* 128 bytes + ring size */ 160}; /* 128 bytes + ring size */
163 161
164#define aio_ring_avail(info, ring) (((ring)->head + (info)->nr - 1 - (ring)->tail) % (info)->nr)
165
166#define AIO_RING_PAGES 8 162#define AIO_RING_PAGES 8
167struct aio_ring_info { 163struct aio_ring_info {
168 unsigned long mmap_base; 164 unsigned long mmap_base;
@@ -177,6 +173,12 @@ struct aio_ring_info {
177 struct page *internal_pages[AIO_RING_PAGES]; 173 struct page *internal_pages[AIO_RING_PAGES];
178}; 174};
179 175
176static inline unsigned aio_ring_avail(struct aio_ring_info *info,
177 struct aio_ring *ring)
178{
179 return (ring->head + info->nr - 1 - ring->tail) % info->nr;
180}
181
180struct kioctx { 182struct kioctx {
181 atomic_t users; 183 atomic_t users;
182 int dead; 184 int dead;
diff --git a/include/linux/clk.h b/include/linux/clk.h
index 2fd6a4234531..b3ac22d0fc1f 100644
--- a/include/linux/clk.h
+++ b/include/linux/clk.h
@@ -85,6 +85,43 @@ int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb);
85#endif 85#endif
86 86
87/** 87/**
88 * clk_prepare - prepare a clock source
89 * @clk: clock source
90 *
91 * This prepares the clock source for use.
92 *
93 * Must not be called from within atomic context.
94 */
95#ifdef CONFIG_HAVE_CLK_PREPARE
96int clk_prepare(struct clk *clk);
97#else
98static inline int clk_prepare(struct clk *clk)
99{
100 might_sleep();
101 return 0;
102}
103#endif
104
105/**
106 * clk_unprepare - undo preparation of a clock source
107 * @clk: clock source
108 *
109 * This undoes a previously prepared clock. The caller must balance
110 * the number of prepare and unprepare calls.
111 *
112 * Must not be called from within atomic context.
113 */
114#ifdef CONFIG_HAVE_CLK_PREPARE
115void clk_unprepare(struct clk *clk);
116#else
117static inline void clk_unprepare(struct clk *clk)
118{
119 might_sleep();
120}
121#endif
122
123#ifdef CONFIG_HAVE_CLK
124/**
88 * clk_get - lookup and obtain a reference to a clock producer. 125 * clk_get - lookup and obtain a reference to a clock producer.
89 * @dev: device for clock "consumer" 126 * @dev: device for clock "consumer"
90 * @id: clock consumer ID 127 * @id: clock consumer ID
@@ -122,24 +159,6 @@ struct clk *clk_get(struct device *dev, const char *id);
122struct clk *devm_clk_get(struct device *dev, const char *id); 159struct clk *devm_clk_get(struct device *dev, const char *id);
123 160
124/** 161/**
125 * clk_prepare - prepare a clock source
126 * @clk: clock source
127 *
128 * This prepares the clock source for use.
129 *
130 * Must not be called from within atomic context.
131 */
132#ifdef CONFIG_HAVE_CLK_PREPARE
133int clk_prepare(struct clk *clk);
134#else
135static inline int clk_prepare(struct clk *clk)
136{
137 might_sleep();
138 return 0;
139}
140#endif
141
142/**
143 * clk_enable - inform the system when the clock source should be running. 162 * clk_enable - inform the system when the clock source should be running.
144 * @clk: clock source 163 * @clk: clock source
145 * 164 *
@@ -167,47 +186,6 @@ int clk_enable(struct clk *clk);
167 */ 186 */
168void clk_disable(struct clk *clk); 187void clk_disable(struct clk *clk);
169 188
170
171/**
172 * clk_unprepare - undo preparation of a clock source
173 * @clk: clock source
174 *
175 * This undoes a previously prepared clock. The caller must balance
176 * the number of prepare and unprepare calls.
177 *
178 * Must not be called from within atomic context.
179 */
180#ifdef CONFIG_HAVE_CLK_PREPARE
181void clk_unprepare(struct clk *clk);
182#else
183static inline void clk_unprepare(struct clk *clk)
184{
185 might_sleep();
186}
187#endif
188
189/* clk_prepare_enable helps cases using clk_enable in non-atomic context. */
190static inline int clk_prepare_enable(struct clk *clk)
191{
192 int ret;
193
194 ret = clk_prepare(clk);
195 if (ret)
196 return ret;
197 ret = clk_enable(clk);
198 if (ret)
199 clk_unprepare(clk);
200
201 return ret;
202}
203
204/* clk_disable_unprepare helps cases using clk_disable in non-atomic context. */
205static inline void clk_disable_unprepare(struct clk *clk)
206{
207 clk_disable(clk);
208 clk_unprepare(clk);
209}
210
211/** 189/**
212 * clk_get_rate - obtain the current clock rate (in Hz) for a clock source. 190 * clk_get_rate - obtain the current clock rate (in Hz) for a clock source.
213 * This is only valid once the clock source has been enabled. 191 * This is only valid once the clock source has been enabled.
@@ -298,6 +276,78 @@ struct clk *clk_get_parent(struct clk *clk);
298 */ 276 */
299struct clk *clk_get_sys(const char *dev_id, const char *con_id); 277struct clk *clk_get_sys(const char *dev_id, const char *con_id);
300 278
279#else /* !CONFIG_HAVE_CLK */
280
281static inline struct clk *clk_get(struct device *dev, const char *id)
282{
283 return NULL;
284}
285
286static inline struct clk *devm_clk_get(struct device *dev, const char *id)
287{
288 return NULL;
289}
290
291static inline void clk_put(struct clk *clk) {}
292
293static inline void devm_clk_put(struct device *dev, struct clk *clk) {}
294
295static inline int clk_enable(struct clk *clk)
296{
297 return 0;
298}
299
300static inline void clk_disable(struct clk *clk) {}
301
302static inline unsigned long clk_get_rate(struct clk *clk)
303{
304 return 0;
305}
306
307static inline int clk_set_rate(struct clk *clk, unsigned long rate)
308{
309 return 0;
310}
311
312static inline long clk_round_rate(struct clk *clk, unsigned long rate)
313{
314 return 0;
315}
316
317static inline int clk_set_parent(struct clk *clk, struct clk *parent)
318{
319 return 0;
320}
321
322static inline struct clk *clk_get_parent(struct clk *clk)
323{
324 return NULL;
325}
326
327#endif
328
329/* clk_prepare_enable helps cases using clk_enable in non-atomic context. */
330static inline int clk_prepare_enable(struct clk *clk)
331{
332 int ret;
333
334 ret = clk_prepare(clk);
335 if (ret)
336 return ret;
337 ret = clk_enable(clk);
338 if (ret)
339 clk_unprepare(clk);
340
341 return ret;
342}
343
344/* clk_disable_unprepare helps cases using clk_disable in non-atomic context. */
345static inline void clk_disable_unprepare(struct clk *clk)
346{
347 clk_disable(clk);
348 clk_unprepare(clk);
349}
350
301/** 351/**
302 * clk_add_alias - add a new clock alias 352 * clk_add_alias - add a new clock alias
303 * @alias: name for clock alias 353 * @alias: name for clock alias
diff --git a/include/linux/compat.h b/include/linux/compat.h
index 4e890394ef99..09b28b7369d7 100644
--- a/include/linux/compat.h
+++ b/include/linux/compat.h
@@ -265,9 +265,9 @@ long compat_sys_shmat(int first, int second, compat_uptr_t third, int version,
265#else 265#else
266long compat_sys_semctl(int semid, int semnum, int cmd, int arg); 266long compat_sys_semctl(int semid, int semnum, int cmd, int arg);
267long compat_sys_msgsnd(int msqid, struct compat_msgbuf __user *msgp, 267long compat_sys_msgsnd(int msqid, struct compat_msgbuf __user *msgp,
268 size_t msgsz, int msgflg); 268 compat_ssize_t msgsz, int msgflg);
269long compat_sys_msgrcv(int msqid, struct compat_msgbuf __user *msgp, 269long compat_sys_msgrcv(int msqid, struct compat_msgbuf __user *msgp,
270 size_t msgsz, long msgtyp, int msgflg); 270 compat_ssize_t msgsz, long msgtyp, int msgflg);
271long compat_sys_shmat(int shmid, compat_uptr_t shmaddr, int shmflg); 271long compat_sys_shmat(int shmid, compat_uptr_t shmaddr, int shmflg);
272#endif 272#endif
273long compat_sys_msgctl(int first, int second, void __user *uptr); 273long compat_sys_msgctl(int first, int second, void __user *uptr);
diff --git a/include/linux/kern_levels.h b/include/linux/kern_levels.h
new file mode 100644
index 000000000000..866caaa9e2bb
--- /dev/null
+++ b/include/linux/kern_levels.h
@@ -0,0 +1,25 @@
1#ifndef __KERN_LEVELS_H__
2#define __KERN_LEVELS_H__
3
4#define KERN_SOH "\001" /* ASCII Start Of Header */
5#define KERN_SOH_ASCII '\001'
6
7#define KERN_EMERG KERN_SOH "0" /* system is unusable */
8#define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */
9#define KERN_CRIT KERN_SOH "2" /* critical conditions */
10#define KERN_ERR KERN_SOH "3" /* error conditions */
11#define KERN_WARNING KERN_SOH "4" /* warning conditions */
12#define KERN_NOTICE KERN_SOH "5" /* normal but significant condition */
13#define KERN_INFO KERN_SOH "6" /* informational */
14#define KERN_DEBUG KERN_SOH "7" /* debug-level messages */
15
16#define KERN_DEFAULT KERN_SOH "d" /* the default kernel loglevel */
17
18/*
19 * Annotation for a "continued" line of log printout (only done after a
20 * line that had no enclosing \n). Only to be used by core/arch code
21 * during early bootup (a continued line is not SMP-safe otherwise).
22 */
23#define KERN_CONT ""
24
25#endif
diff --git a/include/linux/nilfs2_fs.h b/include/linux/nilfs2_fs.h
index 89bd4a4dcfb4..98755767c7b0 100644
--- a/include/linux/nilfs2_fs.h
+++ b/include/linux/nilfs2_fs.h
@@ -293,7 +293,7 @@ struct nilfs_dir_entry {
293 __le64 inode; /* Inode number */ 293 __le64 inode; /* Inode number */
294 __le16 rec_len; /* Directory entry length */ 294 __le16 rec_len; /* Directory entry length */
295 __u8 name_len; /* Name length */ 295 __u8 name_len; /* Name length */
296 __u8 file_type; 296 __u8 file_type; /* Dir entry type (file, dir, etc) */
297 char name[NILFS_NAME_LEN]; /* File name */ 297 char name[NILFS_NAME_LEN]; /* File name */
298 char pad; 298 char pad;
299}; 299};
@@ -395,7 +395,7 @@ union nilfs_binfo {
395}; 395};
396 396
397/** 397/**
398 * struct nilfs_segment_summary - segment summary 398 * struct nilfs_segment_summary - segment summary header
399 * @ss_datasum: checksum of data 399 * @ss_datasum: checksum of data
400 * @ss_sumsum: checksum of segment summary 400 * @ss_sumsum: checksum of segment summary
401 * @ss_magic: magic number 401 * @ss_magic: magic number
@@ -683,9 +683,9 @@ struct nilfs_sufile_header {
683 683
684/** 684/**
685 * nilfs_suinfo - segment usage information 685 * nilfs_suinfo - segment usage information
686 * @sui_lastmod: 686 * @sui_lastmod: timestamp of last modification
687 * @sui_nblocks: 687 * @sui_nblocks: number of written blocks in segment
688 * @sui_flags: 688 * @sui_flags: segment usage flags
689 */ 689 */
690struct nilfs_suinfo { 690struct nilfs_suinfo {
691 __u64 sui_lastmod; 691 __u64 sui_lastmod;
@@ -716,9 +716,10 @@ enum {
716}; 716};
717 717
718/** 718/**
719 * struct nilfs_cpmode - 719 * struct nilfs_cpmode - change checkpoint mode structure
720 * @cc_cno: 720 * @cm_cno: checkpoint number
721 * @cc_mode: 721 * @cm_mode: mode of checkpoint
722 * @cm_pad: padding
722 */ 723 */
723struct nilfs_cpmode { 724struct nilfs_cpmode {
724 __u64 cm_cno; 725 __u64 cm_cno;
@@ -728,11 +729,11 @@ struct nilfs_cpmode {
728 729
729/** 730/**
730 * struct nilfs_argv - argument vector 731 * struct nilfs_argv - argument vector
731 * @v_base: 732 * @v_base: pointer on data array from userspace
732 * @v_nmembs: 733 * @v_nmembs: number of members in data array
733 * @v_size: 734 * @v_size: size of data array in bytes
734 * @v_flags: 735 * @v_flags: flags
735 * @v_index: 736 * @v_index: start number of target data items
736 */ 737 */
737struct nilfs_argv { 738struct nilfs_argv {
738 __u64 v_base; 739 __u64 v_base;
@@ -743,9 +744,9 @@ struct nilfs_argv {
743}; 744};
744 745
745/** 746/**
746 * struct nilfs_period - 747 * struct nilfs_period - period of checkpoint numbers
747 * @p_start: 748 * @p_start: start checkpoint number (inclusive)
748 * @p_end: 749 * @p_end: end checkpoint number (exclusive)
749 */ 750 */
750struct nilfs_period { 751struct nilfs_period {
751 __u64 p_start; 752 __u64 p_start;
@@ -753,7 +754,7 @@ struct nilfs_period {
753}; 754};
754 755
755/** 756/**
756 * struct nilfs_cpstat - 757 * struct nilfs_cpstat - checkpoint statistics
757 * @cs_cno: checkpoint number 758 * @cs_cno: checkpoint number
758 * @cs_ncps: number of checkpoints 759 * @cs_ncps: number of checkpoints
759 * @cs_nsss: number of snapshots 760 * @cs_nsss: number of snapshots
@@ -765,7 +766,7 @@ struct nilfs_cpstat {
765}; 766};
766 767
767/** 768/**
768 * struct nilfs_sustat - 769 * struct nilfs_sustat - segment usage statistics
769 * @ss_nsegs: number of segments 770 * @ss_nsegs: number of segments
770 * @ss_ncleansegs: number of clean segments 771 * @ss_ncleansegs: number of clean segments
771 * @ss_ndirtysegs: number of dirty segments 772 * @ss_ndirtysegs: number of dirty segments
@@ -784,10 +785,10 @@ struct nilfs_sustat {
784 785
785/** 786/**
786 * struct nilfs_vinfo - virtual block number information 787 * struct nilfs_vinfo - virtual block number information
787 * @vi_vblocknr: 788 * @vi_vblocknr: virtual block number
788 * @vi_start: 789 * @vi_start: start checkpoint number (inclusive)
789 * @vi_end: 790 * @vi_end: end checkpoint number (exclusive)
790 * @vi_blocknr: 791 * @vi_blocknr: disk block number
791 */ 792 */
792struct nilfs_vinfo { 793struct nilfs_vinfo {
793 __u64 vi_vblocknr; 794 __u64 vi_vblocknr;
@@ -797,7 +798,15 @@ struct nilfs_vinfo {
797}; 798};
798 799
799/** 800/**
800 * struct nilfs_vdesc - 801 * struct nilfs_vdesc - descriptor of virtual block number
802 * @vd_ino: inode number
803 * @vd_cno: checkpoint number
804 * @vd_vblocknr: virtual block number
805 * @vd_period: period of checkpoint numbers
806 * @vd_blocknr: disk block number
807 * @vd_offset: logical block offset inside a file
808 * @vd_flags: flags (data or node block)
809 * @vd_pad: padding
801 */ 810 */
802struct nilfs_vdesc { 811struct nilfs_vdesc {
803 __u64 vd_ino; 812 __u64 vd_ino;
@@ -811,7 +820,13 @@ struct nilfs_vdesc {
811}; 820};
812 821
813/** 822/**
814 * struct nilfs_bdesc - 823 * struct nilfs_bdesc - descriptor of disk block number
824 * @bd_ino: inode number
825 * @bd_oblocknr: disk block address (for skipping dead blocks)
826 * @bd_blocknr: disk block address
827 * @bd_offset: logical block offset inside a file
828 * @bd_level: level in the b-tree organization
829 * @bd_pad: padding
815 */ 830 */
816struct nilfs_bdesc { 831struct nilfs_bdesc {
817 __u64 bd_ino; 832 __u64 bd_ino;
diff --git a/include/linux/lp855x.h b/include/linux/platform_data/lp855x.h
index 781a490a451b..cc76f1f18f18 100644
--- a/include/linux/lp855x.h
+++ b/include/linux/platform_data/lp855x.h
@@ -47,12 +47,6 @@
47 (LP8556_I2C_ONLY << BRT_MODE_SHFT)) 47 (LP8556_I2C_ONLY << BRT_MODE_SHFT))
48#define LP8556_COMB2_CONFIG (LP8556_COMBINED2 << BRT_MODE_SHFT) 48#define LP8556_COMB2_CONFIG (LP8556_COMBINED2 << BRT_MODE_SHFT)
49 49
50/* ROM area boundary */
51#define EEPROM_START (0xA0)
52#define EEPROM_END (0xA7)
53#define EPROM_START (0xA0)
54#define EPROM_END (0xAF)
55
56enum lp855x_chip_id { 50enum lp855x_chip_id {
57 LP8550, 51 LP8550,
58 LP8551, 52 LP8551,
diff --git a/include/linux/platform_data/mv_usb.h b/include/linux/platform_data/mv_usb.h
index d94804aca764..944b01dd103e 100644
--- a/include/linux/platform_data/mv_usb.h
+++ b/include/linux/platform_data/mv_usb.h
@@ -52,13 +52,4 @@ struct mv_usb_platform_data {
52 int (*set_vbus)(unsigned int vbus); 52 int (*set_vbus)(unsigned int vbus);
53 int (*private_init)(void __iomem *opregs, void __iomem *phyregs); 53 int (*private_init)(void __iomem *opregs, void __iomem *phyregs);
54}; 54};
55
56#ifndef CONFIG_HAVE_CLK
57/* Dummy stub for clk framework */
58#define clk_get(dev, id) NULL
59#define clk_put(clock) do {} while (0)
60#define clk_enable(clock) do {} while (0)
61#define clk_disable(clock) do {} while (0)
62#endif
63
64#endif 55#endif
diff --git a/include/linux/printk.h b/include/linux/printk.h
index 1bec2f7a2d42..9afc01e5a0a6 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -2,27 +2,34 @@
2#define __KERNEL_PRINTK__ 2#define __KERNEL_PRINTK__
3 3
4#include <linux/init.h> 4#include <linux/init.h>
5#include <linux/kern_levels.h>
5 6
6extern const char linux_banner[]; 7extern const char linux_banner[];
7extern const char linux_proc_banner[]; 8extern const char linux_proc_banner[];
8 9
9#define KERN_EMERG "<0>" /* system is unusable */ 10static inline int printk_get_level(const char *buffer)
10#define KERN_ALERT "<1>" /* action must be taken immediately */ 11{
11#define KERN_CRIT "<2>" /* critical conditions */ 12 if (buffer[0] == KERN_SOH_ASCII && buffer[1]) {
12#define KERN_ERR "<3>" /* error conditions */ 13 switch (buffer[1]) {
13#define KERN_WARNING "<4>" /* warning conditions */ 14 case '0' ... '7':
14#define KERN_NOTICE "<5>" /* normal but significant condition */ 15 case 'd': /* KERN_DEFAULT */
15#define KERN_INFO "<6>" /* informational */ 16 return buffer[1];
16#define KERN_DEBUG "<7>" /* debug-level messages */ 17 }
17 18 }
18/* Use the default kernel loglevel */ 19 return 0;
19#define KERN_DEFAULT "<d>" 20}
20/* 21
21 * Annotation for a "continued" line of log printout (only done after a 22static inline const char *printk_skip_level(const char *buffer)
22 * line that had no enclosing \n). Only to be used by core/arch code 23{
23 * during early bootup (a continued line is not SMP-safe otherwise). 24 if (printk_get_level(buffer)) {
24 */ 25 switch (buffer[1]) {
25#define KERN_CONT "<c>" 26 case '0' ... '7':
27 case 'd': /* KERN_DEFAULT */
28 return buffer + 2;
29 }
30 }
31 return buffer;
32}
26 33
27extern int console_printk[]; 34extern int console_printk[];
28 35
diff --git a/include/linux/sched.h b/include/linux/sched.h
index a721cef7e2d4..68dcffaa62a0 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -334,6 +334,14 @@ static inline void lockup_detector_init(void)
334} 334}
335#endif 335#endif
336 336
337#if defined(CONFIG_LOCKUP_DETECTOR) && defined(CONFIG_SUSPEND)
338void lockup_detector_bootcpu_resume(void);
339#else
340static inline void lockup_detector_bootcpu_resume(void)
341{
342}
343#endif
344
337#ifdef CONFIG_DETECT_HUNG_TASK 345#ifdef CONFIG_DETECT_HUNG_TASK
338extern unsigned int sysctl_hung_task_panic; 346extern unsigned int sysctl_hung_task_panic;
339extern unsigned long sysctl_hung_task_check_count; 347extern unsigned long sysctl_hung_task_check_count;
@@ -406,6 +414,11 @@ static inline void arch_pick_mmap_layout(struct mm_struct *mm) {}
406extern void set_dumpable(struct mm_struct *mm, int value); 414extern void set_dumpable(struct mm_struct *mm, int value);
407extern int get_dumpable(struct mm_struct *mm); 415extern int get_dumpable(struct mm_struct *mm);
408 416
417/* get/set_dumpable() values */
418#define SUID_DUMPABLE_DISABLED 0
419#define SUID_DUMPABLE_ENABLED 1
420#define SUID_DUMPABLE_SAFE 2
421
409/* mm flags */ 422/* mm flags */
410/* dumpable bits */ 423/* dumpable bits */
411#define MMF_DUMPABLE 0 /* core dump is permitted */ 424#define MMF_DUMPABLE 0 /* core dump is permitted */
diff --git a/include/linux/shm.h b/include/linux/shm.h
index 92808b86703b..edd086883ccb 100644
--- a/include/linux/shm.h
+++ b/include/linux/shm.h
@@ -107,12 +107,14 @@ struct shmid_kernel /* private to the kernel */
107#define SHM_NORESERVE 010000 /* don't check for reservations */ 107#define SHM_NORESERVE 010000 /* don't check for reservations */
108 108
109#ifdef CONFIG_SYSVIPC 109#ifdef CONFIG_SYSVIPC
110long do_shmat(int shmid, char __user *shmaddr, int shmflg, unsigned long *addr); 110long do_shmat(int shmid, char __user *shmaddr, int shmflg, unsigned long *addr,
111 unsigned long shmlba);
111extern int is_file_shm_hugepages(struct file *file); 112extern int is_file_shm_hugepages(struct file *file);
112extern void exit_shm(struct task_struct *task); 113extern void exit_shm(struct task_struct *task);
113#else 114#else
114static inline long do_shmat(int shmid, char __user *shmaddr, 115static inline long do_shmat(int shmid, char __user *shmaddr,
115 int shmflg, unsigned long *addr) 116 int shmflg, unsigned long *addr,
117 unsigned long shmlba)
116{ 118{
117 return -ENOSYS; 119 return -ENOSYS;
118} 120}
diff --git a/include/linux/string.h b/include/linux/string.h
index e033564f10ba..ffe0442e18d2 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -145,4 +145,7 @@ static inline bool strstarts(const char *str, const char *prefix)
145 return strncmp(str, prefix, strlen(prefix)) == 0; 145 return strncmp(str, prefix, strlen(prefix)) == 0;
146} 146}
147#endif 147#endif
148
149extern size_t memweight(const void *ptr, size_t bytes);
150
148#endif /* _LINUX_STRING_H_ */ 151#endif /* _LINUX_STRING_H_ */
diff --git a/ipc/compat.c b/ipc/compat.c
index a6df704f521e..ad9518eb26e0 100644
--- a/ipc/compat.c
+++ b/ipc/compat.c
@@ -118,7 +118,7 @@ extern int sem_ctls[];
118 118
119static inline int compat_ipc_parse_version(int *cmd) 119static inline int compat_ipc_parse_version(int *cmd)
120{ 120{
121#ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC 121#ifdef CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION
122 int version = *cmd & IPC_64; 122 int version = *cmd & IPC_64;
123 123
124 /* this is tricky: architectures that have support for the old 124 /* this is tricky: architectures that have support for the old
@@ -373,21 +373,21 @@ long compat_sys_semctl(int semid, int semnum, int cmd, int arg)
373} 373}
374 374
375long compat_sys_msgsnd(int msqid, struct compat_msgbuf __user *msgp, 375long compat_sys_msgsnd(int msqid, struct compat_msgbuf __user *msgp,
376 size_t msgsz, int msgflg) 376 compat_ssize_t msgsz, int msgflg)
377{ 377{
378 compat_long_t mtype; 378 compat_long_t mtype;
379 379
380 if (get_user(mtype, &msgp->mtype)) 380 if (get_user(mtype, &msgp->mtype))
381 return -EFAULT; 381 return -EFAULT;
382 return do_msgsnd(msqid, mtype, msgp->mtext, msgsz, msgflg); 382 return do_msgsnd(msqid, mtype, msgp->mtext, (ssize_t)msgsz, msgflg);
383} 383}
384 384
385long compat_sys_msgrcv(int msqid, struct compat_msgbuf __user *msgp, 385long compat_sys_msgrcv(int msqid, struct compat_msgbuf __user *msgp,
386 size_t msgsz, long msgtyp, int msgflg) 386 compat_ssize_t msgsz, long msgtyp, int msgflg)
387{ 387{
388 long err, mtype; 388 long err, mtype;
389 389
390 err = do_msgrcv(msqid, &mtype, msgp->mtext, msgsz, msgtyp, msgflg); 390 err = do_msgrcv(msqid, &mtype, msgp->mtext, (ssize_t)msgsz, msgtyp, msgflg);
391 if (err < 0) 391 if (err < 0)
392 goto out; 392 goto out;
393 393
@@ -514,6 +514,10 @@ long compat_sys_msgctl(int first, int second, void __user *uptr)
514 return err; 514 return err;
515} 515}
516 516
517#ifndef COMPAT_SHMLBA
518#define COMPAT_SHMLBA SHMLBA
519#endif
520
517#ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC 521#ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC
518long compat_sys_shmat(int first, int second, compat_uptr_t third, int version, 522long compat_sys_shmat(int first, int second, compat_uptr_t third, int version,
519 void __user *uptr) 523 void __user *uptr)
@@ -524,7 +528,7 @@ long compat_sys_shmat(int first, int second, compat_uptr_t third, int version,
524 528
525 if (version == 1) 529 if (version == 1)
526 return -EINVAL; 530 return -EINVAL;
527 err = do_shmat(first, uptr, second, &raddr); 531 err = do_shmat(first, uptr, second, &raddr, COMPAT_SHMLBA);
528 if (err < 0) 532 if (err < 0)
529 return err; 533 return err;
530 uaddr = compat_ptr(third); 534 uaddr = compat_ptr(third);
@@ -536,7 +540,7 @@ long compat_sys_shmat(int shmid, compat_uptr_t shmaddr, int shmflg)
536 unsigned long ret; 540 unsigned long ret;
537 long err; 541 long err;
538 542
539 err = do_shmat(shmid, compat_ptr(shmaddr), shmflg, &ret); 543 err = do_shmat(shmid, compat_ptr(shmaddr), shmflg, &ret, COMPAT_SHMLBA);
540 if (err) 544 if (err)
541 return err; 545 return err;
542 force_successful_syscall_return(); 546 force_successful_syscall_return();
diff --git a/ipc/shm.c b/ipc/shm.c
index 41c1285d697a..00faa05cf72a 100644
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -953,7 +953,8 @@ out:
953 * "raddr" thing points to kernel space, and there has to be a wrapper around 953 * "raddr" thing points to kernel space, and there has to be a wrapper around
954 * this. 954 * this.
955 */ 955 */
956long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr) 956long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr,
957 unsigned long shmlba)
957{ 958{
958 struct shmid_kernel *shp; 959 struct shmid_kernel *shp;
959 unsigned long addr; 960 unsigned long addr;
@@ -973,9 +974,9 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr)
973 if (shmid < 0) 974 if (shmid < 0)
974 goto out; 975 goto out;
975 else if ((addr = (ulong)shmaddr)) { 976 else if ((addr = (ulong)shmaddr)) {
976 if (addr & (SHMLBA-1)) { 977 if (addr & (shmlba - 1)) {
977 if (shmflg & SHM_RND) 978 if (shmflg & SHM_RND)
978 addr &= ~(SHMLBA-1); /* round down */ 979 addr &= ~(shmlba - 1); /* round down */
979 else 980 else
980#ifndef __ARCH_FORCE_SHMLBA 981#ifndef __ARCH_FORCE_SHMLBA
981 if (addr & ~PAGE_MASK) 982 if (addr & ~PAGE_MASK)
@@ -1107,7 +1108,7 @@ SYSCALL_DEFINE3(shmat, int, shmid, char __user *, shmaddr, int, shmflg)
1107 unsigned long ret; 1108 unsigned long ret;
1108 long err; 1109 long err;
1109 1110
1110 err = do_shmat(shmid, shmaddr, shmflg, &ret); 1111 err = do_shmat(shmid, shmaddr, shmflg, &ret, SHMLBA);
1111 if (err) 1112 if (err)
1112 return err; 1113 return err;
1113 force_successful_syscall_return(); 1114 force_successful_syscall_return();
diff --git a/ipc/syscall.c b/ipc/syscall.c
index 1d6f53f6b562..0d1e32ce048e 100644
--- a/ipc/syscall.c
+++ b/ipc/syscall.c
@@ -73,7 +73,7 @@ SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second,
73 default: { 73 default: {
74 unsigned long raddr; 74 unsigned long raddr;
75 ret = do_shmat(first, (char __user *)ptr, 75 ret = do_shmat(first, (char __user *)ptr,
76 second, &raddr); 76 second, &raddr, SHMLBA);
77 if (ret) 77 if (ret)
78 return ret; 78 return ret;
79 return put_user(raddr, (unsigned long __user *) third); 79 return put_user(raddr, (unsigned long __user *) third);
diff --git a/ipc/util.c b/ipc/util.c
index 75261a31d48d..eb07fd356f27 100644
--- a/ipc/util.c
+++ b/ipc/util.c
@@ -804,7 +804,7 @@ out_up:
804 return ERR_PTR(err); 804 return ERR_PTR(err);
805} 805}
806 806
807#ifdef __ARCH_WANT_IPC_PARSE_VERSION 807#ifdef CONFIG_ARCH_WANT_IPC_PARSE_VERSION
808 808
809 809
810/** 810/**
@@ -826,7 +826,7 @@ int ipc_parse_version (int *cmd)
826 } 826 }
827} 827}
828 828
829#endif /* __ARCH_WANT_IPC_PARSE_VERSION */ 829#endif /* CONFIG_ARCH_WANT_IPC_PARSE_VERSION */
830 830
831#ifdef CONFIG_PROC_FS 831#ifdef CONFIG_PROC_FS
832struct ipc_proc_iter { 832struct ipc_proc_iter {
diff --git a/ipc/util.h b/ipc/util.h
index 6f5c20bedaab..850ef3e962cb 100644
--- a/ipc/util.h
+++ b/ipc/util.h
@@ -130,7 +130,7 @@ struct kern_ipc_perm *ipcctl_pre_down(struct ipc_namespace *ns,
130 struct ipc_ids *ids, int id, int cmd, 130 struct ipc_ids *ids, int id, int cmd,
131 struct ipc64_perm *perm, int extra_perm); 131 struct ipc64_perm *perm, int extra_perm);
132 132
133#ifndef __ARCH_WANT_IPC_PARSE_VERSION 133#ifndef CONFIG_ARCH_WANT_IPC_PARSE_VERSION
134 /* On IA-64, we always use the "64-bit version" of the IPC structures. */ 134 /* On IA-64, we always use the "64-bit version" of the IPC structures. */
135# define ipc_parse_version(cmd) IPC_64 135# define ipc_parse_version(cmd) IPC_64
136#else 136#else
diff --git a/kernel/fork.c b/kernel/fork.c
index ff1cad3b7bdc..8efac1fe56bc 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -114,6 +114,10 @@ int nr_processes(void)
114 return total; 114 return total;
115} 115}
116 116
117void __weak arch_release_task_struct(struct task_struct *tsk)
118{
119}
120
117#ifndef CONFIG_ARCH_TASK_STRUCT_ALLOCATOR 121#ifndef CONFIG_ARCH_TASK_STRUCT_ALLOCATOR
118static struct kmem_cache *task_struct_cachep; 122static struct kmem_cache *task_struct_cachep;
119 123
@@ -122,17 +126,17 @@ static inline struct task_struct *alloc_task_struct_node(int node)
122 return kmem_cache_alloc_node(task_struct_cachep, GFP_KERNEL, node); 126 return kmem_cache_alloc_node(task_struct_cachep, GFP_KERNEL, node);
123} 127}
124 128
125void __weak arch_release_task_struct(struct task_struct *tsk) { }
126
127static inline void free_task_struct(struct task_struct *tsk) 129static inline void free_task_struct(struct task_struct *tsk)
128{ 130{
129 arch_release_task_struct(tsk);
130 kmem_cache_free(task_struct_cachep, tsk); 131 kmem_cache_free(task_struct_cachep, tsk);
131} 132}
132#endif 133#endif
133 134
135void __weak arch_release_thread_info(struct thread_info *ti)
136{
137}
138
134#ifndef CONFIG_ARCH_THREAD_INFO_ALLOCATOR 139#ifndef CONFIG_ARCH_THREAD_INFO_ALLOCATOR
135void __weak arch_release_thread_info(struct thread_info *ti) { }
136 140
137/* 141/*
138 * Allocate pages if THREAD_SIZE is >= PAGE_SIZE, otherwise use a 142 * Allocate pages if THREAD_SIZE is >= PAGE_SIZE, otherwise use a
@@ -150,7 +154,6 @@ static struct thread_info *alloc_thread_info_node(struct task_struct *tsk,
150 154
151static inline void free_thread_info(struct thread_info *ti) 155static inline void free_thread_info(struct thread_info *ti)
152{ 156{
153 arch_release_thread_info(ti);
154 free_pages((unsigned long)ti, THREAD_SIZE_ORDER); 157 free_pages((unsigned long)ti, THREAD_SIZE_ORDER);
155} 158}
156# else 159# else
@@ -164,7 +167,6 @@ static struct thread_info *alloc_thread_info_node(struct task_struct *tsk,
164 167
165static void free_thread_info(struct thread_info *ti) 168static void free_thread_info(struct thread_info *ti)
166{ 169{
167 arch_release_thread_info(ti);
168 kmem_cache_free(thread_info_cache, ti); 170 kmem_cache_free(thread_info_cache, ti);
169} 171}
170 172
@@ -205,10 +207,12 @@ static void account_kernel_stack(struct thread_info *ti, int account)
205void free_task(struct task_struct *tsk) 207void free_task(struct task_struct *tsk)
206{ 208{
207 account_kernel_stack(tsk->stack, -1); 209 account_kernel_stack(tsk->stack, -1);
210 arch_release_thread_info(tsk->stack);
208 free_thread_info(tsk->stack); 211 free_thread_info(tsk->stack);
209 rt_mutex_debug_task_free(tsk); 212 rt_mutex_debug_task_free(tsk);
210 ftrace_graph_exit_task(tsk); 213 ftrace_graph_exit_task(tsk);
211 put_seccomp_filter(tsk); 214 put_seccomp_filter(tsk);
215 arch_release_task_struct(tsk);
212 free_task_struct(tsk); 216 free_task_struct(tsk);
213} 217}
214EXPORT_SYMBOL(free_task); 218EXPORT_SYMBOL(free_task);
@@ -298,23 +302,16 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
298 return NULL; 302 return NULL;
299 303
300 ti = alloc_thread_info_node(tsk, node); 304 ti = alloc_thread_info_node(tsk, node);
301 if (!ti) { 305 if (!ti)
302 free_task_struct(tsk); 306 goto free_tsk;
303 return NULL;
304 }
305 307
306 err = arch_dup_task_struct(tsk, orig); 308 err = arch_dup_task_struct(tsk, orig);
309 if (err)
310 goto free_ti;
307 311
308 /*
309 * We defer looking at err, because we will need this setup
310 * for the clean up path to work correctly.
311 */
312 tsk->stack = ti; 312 tsk->stack = ti;
313 setup_thread_stack(tsk, orig);
314
315 if (err)
316 goto out;
317 313
314 setup_thread_stack(tsk, orig);
318 clear_user_return_notifier(tsk); 315 clear_user_return_notifier(tsk);
319 clear_tsk_need_resched(tsk); 316 clear_tsk_need_resched(tsk);
320 stackend = end_of_stack(tsk); 317 stackend = end_of_stack(tsk);
@@ -338,8 +335,9 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
338 335
339 return tsk; 336 return tsk;
340 337
341out: 338free_ti:
342 free_thread_info(ti); 339 free_thread_info(ti);
340free_tsk:
343 free_task_struct(tsk); 341 free_task_struct(tsk);
344 return NULL; 342 return NULL;
345} 343}
@@ -391,8 +389,8 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
391 } 389 }
392 charge = 0; 390 charge = 0;
393 if (mpnt->vm_flags & VM_ACCOUNT) { 391 if (mpnt->vm_flags & VM_ACCOUNT) {
394 unsigned long len; 392 unsigned long len = vma_pages(mpnt);
395 len = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT; 393
396 if (security_vm_enough_memory_mm(oldmm, len)) /* sic */ 394 if (security_vm_enough_memory_mm(oldmm, len)) /* sic */
397 goto fail_nomem; 395 goto fail_nomem;
398 charge = len; 396 charge = len;
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 4e2e472f6aeb..0668d58d6413 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -1424,7 +1424,7 @@ static void update_vmcoreinfo_note(void)
1424 1424
1425void crash_save_vmcoreinfo(void) 1425void crash_save_vmcoreinfo(void)
1426{ 1426{
1427 vmcoreinfo_append_str("CRASHTIME=%ld", get_seconds()); 1427 vmcoreinfo_append_str("CRASHTIME=%ld\n", get_seconds());
1428 update_vmcoreinfo_note(); 1428 update_vmcoreinfo_note();
1429} 1429}
1430 1430
diff --git a/kernel/kmod.c b/kernel/kmod.c
index ff2c7cb86d77..6f99aead66c6 100644
--- a/kernel/kmod.c
+++ b/kernel/kmod.c
@@ -45,6 +45,13 @@ extern int max_threads;
45 45
46static struct workqueue_struct *khelper_wq; 46static struct workqueue_struct *khelper_wq;
47 47
48/*
49 * kmod_thread_locker is used for deadlock avoidance. There is no explicit
50 * locking to protect this global - it is private to the singleton khelper
51 * thread and should only ever be modified by that thread.
52 */
53static const struct task_struct *kmod_thread_locker;
54
48#define CAP_BSET (void *)1 55#define CAP_BSET (void *)1
49#define CAP_PI (void *)2 56#define CAP_PI (void *)2
50 57
@@ -221,6 +228,13 @@ fail:
221 return 0; 228 return 0;
222} 229}
223 230
231static int call_helper(void *data)
232{
233 /* Worker thread started blocking khelper thread. */
234 kmod_thread_locker = current;
235 return ____call_usermodehelper(data);
236}
237
224static void call_usermodehelper_freeinfo(struct subprocess_info *info) 238static void call_usermodehelper_freeinfo(struct subprocess_info *info)
225{ 239{
226 if (info->cleanup) 240 if (info->cleanup)
@@ -295,9 +309,12 @@ static void __call_usermodehelper(struct work_struct *work)
295 if (wait == UMH_WAIT_PROC) 309 if (wait == UMH_WAIT_PROC)
296 pid = kernel_thread(wait_for_helper, sub_info, 310 pid = kernel_thread(wait_for_helper, sub_info,
297 CLONE_FS | CLONE_FILES | SIGCHLD); 311 CLONE_FS | CLONE_FILES | SIGCHLD);
298 else 312 else {
299 pid = kernel_thread(____call_usermodehelper, sub_info, 313 pid = kernel_thread(call_helper, sub_info,
300 CLONE_VFORK | SIGCHLD); 314 CLONE_VFORK | SIGCHLD);
315 /* Worker thread stopped blocking khelper thread. */
316 kmod_thread_locker = NULL;
317 }
301 318
302 switch (wait) { 319 switch (wait) {
303 case UMH_NO_WAIT: 320 case UMH_NO_WAIT:
@@ -548,6 +565,16 @@ int call_usermodehelper_exec(struct subprocess_info *sub_info, int wait)
548 retval = -EBUSY; 565 retval = -EBUSY;
549 goto out; 566 goto out;
550 } 567 }
568 /*
569 * Worker thread must not wait for khelper thread at below
570 * wait_for_completion() if the thread was created with CLONE_VFORK
571 * flag, for khelper thread is already waiting for the thread at
572 * wait_for_completion() in do_fork().
573 */
574 if (wait != UMH_NO_WAIT && current == kmod_thread_locker) {
575 retval = -EBUSY;
576 goto out;
577 }
551 578
552 sub_info->complete = &done; 579 sub_info->complete = &done;
553 sub_info->wait = wait; 580 sub_info->wait = wait;
@@ -577,6 +604,12 @@ unlock:
577 return retval; 604 return retval;
578} 605}
579 606
607/*
608 * call_usermodehelper_fns() will not run the caller-provided cleanup function
609 * if a memory allocation failure is experienced. So the caller might need to
610 * check the call_usermodehelper_fns() return value: if it is -ENOMEM, perform
611 * the necessaary cleanup within the caller.
612 */
580int call_usermodehelper_fns( 613int call_usermodehelper_fns(
581 char *path, char **argv, char **envp, int wait, 614 char *path, char **argv, char **envp, int wait,
582 int (*init)(struct subprocess_info *info, struct cred *new), 615 int (*init)(struct subprocess_info *info, struct cred *new),
diff --git a/kernel/panic.c b/kernel/panic.c
index d2a5f4ecc6dd..e1b2822fff97 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -75,6 +75,14 @@ void panic(const char *fmt, ...)
75 int state = 0; 75 int state = 0;
76 76
77 /* 77 /*
78 * Disable local interrupts. This will prevent panic_smp_self_stop
79 * from deadlocking the first cpu that invokes the panic, since
80 * there is nothing to prevent an interrupt handler (that runs
81 * after the panic_lock is acquired) from invoking panic again.
82 */
83 local_irq_disable();
84
85 /*
78 * It's possible to come here directly from a panic-assertion and 86 * It's possible to come here directly from a panic-assertion and
79 * not have preempt disabled. Some functions called from here want 87 * not have preempt disabled. Some functions called from here want
80 * preempt to be disabled. No point enabling it later though... 88 * preempt to be disabled. No point enabling it later though...
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index c8b7446b27df..1da39ea248fd 100644
--- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c
@@ -178,6 +178,9 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
178 arch_suspend_enable_irqs(); 178 arch_suspend_enable_irqs();
179 BUG_ON(irqs_disabled()); 179 BUG_ON(irqs_disabled());
180 180
181 /* Kick the lockup detector */
182 lockup_detector_bootcpu_resume();
183
181 Enable_cpus: 184 Enable_cpus:
182 enable_nonboot_cpus(); 185 enable_nonboot_cpus();
183 186
diff --git a/kernel/printk.c b/kernel/printk.c
index 50c96b5651b6..6a76ab9d4476 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -389,8 +389,10 @@ static ssize_t devkmsg_writev(struct kiocb *iocb, const struct iovec *iv,
389 389
390 line = buf; 390 line = buf;
391 for (i = 0; i < count; i++) { 391 for (i = 0; i < count; i++) {
392 if (copy_from_user(line, iv[i].iov_base, iv[i].iov_len)) 392 if (copy_from_user(line, iv[i].iov_base, iv[i].iov_len)) {
393 ret = -EFAULT;
393 goto out; 394 goto out;
395 }
394 line += iv[i].iov_len; 396 line += iv[i].iov_len;
395 } 397 }
396 398
@@ -1540,17 +1542,23 @@ asmlinkage int vprintk_emit(int facility, int level,
1540 lflags |= LOG_NEWLINE; 1542 lflags |= LOG_NEWLINE;
1541 } 1543 }
1542 1544
1543 /* strip syslog prefix and extract log level or control flags */ 1545 /* strip kernel syslog prefix and extract log level or control flags */
1544 if (text[0] == '<' && text[1] && text[2] == '>') { 1546 if (facility == 0) {
1545 switch (text[1]) { 1547 int kern_level = printk_get_level(text);
1546 case '0' ... '7': 1548
1547 if (level == -1) 1549 if (kern_level) {
1548 level = text[1] - '0'; 1550 const char *end_of_header = printk_skip_level(text);
1549 case 'd': /* KERN_DEFAULT */ 1551 switch (kern_level) {
1550 lflags |= LOG_PREFIX; 1552 case '0' ... '7':
1551 case 'c': /* KERN_CONT */ 1553 if (level == -1)
1552 text += 3; 1554 level = kern_level - '0';
1553 text_len -= 3; 1555 case 'd': /* KERN_DEFAULT */
1556 lflags |= LOG_PREFIX;
1557 case 'c': /* KERN_CONT */
1558 break;
1559 }
1560 text_len -= end_of_header - text;
1561 text = (char *)end_of_header;
1554 } 1562 }
1555 } 1563 }
1556 1564
diff --git a/kernel/resource.c b/kernel/resource.c
index dc8b47764443..34d45886ee84 100644
--- a/kernel/resource.c
+++ b/kernel/resource.c
@@ -7,6 +7,8 @@
7 * Arbitrary resource management. 7 * Arbitrary resource management.
8 */ 8 */
9 9
10#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
11
10#include <linux/export.h> 12#include <linux/export.h>
11#include <linux/errno.h> 13#include <linux/errno.h>
12#include <linux/ioport.h> 14#include <linux/ioport.h>
@@ -791,8 +793,28 @@ void __init reserve_region_with_split(struct resource *root,
791 resource_size_t start, resource_size_t end, 793 resource_size_t start, resource_size_t end,
792 const char *name) 794 const char *name)
793{ 795{
796 int abort = 0;
797
794 write_lock(&resource_lock); 798 write_lock(&resource_lock);
795 __reserve_region_with_split(root, start, end, name); 799 if (root->start > start || root->end < end) {
800 pr_err("requested range [0x%llx-0x%llx] not in root %pr\n",
801 (unsigned long long)start, (unsigned long long)end,
802 root);
803 if (start > root->end || end < root->start)
804 abort = 1;
805 else {
806 if (end > root->end)
807 end = root->end;
808 if (start < root->start)
809 start = root->start;
810 pr_err("fixing request to [0x%llx-0x%llx]\n",
811 (unsigned long long)start,
812 (unsigned long long)end);
813 }
814 dump_stack();
815 }
816 if (!abort)
817 __reserve_region_with_split(root, start, end, name);
796 write_unlock(&resource_lock); 818 write_unlock(&resource_lock);
797} 819}
798 820
diff --git a/kernel/sys.c b/kernel/sys.c
index 2d39a84cd857..241507f23eca 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -2015,7 +2015,6 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
2015 break; 2015 break;
2016 } 2016 }
2017 me->pdeath_signal = arg2; 2017 me->pdeath_signal = arg2;
2018 error = 0;
2019 break; 2018 break;
2020 case PR_GET_PDEATHSIG: 2019 case PR_GET_PDEATHSIG:
2021 error = put_user(me->pdeath_signal, (int __user *)arg2); 2020 error = put_user(me->pdeath_signal, (int __user *)arg2);
@@ -2029,7 +2028,6 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
2029 break; 2028 break;
2030 } 2029 }
2031 set_dumpable(me->mm, arg2); 2030 set_dumpable(me->mm, arg2);
2032 error = 0;
2033 break; 2031 break;
2034 2032
2035 case PR_SET_UNALIGN: 2033 case PR_SET_UNALIGN:
@@ -2056,10 +2054,7 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
2056 case PR_SET_TIMING: 2054 case PR_SET_TIMING:
2057 if (arg2 != PR_TIMING_STATISTICAL) 2055 if (arg2 != PR_TIMING_STATISTICAL)
2058 error = -EINVAL; 2056 error = -EINVAL;
2059 else
2060 error = 0;
2061 break; 2057 break;
2062
2063 case PR_SET_NAME: 2058 case PR_SET_NAME:
2064 comm[sizeof(me->comm)-1] = 0; 2059 comm[sizeof(me->comm)-1] = 0;
2065 if (strncpy_from_user(comm, (char __user *)arg2, 2060 if (strncpy_from_user(comm, (char __user *)arg2,
@@ -2067,20 +2062,19 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
2067 return -EFAULT; 2062 return -EFAULT;
2068 set_task_comm(me, comm); 2063 set_task_comm(me, comm);
2069 proc_comm_connector(me); 2064 proc_comm_connector(me);
2070 return 0; 2065 break;
2071 case PR_GET_NAME: 2066 case PR_GET_NAME:
2072 get_task_comm(comm, me); 2067 get_task_comm(comm, me);
2073 if (copy_to_user((char __user *)arg2, comm, 2068 if (copy_to_user((char __user *)arg2, comm,
2074 sizeof(comm))) 2069 sizeof(comm)))
2075 return -EFAULT; 2070 return -EFAULT;
2076 return 0; 2071 break;
2077 case PR_GET_ENDIAN: 2072 case PR_GET_ENDIAN:
2078 error = GET_ENDIAN(me, arg2); 2073 error = GET_ENDIAN(me, arg2);
2079 break; 2074 break;
2080 case PR_SET_ENDIAN: 2075 case PR_SET_ENDIAN:
2081 error = SET_ENDIAN(me, arg2); 2076 error = SET_ENDIAN(me, arg2);
2082 break; 2077 break;
2083
2084 case PR_GET_SECCOMP: 2078 case PR_GET_SECCOMP:
2085 error = prctl_get_seccomp(); 2079 error = prctl_get_seccomp();
2086 break; 2080 break;
@@ -2108,7 +2102,6 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
2108 current->default_timer_slack_ns; 2102 current->default_timer_slack_ns;
2109 else 2103 else
2110 current->timer_slack_ns = arg2; 2104 current->timer_slack_ns = arg2;
2111 error = 0;
2112 break; 2105 break;
2113 case PR_MCE_KILL: 2106 case PR_MCE_KILL:
2114 if (arg4 | arg5) 2107 if (arg4 | arg5)
@@ -2134,7 +2127,6 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
2134 default: 2127 default:
2135 return -EINVAL; 2128 return -EINVAL;
2136 } 2129 }
2137 error = 0;
2138 break; 2130 break;
2139 case PR_MCE_KILL_GET: 2131 case PR_MCE_KILL_GET:
2140 if (arg2 | arg3 | arg4 | arg5) 2132 if (arg2 | arg3 | arg4 | arg5)
@@ -2153,7 +2145,6 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
2153 break; 2145 break;
2154 case PR_SET_CHILD_SUBREAPER: 2146 case PR_SET_CHILD_SUBREAPER:
2155 me->signal->is_child_subreaper = !!arg2; 2147 me->signal->is_child_subreaper = !!arg2;
2156 error = 0;
2157 break; 2148 break;
2158 case PR_GET_CHILD_SUBREAPER: 2149 case PR_GET_CHILD_SUBREAPER:
2159 error = put_user(me->signal->is_child_subreaper, 2150 error = put_user(me->signal->is_child_subreaper,
@@ -2195,46 +2186,52 @@ static void argv_cleanup(struct subprocess_info *info)
2195 argv_free(info->argv); 2186 argv_free(info->argv);
2196} 2187}
2197 2188
2198/** 2189static int __orderly_poweroff(void)
2199 * orderly_poweroff - Trigger an orderly system poweroff
2200 * @force: force poweroff if command execution fails
2201 *
2202 * This may be called from any context to trigger a system shutdown.
2203 * If the orderly shutdown fails, it will force an immediate shutdown.
2204 */
2205int orderly_poweroff(bool force)
2206{ 2190{
2207 int argc; 2191 int argc;
2208 char **argv = argv_split(GFP_ATOMIC, poweroff_cmd, &argc); 2192 char **argv;
2209 static char *envp[] = { 2193 static char *envp[] = {
2210 "HOME=/", 2194 "HOME=/",
2211 "PATH=/sbin:/bin:/usr/sbin:/usr/bin", 2195 "PATH=/sbin:/bin:/usr/sbin:/usr/bin",
2212 NULL 2196 NULL
2213 }; 2197 };
2214 int ret = -ENOMEM; 2198 int ret;
2215 2199
2200 argv = argv_split(GFP_ATOMIC, poweroff_cmd, &argc);
2216 if (argv == NULL) { 2201 if (argv == NULL) {
2217 printk(KERN_WARNING "%s failed to allocate memory for \"%s\"\n", 2202 printk(KERN_WARNING "%s failed to allocate memory for \"%s\"\n",
2218 __func__, poweroff_cmd); 2203 __func__, poweroff_cmd);
2219 goto out; 2204 return -ENOMEM;
2220 } 2205 }
2221 2206
2222 ret = call_usermodehelper_fns(argv[0], argv, envp, UMH_NO_WAIT, 2207 ret = call_usermodehelper_fns(argv[0], argv, envp, UMH_NO_WAIT,
2223 NULL, argv_cleanup, NULL); 2208 NULL, argv_cleanup, NULL);
2224out:
2225 if (likely(!ret))
2226 return 0;
2227
2228 if (ret == -ENOMEM) 2209 if (ret == -ENOMEM)
2229 argv_free(argv); 2210 argv_free(argv);
2230 2211
2231 if (force) { 2212 return ret;
2213}
2214
2215/**
2216 * orderly_poweroff - Trigger an orderly system poweroff
2217 * @force: force poweroff if command execution fails
2218 *
2219 * This may be called from any context to trigger a system shutdown.
2220 * If the orderly shutdown fails, it will force an immediate shutdown.
2221 */
2222int orderly_poweroff(bool force)
2223{
2224 int ret = __orderly_poweroff();
2225
2226 if (ret && force) {
2232 printk(KERN_WARNING "Failed to start orderly shutdown: " 2227 printk(KERN_WARNING "Failed to start orderly shutdown: "
2233 "forcing the issue\n"); 2228 "forcing the issue\n");
2234 2229
2235 /* I guess this should try to kick off some daemon to 2230 /*
2236 sync and poweroff asap. Or not even bother syncing 2231 * I guess this should try to kick off some daemon to sync and
2237 if we're doing an emergency shutdown? */ 2232 * poweroff asap. Or not even bother syncing if we're doing an
2233 * emergency shutdown?
2234 */
2238 emergency_sync(); 2235 emergency_sync();
2239 kernel_power_off(); 2236 kernel_power_off();
2240 } 2237 }
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 4ab11879aeb4..97186b99b0e4 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -30,6 +30,7 @@
30#include <linux/security.h> 30#include <linux/security.h>
31#include <linux/ctype.h> 31#include <linux/ctype.h>
32#include <linux/kmemcheck.h> 32#include <linux/kmemcheck.h>
33#include <linux/kmemleak.h>
33#include <linux/fs.h> 34#include <linux/fs.h>
34#include <linux/init.h> 35#include <linux/init.h>
35#include <linux/kernel.h> 36#include <linux/kernel.h>
@@ -174,6 +175,11 @@ static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
174 void __user *buffer, size_t *lenp, loff_t *ppos); 175 void __user *buffer, size_t *lenp, loff_t *ppos);
175#endif 176#endif
176 177
178static int proc_dointvec_minmax_coredump(struct ctl_table *table, int write,
179 void __user *buffer, size_t *lenp, loff_t *ppos);
180static int proc_dostring_coredump(struct ctl_table *table, int write,
181 void __user *buffer, size_t *lenp, loff_t *ppos);
182
177#ifdef CONFIG_MAGIC_SYSRQ 183#ifdef CONFIG_MAGIC_SYSRQ
178/* Note: sysrq code uses it's own private copy */ 184/* Note: sysrq code uses it's own private copy */
179static int __sysrq_enabled = SYSRQ_DEFAULT_ENABLE; 185static int __sysrq_enabled = SYSRQ_DEFAULT_ENABLE;
@@ -410,7 +416,7 @@ static struct ctl_table kern_table[] = {
410 .data = core_pattern, 416 .data = core_pattern,
411 .maxlen = CORENAME_MAX_SIZE, 417 .maxlen = CORENAME_MAX_SIZE,
412 .mode = 0644, 418 .mode = 0644,
413 .proc_handler = proc_dostring, 419 .proc_handler = proc_dostring_coredump,
414 }, 420 },
415 { 421 {
416 .procname = "core_pipe_limit", 422 .procname = "core_pipe_limit",
@@ -1498,7 +1504,7 @@ static struct ctl_table fs_table[] = {
1498 .data = &suid_dumpable, 1504 .data = &suid_dumpable,
1499 .maxlen = sizeof(int), 1505 .maxlen = sizeof(int),
1500 .mode = 0644, 1506 .mode = 0644,
1501 .proc_handler = proc_dointvec_minmax, 1507 .proc_handler = proc_dointvec_minmax_coredump,
1502 .extra1 = &zero, 1508 .extra1 = &zero,
1503 .extra2 = &two, 1509 .extra2 = &two,
1504 }, 1510 },
@@ -1551,7 +1557,10 @@ static struct ctl_table dev_table[] = {
1551 1557
1552int __init sysctl_init(void) 1558int __init sysctl_init(void)
1553{ 1559{
1554 register_sysctl_table(sysctl_base_table); 1560 struct ctl_table_header *hdr;
1561
1562 hdr = register_sysctl_table(sysctl_base_table);
1563 kmemleak_not_leak(hdr);
1555 return 0; 1564 return 0;
1556} 1565}
1557 1566
@@ -2009,6 +2018,34 @@ int proc_dointvec_minmax(struct ctl_table *table, int write,
2009 do_proc_dointvec_minmax_conv, &param); 2018 do_proc_dointvec_minmax_conv, &param);
2010} 2019}
2011 2020
2021static void validate_coredump_safety(void)
2022{
2023 if (suid_dumpable == SUID_DUMPABLE_SAFE &&
2024 core_pattern[0] != '/' && core_pattern[0] != '|') {
2025 printk(KERN_WARNING "Unsafe core_pattern used with "\
2026 "suid_dumpable=2. Pipe handler or fully qualified "\
2027 "core dump path required.\n");
2028 }
2029}
2030
2031static int proc_dointvec_minmax_coredump(struct ctl_table *table, int write,
2032 void __user *buffer, size_t *lenp, loff_t *ppos)
2033{
2034 int error = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
2035 if (!error)
2036 validate_coredump_safety();
2037 return error;
2038}
2039
2040static int proc_dostring_coredump(struct ctl_table *table, int write,
2041 void __user *buffer, size_t *lenp, loff_t *ppos)
2042{
2043 int error = proc_dostring(table, write, buffer, lenp, ppos);
2044 if (!error)
2045 validate_coredump_safety();
2046 return error;
2047}
2048
2012static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int write, 2049static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int write,
2013 void __user *buffer, 2050 void __user *buffer,
2014 size_t *lenp, loff_t *ppos, 2051 size_t *lenp, loff_t *ppos,
diff --git a/kernel/taskstats.c b/kernel/taskstats.c
index e66046456f4f..d0a32796550f 100644
--- a/kernel/taskstats.c
+++ b/kernel/taskstats.c
@@ -436,6 +436,11 @@ static int cgroupstats_user_cmd(struct sk_buff *skb, struct genl_info *info)
436 436
437 na = nla_reserve(rep_skb, CGROUPSTATS_TYPE_CGROUP_STATS, 437 na = nla_reserve(rep_skb, CGROUPSTATS_TYPE_CGROUP_STATS,
438 sizeof(struct cgroupstats)); 438 sizeof(struct cgroupstats));
439 if (na == NULL) {
440 rc = -EMSGSIZE;
441 goto err;
442 }
443
439 stats = nla_data(na); 444 stats = nla_data(na);
440 memset(stats, 0, sizeof(*stats)); 445 memset(stats, 0, sizeof(*stats));
441 446
diff --git a/kernel/watchdog.c b/kernel/watchdog.c
index 4b1dfba70f7c..69add8a9da68 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
@@ -575,7 +575,7 @@ out:
575/* 575/*
576 * Create/destroy watchdog threads as CPUs come and go: 576 * Create/destroy watchdog threads as CPUs come and go:
577 */ 577 */
578static int __cpuinit 578static int
579cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) 579cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
580{ 580{
581 int hotcpu = (unsigned long)hcpu; 581 int hotcpu = (unsigned long)hcpu;
@@ -610,10 +610,27 @@ cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
610 return NOTIFY_OK; 610 return NOTIFY_OK;
611} 611}
612 612
613static struct notifier_block __cpuinitdata cpu_nfb = { 613static struct notifier_block cpu_nfb = {
614 .notifier_call = cpu_callback 614 .notifier_call = cpu_callback
615}; 615};
616 616
617#ifdef CONFIG_SUSPEND
618/*
619 * On exit from suspend we force an offline->online transition on the boot CPU
620 * so that the PMU state that was lost while in suspended state gets set up
621 * properly for the boot CPU. This information is required for restarting the
622 * NMI watchdog.
623 */
624void lockup_detector_bootcpu_resume(void)
625{
626 void *cpu = (void *)(long)smp_processor_id();
627
628 cpu_callback(&cpu_nfb, CPU_DEAD_FROZEN, cpu);
629 cpu_callback(&cpu_nfb, CPU_UP_PREPARE_FROZEN, cpu);
630 cpu_callback(&cpu_nfb, CPU_ONLINE_FROZEN, cpu);
631}
632#endif
633
617void __init lockup_detector_init(void) 634void __init lockup_detector_init(void)
618{ 635{
619 void *cpu = (void *)(long)smp_processor_id(); 636 void *cpu = (void *)(long)smp_processor_id();
diff --git a/lib/Kconfig b/lib/Kconfig
index bfdbb1ff0aa3..bb94c1ba616a 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -340,6 +340,9 @@ config NLATTR
340config GENERIC_ATOMIC64 340config GENERIC_ATOMIC64
341 bool 341 bool
342 342
343config ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
344 def_bool y if GENERIC_ATOMIC64
345
343config LRU_CACHE 346config LRU_CACHE
344 tristate 347 tristate
345 348
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 4a186508bf8b..2403a63b5da5 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1084,18 +1084,105 @@ config LKDTM
1084 Documentation on how to use the module can be found in 1084 Documentation on how to use the module can be found in
1085 Documentation/fault-injection/provoke-crashes.txt 1085 Documentation/fault-injection/provoke-crashes.txt
1086 1086
1087config NOTIFIER_ERROR_INJECTION
1088 tristate "Notifier error injection"
1089 depends on DEBUG_KERNEL
1090 select DEBUG_FS
1091 help
1092 This option provides the ability to inject artifical errors to
1093 specified notifier chain callbacks. It is useful to test the error
1094 handling of notifier call chain failures.
1095
1096 Say N if unsure.
1097
1087config CPU_NOTIFIER_ERROR_INJECT 1098config CPU_NOTIFIER_ERROR_INJECT
1088 tristate "CPU notifier error injection module" 1099 tristate "CPU notifier error injection module"
1089 depends on HOTPLUG_CPU && DEBUG_KERNEL 1100 depends on HOTPLUG_CPU && NOTIFIER_ERROR_INJECTION
1090 help 1101 help
1091 This option provides a kernel module that can be used to test 1102 This option provides a kernel module that can be used to test
1092 the error handling of the cpu notifiers 1103 the error handling of the cpu notifiers by injecting artifical
1104 errors to CPU notifier chain callbacks. It is controlled through
1105 debugfs interface under /sys/kernel/debug/notifier-error-inject/cpu
1106
1107 If the notifier call chain should be failed with some events
1108 notified, write the error code to "actions/<notifier event>/error".
1109
1110 Example: Inject CPU offline error (-1 == -EPERM)
1111
1112 # cd /sys/kernel/debug/notifier-error-inject/cpu
1113 # echo -1 > actions/CPU_DOWN_PREPARE/error
1114 # echo 0 > /sys/devices/system/cpu/cpu1/online
1115 bash: echo: write error: Operation not permitted
1093 1116
1094 To compile this code as a module, choose M here: the module will 1117 To compile this code as a module, choose M here: the module will
1095 be called cpu-notifier-error-inject. 1118 be called cpu-notifier-error-inject.
1096 1119
1097 If unsure, say N. 1120 If unsure, say N.
1098 1121
1122config PM_NOTIFIER_ERROR_INJECT
1123 tristate "PM notifier error injection module"
1124 depends on PM && NOTIFIER_ERROR_INJECTION
1125 default m if PM_DEBUG
1126 help
1127 This option provides the ability to inject artifical errors to
1128 PM notifier chain callbacks. It is controlled through debugfs
1129 interface /sys/kernel/debug/notifier-error-inject/pm
1130
1131 If the notifier call chain should be failed with some events
1132 notified, write the error code to "actions/<notifier event>/error".
1133
1134 Example: Inject PM suspend error (-12 = -ENOMEM)
1135
1136 # cd /sys/kernel/debug/notifier-error-inject/pm/
1137 # echo -12 > actions/PM_SUSPEND_PREPARE/error
1138 # echo mem > /sys/power/state
1139 bash: echo: write error: Cannot allocate memory
1140
1141 To compile this code as a module, choose M here: the module will
1142 be called pm-notifier-error-inject.
1143
1144 If unsure, say N.
1145
1146config MEMORY_NOTIFIER_ERROR_INJECT
1147 tristate "Memory hotplug notifier error injection module"
1148 depends on MEMORY_HOTPLUG_SPARSE && NOTIFIER_ERROR_INJECTION
1149 help
1150 This option provides the ability to inject artifical errors to
1151 memory hotplug notifier chain callbacks. It is controlled through
1152 debugfs interface under /sys/kernel/debug/notifier-error-inject/memory
1153
1154 If the notifier call chain should be failed with some events
1155 notified, write the error code to "actions/<notifier event>/error".
1156
1157 Example: Inject memory hotplug offline error (-12 == -ENOMEM)
1158
1159 # cd /sys/kernel/debug/notifier-error-inject/memory
1160 # echo -12 > actions/MEM_GOING_OFFLINE/error
1161 # echo offline > /sys/devices/system/memory/memoryXXX/state
1162 bash: echo: write error: Cannot allocate memory
1163
1164 To compile this code as a module, choose M here: the module will
1165 be called pSeries-reconfig-notifier-error-inject.
1166
1167 If unsure, say N.
1168
1169config PSERIES_RECONFIG_NOTIFIER_ERROR_INJECT
1170 tristate "pSeries reconfig notifier error injection module"
1171 depends on PPC_PSERIES && NOTIFIER_ERROR_INJECTION
1172 help
1173 This option provides the ability to inject artifical errors to
1174 pSeries reconfig notifier chain callbacks. It is controlled
1175 through debugfs interface under
1176 /sys/kernel/debug/notifier-error-inject/pSeries-reconfig/
1177
1178 If the notifier call chain should be failed with some events
1179 notified, write the error code to "actions/<notifier event>/error".
1180
1181 To compile this code as a module, choose M here: the module will
1182 be called memory-notifier-error-inject.
1183
1184 If unsure, say N.
1185
1099config FAULT_INJECTION 1186config FAULT_INJECTION
1100 bool "Fault-injection framework" 1187 bool "Fault-injection framework"
1101 depends on DEBUG_KERNEL 1188 depends on DEBUG_KERNEL
diff --git a/lib/Makefile b/lib/Makefile
index 2f2be5a8734c..9cb4104f47d9 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -22,7 +22,7 @@ lib-y += kobject.o klist.o
22obj-y += bcd.o div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \ 22obj-y += bcd.o div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \
23 bust_spinlocks.o hexdump.o kasprintf.o bitmap.o scatterlist.o \ 23 bust_spinlocks.o hexdump.o kasprintf.o bitmap.o scatterlist.o \
24 string_helpers.o gcd.o lcm.o list_sort.o uuid.o flex_array.o \ 24 string_helpers.o gcd.o lcm.o list_sort.o uuid.o flex_array.o \
25 bsearch.o find_last_bit.o find_next_bit.o llist.o 25 bsearch.o find_last_bit.o find_next_bit.o llist.o memweight.o
26obj-y += kstrtox.o 26obj-y += kstrtox.o
27obj-$(CONFIG_TEST_KSTRTOX) += test-kstrtox.o 27obj-$(CONFIG_TEST_KSTRTOX) += test-kstrtox.o
28 28
@@ -90,7 +90,12 @@ obj-$(CONFIG_AUDIT_GENERIC) += audit.o
90obj-$(CONFIG_SWIOTLB) += swiotlb.o 90obj-$(CONFIG_SWIOTLB) += swiotlb.o
91obj-$(CONFIG_IOMMU_HELPER) += iommu-helper.o 91obj-$(CONFIG_IOMMU_HELPER) += iommu-helper.o
92obj-$(CONFIG_FAULT_INJECTION) += fault-inject.o 92obj-$(CONFIG_FAULT_INJECTION) += fault-inject.o
93obj-$(CONFIG_NOTIFIER_ERROR_INJECTION) += notifier-error-inject.o
93obj-$(CONFIG_CPU_NOTIFIER_ERROR_INJECT) += cpu-notifier-error-inject.o 94obj-$(CONFIG_CPU_NOTIFIER_ERROR_INJECT) += cpu-notifier-error-inject.o
95obj-$(CONFIG_PM_NOTIFIER_ERROR_INJECT) += pm-notifier-error-inject.o
96obj-$(CONFIG_MEMORY_NOTIFIER_ERROR_INJECT) += memory-notifier-error-inject.o
97obj-$(CONFIG_PSERIES_RECONFIG_NOTIFIER_ERROR_INJECT) += \
98 pSeries-reconfig-notifier-error-inject.o
94 99
95lib-$(CONFIG_GENERIC_BUG) += bug.o 100lib-$(CONFIG_GENERIC_BUG) += bug.o
96 101
diff --git a/lib/atomic64_test.c b/lib/atomic64_test.c
index cb99b91c3a1d..00bca223d1e1 100644
--- a/lib/atomic64_test.c
+++ b/lib/atomic64_test.c
@@ -114,8 +114,7 @@ static __init int test_atomic64(void)
114 r += one; 114 r += one;
115 BUG_ON(v.counter != r); 115 BUG_ON(v.counter != r);
116 116
117#if defined(CONFIG_X86) || defined(CONFIG_MIPS) || defined(CONFIG_PPC) || \ 117#ifdef CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
118 defined(CONFIG_S390) || defined(_ASM_GENERIC_ATOMIC64_H) || defined(CONFIG_ARM)
119 INIT(onestwos); 118 INIT(onestwos);
120 BUG_ON(atomic64_dec_if_positive(&v) != (onestwos - 1)); 119 BUG_ON(atomic64_dec_if_positive(&v) != (onestwos - 1));
121 r -= one; 120 r -= one;
@@ -129,7 +128,7 @@ static __init int test_atomic64(void)
129 BUG_ON(atomic64_dec_if_positive(&v) != (-one - one)); 128 BUG_ON(atomic64_dec_if_positive(&v) != (-one - one));
130 BUG_ON(v.counter != r); 129 BUG_ON(v.counter != r);
131#else 130#else
132#warning Please implement atomic64_dec_if_positive for your architecture, and add it to the IF above 131#warning Please implement atomic64_dec_if_positive for your architecture and select the above Kconfig symbol
133#endif 132#endif
134 133
135 INIT(onestwos); 134 INIT(onestwos);
diff --git a/lib/cpu-notifier-error-inject.c b/lib/cpu-notifier-error-inject.c
index 4dc20321b0d5..707ca24f7b18 100644
--- a/lib/cpu-notifier-error-inject.c
+++ b/lib/cpu-notifier-error-inject.c
@@ -1,58 +1,45 @@
1#include <linux/kernel.h> 1#include <linux/kernel.h>
2#include <linux/cpu.h>
3#include <linux/module.h> 2#include <linux/module.h>
4#include <linux/notifier.h> 3#include <linux/cpu.h>
5 4
6static int priority; 5#include "notifier-error-inject.h"
7static int cpu_up_prepare_error;
8static int cpu_down_prepare_error;
9 6
7static int priority;
10module_param(priority, int, 0); 8module_param(priority, int, 0);
11MODULE_PARM_DESC(priority, "specify cpu notifier priority"); 9MODULE_PARM_DESC(priority, "specify cpu notifier priority");
12 10
13module_param(cpu_up_prepare_error, int, 0644); 11static struct notifier_err_inject cpu_notifier_err_inject = {
14MODULE_PARM_DESC(cpu_up_prepare_error, 12 .actions = {
15 "specify error code to inject CPU_UP_PREPARE action"); 13 { NOTIFIER_ERR_INJECT_ACTION(CPU_UP_PREPARE) },
16 14 { NOTIFIER_ERR_INJECT_ACTION(CPU_UP_PREPARE_FROZEN) },
17module_param(cpu_down_prepare_error, int, 0644); 15 { NOTIFIER_ERR_INJECT_ACTION(CPU_DOWN_PREPARE) },
18MODULE_PARM_DESC(cpu_down_prepare_error, 16 { NOTIFIER_ERR_INJECT_ACTION(CPU_DOWN_PREPARE_FROZEN) },
19 "specify error code to inject CPU_DOWN_PREPARE action"); 17 {}
20
21static int err_inject_cpu_callback(struct notifier_block *nfb,
22 unsigned long action, void *hcpu)
23{
24 int err = 0;
25
26 switch (action) {
27 case CPU_UP_PREPARE:
28 case CPU_UP_PREPARE_FROZEN:
29 err = cpu_up_prepare_error;
30 break;
31 case CPU_DOWN_PREPARE:
32 case CPU_DOWN_PREPARE_FROZEN:
33 err = cpu_down_prepare_error;
34 break;
35 } 18 }
36 if (err)
37 printk(KERN_INFO "Injecting error (%d) at cpu notifier\n", err);
38
39 return notifier_from_errno(err);
40}
41
42static struct notifier_block err_inject_cpu_notifier = {
43 .notifier_call = err_inject_cpu_callback,
44}; 19};
45 20
21static struct dentry *dir;
22
46static int err_inject_init(void) 23static int err_inject_init(void)
47{ 24{
48 err_inject_cpu_notifier.priority = priority; 25 int err;
26
27 dir = notifier_err_inject_init("cpu", notifier_err_inject_dir,
28 &cpu_notifier_err_inject, priority);
29 if (IS_ERR(dir))
30 return PTR_ERR(dir);
31
32 err = register_hotcpu_notifier(&cpu_notifier_err_inject.nb);
33 if (err)
34 debugfs_remove_recursive(dir);
49 35
50 return register_hotcpu_notifier(&err_inject_cpu_notifier); 36 return err;
51} 37}
52 38
53static void err_inject_exit(void) 39static void err_inject_exit(void)
54{ 40{
55 unregister_hotcpu_notifier(&err_inject_cpu_notifier); 41 unregister_hotcpu_notifier(&cpu_notifier_err_inject.nb);
42 debugfs_remove_recursive(dir);
56} 43}
57 44
58module_init(err_inject_init); 45module_init(err_inject_init);
diff --git a/lib/crc32.c b/lib/crc32.c
index b0d278fb1d91..61774b8db4de 100644
--- a/lib/crc32.c
+++ b/lib/crc32.c
@@ -74,7 +74,9 @@ crc32_body(u32 crc, unsigned char const *buf, size_t len, const u32 (*tab)[256])
74 size_t i; 74 size_t i;
75# endif 75# endif
76 const u32 *t0=tab[0], *t1=tab[1], *t2=tab[2], *t3=tab[3]; 76 const u32 *t0=tab[0], *t1=tab[1], *t2=tab[2], *t3=tab[3];
77# if CRC_LE_BITS != 32
77 const u32 *t4 = tab[4], *t5 = tab[5], *t6 = tab[6], *t7 = tab[7]; 78 const u32 *t4 = tab[4], *t5 = tab[5], *t6 = tab[6], *t7 = tab[7];
79# endif
78 u32 q; 80 u32 q;
79 81
80 /* Align it */ 82 /* Align it */
diff --git a/lib/memory-notifier-error-inject.c b/lib/memory-notifier-error-inject.c
new file mode 100644
index 000000000000..e6239bf0b0df
--- /dev/null
+++ b/lib/memory-notifier-error-inject.c
@@ -0,0 +1,48 @@
1#include <linux/kernel.h>
2#include <linux/module.h>
3#include <linux/memory.h>
4
5#include "notifier-error-inject.h"
6
7static int priority;
8module_param(priority, int, 0);
9MODULE_PARM_DESC(priority, "specify memory notifier priority");
10
11static struct notifier_err_inject memory_notifier_err_inject = {
12 .actions = {
13 { NOTIFIER_ERR_INJECT_ACTION(MEM_GOING_ONLINE) },
14 { NOTIFIER_ERR_INJECT_ACTION(MEM_GOING_OFFLINE) },
15 {}
16 }
17};
18
19static struct dentry *dir;
20
21static int err_inject_init(void)
22{
23 int err;
24
25 dir = notifier_err_inject_init("memory", notifier_err_inject_dir,
26 &memory_notifier_err_inject, priority);
27 if (IS_ERR(dir))
28 return PTR_ERR(dir);
29
30 err = register_memory_notifier(&memory_notifier_err_inject.nb);
31 if (err)
32 debugfs_remove_recursive(dir);
33
34 return err;
35}
36
37static void err_inject_exit(void)
38{
39 unregister_memory_notifier(&memory_notifier_err_inject.nb);
40 debugfs_remove_recursive(dir);
41}
42
43module_init(err_inject_init);
44module_exit(err_inject_exit);
45
46MODULE_DESCRIPTION("memory notifier error injection module");
47MODULE_LICENSE("GPL");
48MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>");
diff --git a/lib/memweight.c b/lib/memweight.c
new file mode 100644
index 000000000000..e35fc8771893
--- /dev/null
+++ b/lib/memweight.c
@@ -0,0 +1,38 @@
1#include <linux/export.h>
2#include <linux/bug.h>
3#include <linux/bitmap.h>
4
5/**
6 * memweight - count the total number of bits set in memory area
7 * @ptr: pointer to the start of the area
8 * @bytes: the size of the area
9 */
10size_t memweight(const void *ptr, size_t bytes)
11{
12 size_t ret = 0;
13 size_t longs;
14 const unsigned char *bitmap = ptr;
15
16 for (; bytes > 0 && ((unsigned long)bitmap) % sizeof(long);
17 bytes--, bitmap++)
18 ret += hweight8(*bitmap);
19
20 longs = bytes / sizeof(long);
21 if (longs) {
22 BUG_ON(longs >= INT_MAX / BITS_PER_LONG);
23 ret += bitmap_weight((unsigned long *)bitmap,
24 longs * BITS_PER_LONG);
25 bytes -= longs * sizeof(long);
26 bitmap += longs * sizeof(long);
27 }
28 /*
29 * The reason that this last loop is distinct from the preceding
30 * bitmap_weight() call is to compute 1-bits in the last region smaller
31 * than sizeof(long) properly on big-endian systems.
32 */
33 for (; bytes > 0; bytes--, bitmap++)
34 ret += hweight8(*bitmap);
35
36 return ret;
37}
38EXPORT_SYMBOL(memweight);
diff --git a/lib/notifier-error-inject.c b/lib/notifier-error-inject.c
new file mode 100644
index 000000000000..44b92cb6224f
--- /dev/null
+++ b/lib/notifier-error-inject.c
@@ -0,0 +1,112 @@
1#include <linux/module.h>
2
3#include "notifier-error-inject.h"
4
5static int debugfs_errno_set(void *data, u64 val)
6{
7 *(int *)data = clamp_t(int, val, -MAX_ERRNO, 0);
8 return 0;
9}
10
11static int debugfs_errno_get(void *data, u64 *val)
12{
13 *val = *(int *)data;
14 return 0;
15}
16
17DEFINE_SIMPLE_ATTRIBUTE(fops_errno, debugfs_errno_get, debugfs_errno_set,
18 "%lld\n");
19
20static struct dentry *debugfs_create_errno(const char *name, mode_t mode,
21 struct dentry *parent, int *value)
22{
23 return debugfs_create_file(name, mode, parent, value, &fops_errno);
24}
25
26static int notifier_err_inject_callback(struct notifier_block *nb,
27 unsigned long val, void *p)
28{
29 int err = 0;
30 struct notifier_err_inject *err_inject =
31 container_of(nb, struct notifier_err_inject, nb);
32 struct notifier_err_inject_action *action;
33
34 for (action = err_inject->actions; action->name; action++) {
35 if (action->val == val) {
36 err = action->error;
37 break;
38 }
39 }
40 if (err)
41 pr_info("Injecting error (%d) to %s\n", err, action->name);
42
43 return notifier_from_errno(err);
44}
45
46struct dentry *notifier_err_inject_dir;
47EXPORT_SYMBOL_GPL(notifier_err_inject_dir);
48
49struct dentry *notifier_err_inject_init(const char *name, struct dentry *parent,
50 struct notifier_err_inject *err_inject, int priority)
51{
52 struct notifier_err_inject_action *action;
53 mode_t mode = S_IFREG | S_IRUSR | S_IWUSR;
54 struct dentry *dir;
55 struct dentry *actions_dir;
56
57 err_inject->nb.notifier_call = notifier_err_inject_callback;
58 err_inject->nb.priority = priority;
59
60 dir = debugfs_create_dir(name, parent);
61 if (!dir)
62 return ERR_PTR(-ENOMEM);
63
64 actions_dir = debugfs_create_dir("actions", dir);
65 if (!actions_dir)
66 goto fail;
67
68 for (action = err_inject->actions; action->name; action++) {
69 struct dentry *action_dir;
70
71 action_dir = debugfs_create_dir(action->name, actions_dir);
72 if (!action_dir)
73 goto fail;
74
75 /*
76 * Create debugfs r/w file containing action->error. If
77 * notifier call chain is called with action->val, it will
78 * fail with the error code
79 */
80 if (!debugfs_create_errno("error", mode, action_dir,
81 &action->error))
82 goto fail;
83 }
84 return dir;
85fail:
86 debugfs_remove_recursive(dir);
87 return ERR_PTR(-ENOMEM);
88}
89EXPORT_SYMBOL_GPL(notifier_err_inject_init);
90
91static int __init err_inject_init(void)
92{
93 notifier_err_inject_dir =
94 debugfs_create_dir("notifier-error-inject", NULL);
95
96 if (!notifier_err_inject_dir)
97 return -ENOMEM;
98
99 return 0;
100}
101
102static void __exit err_inject_exit(void)
103{
104 debugfs_remove_recursive(notifier_err_inject_dir);
105}
106
107module_init(err_inject_init);
108module_exit(err_inject_exit);
109
110MODULE_DESCRIPTION("Notifier error injection module");
111MODULE_LICENSE("GPL");
112MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>");
diff --git a/lib/notifier-error-inject.h b/lib/notifier-error-inject.h
new file mode 100644
index 000000000000..99b3b6fc470b
--- /dev/null
+++ b/lib/notifier-error-inject.h
@@ -0,0 +1,24 @@
1#include <linux/atomic.h>
2#include <linux/debugfs.h>
3#include <linux/notifier.h>
4
5struct notifier_err_inject_action {
6 unsigned long val;
7 int error;
8 const char *name;
9};
10
11#define NOTIFIER_ERR_INJECT_ACTION(action) \
12 .name = #action, .val = (action),
13
14struct notifier_err_inject {
15 struct notifier_block nb;
16 struct notifier_err_inject_action actions[];
17 /* The last slot must be terminated with zero sentinel */
18};
19
20extern struct dentry *notifier_err_inject_dir;
21
22extern struct dentry *notifier_err_inject_init(const char *name,
23 struct dentry *parent, struct notifier_err_inject *err_inject,
24 int priority);
diff --git a/lib/pSeries-reconfig-notifier-error-inject.c b/lib/pSeries-reconfig-notifier-error-inject.c
new file mode 100644
index 000000000000..7f7c98dcd5c4
--- /dev/null
+++ b/lib/pSeries-reconfig-notifier-error-inject.c
@@ -0,0 +1,51 @@
1#include <linux/kernel.h>
2#include <linux/module.h>
3
4#include <asm/pSeries_reconfig.h>
5
6#include "notifier-error-inject.h"
7
8static int priority;
9module_param(priority, int, 0);
10MODULE_PARM_DESC(priority, "specify pSeries reconfig notifier priority");
11
12static struct notifier_err_inject reconfig_err_inject = {
13 .actions = {
14 { NOTIFIER_ERR_INJECT_ACTION(PSERIES_RECONFIG_ADD) },
15 { NOTIFIER_ERR_INJECT_ACTION(PSERIES_RECONFIG_REMOVE) },
16 { NOTIFIER_ERR_INJECT_ACTION(PSERIES_DRCONF_MEM_ADD) },
17 { NOTIFIER_ERR_INJECT_ACTION(PSERIES_DRCONF_MEM_REMOVE) },
18 {}
19 }
20};
21
22static struct dentry *dir;
23
24static int err_inject_init(void)
25{
26 int err;
27
28 dir = notifier_err_inject_init("pSeries-reconfig",
29 notifier_err_inject_dir, &reconfig_err_inject, priority);
30 if (IS_ERR(dir))
31 return PTR_ERR(dir);
32
33 err = pSeries_reconfig_notifier_register(&reconfig_err_inject.nb);
34 if (err)
35 debugfs_remove_recursive(dir);
36
37 return err;
38}
39
40static void err_inject_exit(void)
41{
42 pSeries_reconfig_notifier_unregister(&reconfig_err_inject.nb);
43 debugfs_remove_recursive(dir);
44}
45
46module_init(err_inject_init);
47module_exit(err_inject_exit);
48
49MODULE_DESCRIPTION("pSeries reconfig notifier error injection module");
50MODULE_LICENSE("GPL");
51MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>");
diff --git a/lib/pm-notifier-error-inject.c b/lib/pm-notifier-error-inject.c
new file mode 100644
index 000000000000..c094b2dedc23
--- /dev/null
+++ b/lib/pm-notifier-error-inject.c
@@ -0,0 +1,49 @@
1#include <linux/kernel.h>
2#include <linux/module.h>
3#include <linux/suspend.h>
4
5#include "notifier-error-inject.h"
6
7static int priority;
8module_param(priority, int, 0);
9MODULE_PARM_DESC(priority, "specify PM notifier priority");
10
11static struct notifier_err_inject pm_notifier_err_inject = {
12 .actions = {
13 { NOTIFIER_ERR_INJECT_ACTION(PM_HIBERNATION_PREPARE) },
14 { NOTIFIER_ERR_INJECT_ACTION(PM_SUSPEND_PREPARE) },
15 { NOTIFIER_ERR_INJECT_ACTION(PM_RESTORE_PREPARE) },
16 {}
17 }
18};
19
20static struct dentry *dir;
21
22static int err_inject_init(void)
23{
24 int err;
25
26 dir = notifier_err_inject_init("pm", notifier_err_inject_dir,
27 &pm_notifier_err_inject, priority);
28 if (IS_ERR(dir))
29 return PTR_ERR(dir);
30
31 err = register_pm_notifier(&pm_notifier_err_inject.nb);
32 if (err)
33 debugfs_remove_recursive(dir);
34
35 return err;
36}
37
38static void err_inject_exit(void)
39{
40 unregister_pm_notifier(&pm_notifier_err_inject.nb);
41 debugfs_remove_recursive(dir);
42}
43
44module_init(err_inject_init);
45module_exit(err_inject_exit);
46
47MODULE_DESCRIPTION("PM notifier error injection module");
48MODULE_LICENSE("GPL");
49MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>");
diff --git a/lib/scatterlist.c b/lib/scatterlist.c
index e719adf695bf..fadae774a20c 100644
--- a/lib/scatterlist.c
+++ b/lib/scatterlist.c
@@ -279,14 +279,6 @@ int __sg_alloc_table(struct sg_table *table, unsigned int nents,
279 if (!left) 279 if (!left)
280 sg_mark_end(&sg[sg_size - 1]); 280 sg_mark_end(&sg[sg_size - 1]);
281 281
282 /*
283 * only really needed for mempool backed sg allocations (like
284 * SCSI), a possible improvement here would be to pass the
285 * table pointer into the allocator and let that clear these
286 * flags
287 */
288 gfp_mask &= ~__GFP_WAIT;
289 gfp_mask |= __GFP_HIGH;
290 prv = sg; 282 prv = sg;
291 } while (left); 283 } while (left);
292 284
diff --git a/lib/spinlock_debug.c b/lib/spinlock_debug.c
index e91fbc23fff1..eb10578ae055 100644
--- a/lib/spinlock_debug.c
+++ b/lib/spinlock_debug.c
@@ -58,7 +58,7 @@ static void spin_dump(raw_spinlock_t *lock, const char *msg)
58 printk(KERN_EMERG "BUG: spinlock %s on CPU#%d, %s/%d\n", 58 printk(KERN_EMERG "BUG: spinlock %s on CPU#%d, %s/%d\n",
59 msg, raw_smp_processor_id(), 59 msg, raw_smp_processor_id(),
60 current->comm, task_pid_nr(current)); 60 current->comm, task_pid_nr(current));
61 printk(KERN_EMERG " lock: %ps, .magic: %08x, .owner: %s/%d, " 61 printk(KERN_EMERG " lock: %pS, .magic: %08x, .owner: %s/%d, "
62 ".owner_cpu: %d\n", 62 ".owner_cpu: %d\n",
63 lock, lock->magic, 63 lock, lock->magic,
64 owner ? owner->comm : "<none>", 64 owner ? owner->comm : "<none>",
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index c3f36d415bdf..0e337541f005 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -655,6 +655,50 @@ char *resource_string(char *buf, char *end, struct resource *res,
655} 655}
656 656
657static noinline_for_stack 657static noinline_for_stack
658char *hex_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
659 const char *fmt)
660{
661 int i, len = 1; /* if we pass '%ph[CDN]', field witdh remains
662 negative value, fallback to the default */
663 char separator;
664
665 if (spec.field_width == 0)
666 /* nothing to print */
667 return buf;
668
669 if (ZERO_OR_NULL_PTR(addr))
670 /* NULL pointer */
671 return string(buf, end, NULL, spec);
672
673 switch (fmt[1]) {
674 case 'C':
675 separator = ':';
676 break;
677 case 'D':
678 separator = '-';
679 break;
680 case 'N':
681 separator = 0;
682 break;
683 default:
684 separator = ' ';
685 break;
686 }
687
688 if (spec.field_width > 0)
689 len = min_t(int, spec.field_width, 64);
690
691 for (i = 0; i < len && buf < end - 1; i++) {
692 buf = hex_byte_pack(buf, addr[i]);
693
694 if (buf < end && separator && i != len - 1)
695 *buf++ = separator;
696 }
697
698 return buf;
699}
700
701static noinline_for_stack
658char *mac_address_string(char *buf, char *end, u8 *addr, 702char *mac_address_string(char *buf, char *end, u8 *addr,
659 struct printf_spec spec, const char *fmt) 703 struct printf_spec spec, const char *fmt)
660{ 704{
@@ -662,15 +706,28 @@ char *mac_address_string(char *buf, char *end, u8 *addr,
662 char *p = mac_addr; 706 char *p = mac_addr;
663 int i; 707 int i;
664 char separator; 708 char separator;
709 bool reversed = false;
665 710
666 if (fmt[1] == 'F') { /* FDDI canonical format */ 711 switch (fmt[1]) {
712 case 'F':
667 separator = '-'; 713 separator = '-';
668 } else { 714 break;
715
716 case 'R':
717 reversed = true;
718 /* fall through */
719
720 default:
669 separator = ':'; 721 separator = ':';
722 break;
670 } 723 }
671 724
672 for (i = 0; i < 6; i++) { 725 for (i = 0; i < 6; i++) {
673 p = hex_byte_pack(p, addr[i]); 726 if (reversed)
727 p = hex_byte_pack(p, addr[5 - i]);
728 else
729 p = hex_byte_pack(p, addr[i]);
730
674 if (fmt[0] == 'M' && i != 5) 731 if (fmt[0] == 'M' && i != 5)
675 *p++ = separator; 732 *p++ = separator;
676 } 733 }
@@ -933,6 +990,7 @@ int kptr_restrict __read_mostly;
933 * - 'm' For a 6-byte MAC address, it prints the hex address without colons 990 * - 'm' For a 6-byte MAC address, it prints the hex address without colons
934 * - 'MF' For a 6-byte MAC FDDI address, it prints the address 991 * - 'MF' For a 6-byte MAC FDDI address, it prints the address
935 * with a dash-separated hex notation 992 * with a dash-separated hex notation
993 * - '[mM]R For a 6-byte MAC address, Reverse order (Bluetooth)
936 * - 'I' [46] for IPv4/IPv6 addresses printed in the usual way 994 * - 'I' [46] for IPv4/IPv6 addresses printed in the usual way
937 * IPv4 uses dot-separated decimal without leading 0's (1.2.3.4) 995 * IPv4 uses dot-separated decimal without leading 0's (1.2.3.4)
938 * IPv6 uses colon separated network-order 16 bit hex with leading 0's 996 * IPv6 uses colon separated network-order 16 bit hex with leading 0's
@@ -960,6 +1018,13 @@ int kptr_restrict __read_mostly;
960 * correctness of the format string and va_list arguments. 1018 * correctness of the format string and va_list arguments.
961 * - 'K' For a kernel pointer that should be hidden from unprivileged users 1019 * - 'K' For a kernel pointer that should be hidden from unprivileged users
962 * - 'NF' For a netdev_features_t 1020 * - 'NF' For a netdev_features_t
1021 * - 'h[CDN]' For a variable-length buffer, it prints it as a hex string with
1022 * a certain separator (' ' by default):
1023 * C colon
1024 * D dash
1025 * N no separator
1026 * The maximum supported length is 64 bytes of the input. Consider
1027 * to use print_hex_dump() for the larger input.
963 * 1028 *
964 * Note: The difference between 'S' and 'F' is that on ia64 and ppc64 1029 * Note: The difference between 'S' and 'F' is that on ia64 and ppc64
965 * function pointers are really function descriptors, which contain a 1030 * function pointers are really function descriptors, which contain a
@@ -993,9 +1058,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
993 case 'R': 1058 case 'R':
994 case 'r': 1059 case 'r':
995 return resource_string(buf, end, ptr, spec, fmt); 1060 return resource_string(buf, end, ptr, spec, fmt);
1061 case 'h':
1062 return hex_string(buf, end, ptr, spec, fmt);
996 case 'M': /* Colon separated: 00:01:02:03:04:05 */ 1063 case 'M': /* Colon separated: 00:01:02:03:04:05 */
997 case 'm': /* Contiguous: 000102030405 */ 1064 case 'm': /* Contiguous: 000102030405 */
998 /* [mM]F (FDDI, bit reversed) */ 1065 /* [mM]F (FDDI) */
1066 /* [mM]R (Reverse order; Bluetooth) */
999 return mac_address_string(buf, end, ptr, spec, fmt); 1067 return mac_address_string(buf, end, ptr, spec, fmt);
1000 case 'I': /* Formatted IP supported 1068 case 'I': /* Formatted IP supported
1001 * 4: 1.2.3.4 1069 * 4: 1.2.3.4
@@ -1030,7 +1098,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
1030 * %pK cannot be used in IRQ context because its test 1098 * %pK cannot be used in IRQ context because its test
1031 * for CAP_SYSLOG would be meaningless. 1099 * for CAP_SYSLOG would be meaningless.
1032 */ 1100 */
1033 if (in_irq() || in_serving_softirq() || in_nmi()) { 1101 if (kptr_restrict && (in_irq() || in_serving_softirq() ||
1102 in_nmi())) {
1034 if (spec.field_width == -1) 1103 if (spec.field_width == -1)
1035 spec.field_width = default_width; 1104 spec.field_width = default_width;
1036 return string(buf, end, "pK-error", spec); 1105 return string(buf, end, "pK-error", spec);
@@ -1280,8 +1349,12 @@ qualifier:
1280 * %pI6c print an IPv6 address as specified by RFC 5952 1349 * %pI6c print an IPv6 address as specified by RFC 5952
1281 * %pU[bBlL] print a UUID/GUID in big or little endian using lower or upper 1350 * %pU[bBlL] print a UUID/GUID in big or little endian using lower or upper
1282 * case. 1351 * case.
1352 * %*ph[CDN] a variable-length hex string with a separator (supports up to 64
1353 * bytes of the input)
1283 * %n is ignored 1354 * %n is ignored
1284 * 1355 *
1356 * ** Please update Documentation/printk-formats.txt when making changes **
1357 *
1285 * The return value is the number of characters which would 1358 * The return value is the number of characters which would
1286 * be generated for the given input, excluding the trailing 1359 * be generated for the given input, excluding the trailing
1287 * '\0', as per ISO C99. If you want to have the exact 1360 * '\0', as per ISO C99. If you want to have the exact
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index de4ce7058450..6de0d613bbe6 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -1433,8 +1433,8 @@ static int soft_offline_huge_page(struct page *page, int flags)
1433 /* Keep page count to indicate a given hugepage is isolated. */ 1433 /* Keep page count to indicate a given hugepage is isolated. */
1434 1434
1435 list_add(&hpage->lru, &pagelist); 1435 list_add(&hpage->lru, &pagelist);
1436 ret = migrate_huge_pages(&pagelist, new_page, MPOL_MF_MOVE_ALL, 0, 1436 ret = migrate_huge_pages(&pagelist, new_page, MPOL_MF_MOVE_ALL, false,
1437 true); 1437 MIGRATE_SYNC);
1438 if (ret) { 1438 if (ret) {
1439 struct page *page1, *page2; 1439 struct page *page1, *page2;
1440 list_for_each_entry_safe(page1, page2, &pagelist, lru) 1440 list_for_each_entry_safe(page1, page2, &pagelist, lru)
@@ -1563,7 +1563,7 @@ int soft_offline_page(struct page *page, int flags)
1563 page_is_file_cache(page)); 1563 page_is_file_cache(page));
1564 list_add(&page->lru, &pagelist); 1564 list_add(&page->lru, &pagelist);
1565 ret = migrate_pages(&pagelist, new_page, MPOL_MF_MOVE_ALL, 1565 ret = migrate_pages(&pagelist, new_page, MPOL_MF_MOVE_ALL,
1566 0, MIGRATE_SYNC); 1566 false, MIGRATE_SYNC);
1567 if (ret) { 1567 if (ret) {
1568 putback_lru_pages(&pagelist); 1568 putback_lru_pages(&pagelist);
1569 pr_info("soft offline: %#lx: migration failed %d, type %lx\n", 1569 pr_info("soft offline: %#lx: migration failed %d, type %lx\n",
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index e5bd60ff48e3..913d6bdfdda3 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -1600,13 +1600,17 @@ sub process {
1600 1600
1601# Check signature styles 1601# Check signature styles
1602 if (!$in_header_lines && 1602 if (!$in_header_lines &&
1603 $line =~ /^(\s*)($signature_tags)(\s*)(.*)/) { 1603 $line =~ /^(\s*)([a-z0-9_-]+by:|$signature_tags)(\s*)(.*)/i) {
1604 my $space_before = $1; 1604 my $space_before = $1;
1605 my $sign_off = $2; 1605 my $sign_off = $2;
1606 my $space_after = $3; 1606 my $space_after = $3;
1607 my $email = $4; 1607 my $email = $4;
1608 my $ucfirst_sign_off = ucfirst(lc($sign_off)); 1608 my $ucfirst_sign_off = ucfirst(lc($sign_off));
1609 1609
1610 if ($sign_off !~ /$signature_tags/) {
1611 WARN("BAD_SIGN_OFF",
1612 "Non-standard signature: $sign_off\n" . $herecurr);
1613 }
1610 if (defined $space_before && $space_before ne "") { 1614 if (defined $space_before && $space_before ne "") {
1611 WARN("BAD_SIGN_OFF", 1615 WARN("BAD_SIGN_OFF",
1612 "Do not use whitespace before $ucfirst_sign_off\n" . $herecurr); 1616 "Do not use whitespace before $ucfirst_sign_off\n" . $herecurr);
@@ -1848,8 +1852,8 @@ sub process {
1848 1852
1849 my $pos = pos_last_openparen($rest); 1853 my $pos = pos_last_openparen($rest);
1850 if ($pos >= 0) { 1854 if ($pos >= 0) {
1851 $line =~ /^\+([ \t]*)/; 1855 $line =~ /^(\+| )([ \t]*)/;
1852 my $newindent = $1; 1856 my $newindent = $2;
1853 1857
1854 my $goodtabindent = $oldindent . 1858 my $goodtabindent = $oldindent .
1855 "\t" x ($pos / 8) . 1859 "\t" x ($pos / 8) .
@@ -2984,6 +2988,45 @@ sub process {
2984 } 2988 }
2985 } 2989 }
2986 2990
2991# do {} while (0) macro tests:
2992# single-statement macros do not need to be enclosed in do while (0) loop,
2993# macro should not end with a semicolon
2994 if ($^V && $^V ge 5.10.0 &&
2995 $realfile !~ m@/vmlinux.lds.h$@ &&
2996 $line =~ /^.\s*\#\s*define\s+$Ident(\()?/) {
2997 my $ln = $linenr;
2998 my $cnt = $realcnt;
2999 my ($off, $dstat, $dcond, $rest);
3000 my $ctx = '';
3001 ($dstat, $dcond, $ln, $cnt, $off) =
3002 ctx_statement_block($linenr, $realcnt, 0);
3003 $ctx = $dstat;
3004
3005 $dstat =~ s/\\\n.//g;
3006
3007 if ($dstat =~ /^\+\s*#\s*define\s+$Ident\s*${balanced_parens}\s*do\s*{(.*)\s*}\s*while\s*\(\s*0\s*\)\s*([;\s]*)\s*$/) {
3008 my $stmts = $2;
3009 my $semis = $3;
3010
3011 $ctx =~ s/\n*$//;
3012 my $cnt = statement_rawlines($ctx);
3013 my $herectx = $here . "\n";
3014
3015 for (my $n = 0; $n < $cnt; $n++) {
3016 $herectx .= raw_line($linenr, $n) . "\n";
3017 }
3018
3019 if (($stmts =~ tr/;/;/) == 1) {
3020 WARN("SINGLE_STATEMENT_DO_WHILE_MACRO",
3021 "Single statement macros should not use a do {} while (0) loop\n" . "$herectx");
3022 }
3023 if (defined $semis && $semis ne "") {
3024 WARN("DO_WHILE_MACRO_WITH_TRAILING_SEMICOLON",
3025 "do {} while (0) macros should not be semicolon terminated\n" . "$herectx");
3026 }
3027 }
3028 }
3029
2987# make sure symbols are always wrapped with VMLINUX_SYMBOL() ... 3030# make sure symbols are always wrapped with VMLINUX_SYMBOL() ...
2988# all assignments may have only one of the following with an assignment: 3031# all assignments may have only one of the following with an assignment:
2989# . 3032# .
@@ -3261,6 +3304,12 @@ sub process {
3261 "sizeof(& should be avoided\n" . $herecurr); 3304 "sizeof(& should be avoided\n" . $herecurr);
3262 } 3305 }
3263 3306
3307# check for sizeof without parenthesis
3308 if ($line =~ /\bsizeof\s+((?:\*\s*|)$Lval|$Type(?:\s+$Lval|))/) {
3309 WARN("SIZEOF_PARENTHESIS",
3310 "sizeof $1 should be sizeof($1)\n" . $herecurr);
3311 }
3312
3264# check for line continuations in quoted strings with odd counts of " 3313# check for line continuations in quoted strings with odd counts of "
3265 if ($rawline =~ /\\$/ && $rawline =~ tr/"/"/ % 2) { 3314 if ($rawline =~ /\\$/ && $rawline =~ tr/"/"/ % 2) {
3266 WARN("LINE_CONTINUATIONS", 3315 WARN("LINE_CONTINUATIONS",
@@ -3309,6 +3358,22 @@ sub process {
3309 } 3358 }
3310 } 3359 }
3311 3360
3361# check usleep_range arguments
3362 if ($^V && $^V ge 5.10.0 &&
3363 defined $stat &&
3364 $stat =~ /^\+(?:.*?)\busleep_range\s*\(\s*($FuncArg)\s*,\s*($FuncArg)\s*\)/) {
3365 my $min = $1;
3366 my $max = $7;
3367 if ($min eq $max) {
3368 WARN("USLEEP_RANGE",
3369 "usleep_range should not use min == max args; see Documentation/timers/timers-howto.txt\n" . "$here\n$stat\n");
3370 } elsif ($min =~ /^\d+$/ && $max =~ /^\d+$/ &&
3371 $min > $max) {
3372 WARN("USLEEP_RANGE",
3373 "usleep_range args reversed, use min then max; see Documentation/timers/timers-howto.txt\n" . "$here\n$stat\n");
3374 }
3375 }
3376
3312# check for new externs in .c files. 3377# check for new externs in .c files.
3313 if ($realfile =~ /\.c$/ && defined $stat && 3378 if ($realfile =~ /\.c$/ && defined $stat &&
3314 $stat =~ /^.\s*(?:extern\s+)?$Type\s+($Ident)(\s*)\(/s) 3379 $stat =~ /^.\s*(?:extern\s+)?$Type\s+($Ident)(\s*)\(/s)
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index 79690f401a58..6c77f63c7591 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -3185,6 +3185,7 @@ static int selinux_file_fcntl(struct file *file, unsigned int cmd,
3185 case F_GETFL: 3185 case F_GETFL:
3186 case F_GETOWN: 3186 case F_GETOWN:
3187 case F_GETSIG: 3187 case F_GETSIG:
3188 case F_GETOWNER_UIDS:
3188 /* Just check FD__USE permission */ 3189 /* Just check FD__USE permission */
3189 err = file_has_perm(cred, file, 0); 3190 err = file_has_perm(cred, file, 0);
3190 break; 3191 break;
diff --git a/sound/core/misc.c b/sound/core/misc.c
index 768167925409..30e027ecf4da 100644
--- a/sound/core/misc.c
+++ b/sound/core/misc.c
@@ -68,6 +68,7 @@ void __snd_printk(unsigned int level, const char *path, int line,
68{ 68{
69 va_list args; 69 va_list args;
70#ifdef CONFIG_SND_VERBOSE_PRINTK 70#ifdef CONFIG_SND_VERBOSE_PRINTK
71 int kern_level;
71 struct va_format vaf; 72 struct va_format vaf;
72 char verbose_fmt[] = KERN_DEFAULT "ALSA %s:%d %pV"; 73 char verbose_fmt[] = KERN_DEFAULT "ALSA %s:%d %pV";
73#endif 74#endif
@@ -81,12 +82,16 @@ void __snd_printk(unsigned int level, const char *path, int line,
81#ifdef CONFIG_SND_VERBOSE_PRINTK 82#ifdef CONFIG_SND_VERBOSE_PRINTK
82 vaf.fmt = format; 83 vaf.fmt = format;
83 vaf.va = &args; 84 vaf.va = &args;
84 if (format[0] == '<' && format[2] == '>') { 85
85 memcpy(verbose_fmt, format, 3); 86 kern_level = printk_get_level(format);
86 vaf.fmt = format + 3; 87 if (kern_level) {
88 const char *end_of_header = printk_skip_level(format);
89 memcpy(verbose_fmt, format, end_of_header - format);
90 vaf.fmt = end_of_header;
87 } else if (level) 91 } else if (level)
88 memcpy(verbose_fmt, KERN_DEBUG, 3); 92 memcpy(verbose_fmt, KERN_DEBUG, sizeof(KERN_DEBUG) - 1);
89 printk(verbose_fmt, sanity_file_name(path), line, &vaf); 93 printk(verbose_fmt, sanity_file_name(path), line, &vaf);
94
90#else 95#else
91 vprintk(format, args); 96 vprintk(format, args);
92#endif 97#endif
diff --git a/tools/testing/fault-injection/failcmd.sh b/tools/testing/fault-injection/failcmd.sh
new file mode 100644
index 000000000000..1776e924b202
--- /dev/null
+++ b/tools/testing/fault-injection/failcmd.sh
@@ -0,0 +1,219 @@
1#!/bin/bash
2#
3# NAME
4# failcmd.sh - run a command with injecting slab/page allocation failures
5#
6# SYNOPSIS
7# failcmd.sh --help
8# failcmd.sh [<options>] command [arguments]
9#
10# DESCRIPTION
11# Run command with injecting slab/page allocation failures by fault
12# injection.
13#
14# NOTE: you need to run this script as root.
15#
16
17usage()
18{
19 cat >&2 <<EOF
20Usage: $0 [options] command [arguments]
21
22OPTIONS
23 -p percent
24 --probability=percent
25 likelihood of failure injection, in percent.
26 Default value is 1
27
28 -t value
29 --times=value
30 specifies how many times failures may happen at most.
31 Default value is 1
32
33 --oom-kill-allocating-task=value
34 set /proc/sys/vm/oom_kill_allocating_task to specified value
35 before running the command.
36 Default value is 1
37
38 -h, --help
39 Display a usage message and exit
40
41 --interval=value, --space=value, --verbose=value, --task-filter=value,
42 --stacktrace-depth=value, --require-start=value, --require-end=value,
43 --reject-start=value, --reject-end=value, --ignore-gfp-wait=value
44 See Documentation/fault-injection/fault-injection.txt for more
45 information
46
47 failslab options:
48 --cache-filter=value
49
50 fail_page_alloc options:
51 --ignore-gfp-highmem=value, --min-order=value
52
53ENVIRONMENT
54 FAILCMD_TYPE
55 The following values for FAILCMD_TYPE are recognized:
56
57 failslab
58 inject slab allocation failures
59 fail_page_alloc
60 inject page allocation failures
61
62 If FAILCMD_TYPE is not defined, then failslab is used.
63EOF
64}
65
66if [ $UID != 0 ]; then
67 echo must be run as root >&2
68 exit 1
69fi
70
71DEBUGFS=`mount -t debugfs | head -1 | awk '{ print $3}'`
72
73if [ ! -d "$DEBUGFS" ]; then
74 echo debugfs is not mounted >&2
75 exit 1
76fi
77
78FAILCMD_TYPE=${FAILCMD_TYPE:-failslab}
79FAULTATTR=$DEBUGFS/$FAILCMD_TYPE
80
81if [ ! -d $FAULTATTR ]; then
82 echo $FAILCMD_TYPE is not available >&2
83 exit 1
84fi
85
86LONGOPTS=probability:,interval:,times:,space:,verbose:,task-filter:
87LONGOPTS=$LONGOPTS,stacktrace-depth:,require-start:,require-end:
88LONGOPTS=$LONGOPTS,reject-start:,reject-end:,oom-kill-allocating-task:,help
89
90if [ $FAILCMD_TYPE = failslab ]; then
91 LONGOPTS=$LONGOPTS,ignore-gfp-wait:,cache-filter:
92elif [ $FAILCMD_TYPE = fail_page_alloc ]; then
93 LONGOPTS=$LONGOPTS,ignore-gfp-wait:,ignore-gfp-highmem:,min-order:
94fi
95
96TEMP=`getopt -o p:i:t:s:v:h --long $LONGOPTS -n 'failcmd.sh' -- "$@"`
97
98if [ $? != 0 ]; then
99 usage
100 exit 1
101fi
102
103eval set -- "$TEMP"
104
105fault_attr_default()
106{
107 echo N > $FAULTATTR/task-filter
108 echo 0 > $FAULTATTR/probability
109 echo 1 > $FAULTATTR/times
110}
111
112fault_attr_default
113
114oom_kill_allocating_task_saved=`cat /proc/sys/vm/oom_kill_allocating_task`
115
116restore_values()
117{
118 fault_attr_default
119 echo $oom_kill_allocating_task_saved \
120 > /proc/sys/vm/oom_kill_allocating_task
121}
122
123#
124# Default options
125#
126declare -i oom_kill_allocating_task=1
127declare task_filter=Y
128declare -i probability=1
129declare -i times=1
130
131while true; do
132 case "$1" in
133 -p|--probability)
134 probability=$2
135 shift 2
136 ;;
137 -i|--interval)
138 echo $2 > $FAULTATTR/interval
139 shift 2
140 ;;
141 -t|--times)
142 times=$2
143 shift 2
144 ;;
145 -s|--space)
146 echo $2 > $FAULTATTR/space
147 shift 2
148 ;;
149 -v|--verbose)
150 echo $2 > $FAULTATTR/verbose
151 shift 2
152 ;;
153 --task-filter)
154 task_filter=$2
155 shift 2
156 ;;
157 --stacktrace-depth)
158 echo $2 > $FAULTATTR/stacktrace-depth
159 shift 2
160 ;;
161 --require-start)
162 echo $2 > $FAULTATTR/require-start
163 shift 2
164 ;;
165 --require-end)
166 echo $2 > $FAULTATTR/require-end
167 shift 2
168 ;;
169 --reject-start)
170 echo $2 > $FAULTATTR/reject-start
171 shift 2
172 ;;
173 --reject-end)
174 echo $2 > $FAULTATTR/reject-end
175 shift 2
176 ;;
177 --oom-kill-allocating-task)
178 oom_kill_allocating_task=$2
179 shift 2
180 ;;
181 --ignore-gfp-wait)
182 echo $2 > $FAULTATTR/ignore-gfp-wait
183 shift 2
184 ;;
185 --cache-filter)
186 echo $2 > $FAULTATTR/cache_filter
187 shift 2
188 ;;
189 --ignore-gfp-highmem)
190 echo $2 > $FAULTATTR/ignore-gfp-highmem
191 shift 2
192 ;;
193 --min-order)
194 echo $2 > $FAULTATTR/min-order
195 shift 2
196 ;;
197 -h|--help)
198 usage
199 exit 0
200 shift
201 ;;
202 --)
203 shift
204 break
205 ;;
206 esac
207done
208
209[ -z "$@" ] && exit 0
210
211echo $oom_kill_allocating_task > /proc/sys/vm/oom_kill_allocating_task
212echo $task_filter > $FAULTATTR/task-filter
213echo $probability > $FAULTATTR/probability
214echo $times > $FAULTATTR/times
215
216trap "restore_values" SIGINT SIGTERM EXIT
217
218cmd="echo 1 > /proc/self/make-it-fail && exec $@"
219bash -c "$cmd"
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
index a4162e15c25f..85baf11e2acd 100644
--- a/tools/testing/selftests/Makefile
+++ b/tools/testing/selftests/Makefile
@@ -1,4 +1,4 @@
1TARGETS = breakpoints kcmp mqueue vm 1TARGETS = breakpoints kcmp mqueue vm cpu-hotplug memory-hotplug
2 2
3all: 3all:
4 for TARGET in $(TARGETS); do \ 4 for TARGET in $(TARGETS); do \
diff --git a/tools/testing/selftests/cpu-hotplug/Makefile b/tools/testing/selftests/cpu-hotplug/Makefile
new file mode 100644
index 000000000000..7c9c20ff578a
--- /dev/null
+++ b/tools/testing/selftests/cpu-hotplug/Makefile
@@ -0,0 +1,6 @@
1all:
2
3run_tests:
4 ./on-off-test.sh
5
6clean:
diff --git a/tools/testing/selftests/cpu-hotplug/on-off-test.sh b/tools/testing/selftests/cpu-hotplug/on-off-test.sh
new file mode 100644
index 000000000000..bdde7cf428bb
--- /dev/null
+++ b/tools/testing/selftests/cpu-hotplug/on-off-test.sh
@@ -0,0 +1,221 @@
1#!/bin/bash
2
3SYSFS=
4
5prerequisite()
6{
7 msg="skip all tests:"
8
9 if [ $UID != 0 ]; then
10 echo $msg must be run as root >&2
11 exit 0
12 fi
13
14 SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'`
15
16 if [ ! -d "$SYSFS" ]; then
17 echo $msg sysfs is not mounted >&2
18 exit 0
19 fi
20
21 if ! ls $SYSFS/devices/system/cpu/cpu* > /dev/null 2>&1; then
22 echo $msg cpu hotplug is not supported >&2
23 exit 0
24 fi
25}
26
27#
28# list all hot-pluggable CPUs
29#
30hotpluggable_cpus()
31{
32 local state=${1:-.\*}
33
34 for cpu in $SYSFS/devices/system/cpu/cpu*; do
35 if [ -f $cpu/online ] && grep -q $state $cpu/online; then
36 echo ${cpu##/*/cpu}
37 fi
38 done
39}
40
41hotplaggable_offline_cpus()
42{
43 hotpluggable_cpus 0
44}
45
46hotpluggable_online_cpus()
47{
48 hotpluggable_cpus 1
49}
50
51cpu_is_online()
52{
53 grep -q 1 $SYSFS/devices/system/cpu/cpu$1/online
54}
55
56cpu_is_offline()
57{
58 grep -q 0 $SYSFS/devices/system/cpu/cpu$1/online
59}
60
61online_cpu()
62{
63 echo 1 > $SYSFS/devices/system/cpu/cpu$1/online
64}
65
66offline_cpu()
67{
68 echo 0 > $SYSFS/devices/system/cpu/cpu$1/online
69}
70
71online_cpu_expect_success()
72{
73 local cpu=$1
74
75 if ! online_cpu $cpu; then
76 echo $FUNCNAME $cpu: unexpected fail >&2
77 elif ! cpu_is_online $cpu; then
78 echo $FUNCNAME $cpu: unexpected offline >&2
79 fi
80}
81
82online_cpu_expect_fail()
83{
84 local cpu=$1
85
86 if online_cpu $cpu 2> /dev/null; then
87 echo $FUNCNAME $cpu: unexpected success >&2
88 elif ! cpu_is_offline $cpu; then
89 echo $FUNCNAME $cpu: unexpected online >&2
90 fi
91}
92
93offline_cpu_expect_success()
94{
95 local cpu=$1
96
97 if ! offline_cpu $cpu; then
98 echo $FUNCNAME $cpu: unexpected fail >&2
99 elif ! cpu_is_offline $cpu; then
100 echo $FUNCNAME $cpu: unexpected offline >&2
101 fi
102}
103
104offline_cpu_expect_fail()
105{
106 local cpu=$1
107
108 if offline_cpu $cpu 2> /dev/null; then
109 echo $FUNCNAME $cpu: unexpected success >&2
110 elif ! cpu_is_online $cpu; then
111 echo $FUNCNAME $cpu: unexpected offline >&2
112 fi
113}
114
115error=-12
116priority=0
117
118while getopts e:hp: opt; do
119 case $opt in
120 e)
121 error=$OPTARG
122 ;;
123 h)
124 echo "Usage $0 [ -e errno ] [ -p notifier-priority ]"
125 exit
126 ;;
127 p)
128 priority=$OPTARG
129 ;;
130 esac
131done
132
133if ! [ "$error" -ge -4095 -a "$error" -lt 0 ]; then
134 echo "error code must be -4095 <= errno < 0" >&2
135 exit 1
136fi
137
138prerequisite
139
140#
141# Online all hot-pluggable CPUs
142#
143for cpu in `hotplaggable_offline_cpus`; do
144 online_cpu_expect_success $cpu
145done
146
147#
148# Offline all hot-pluggable CPUs
149#
150for cpu in `hotpluggable_online_cpus`; do
151 offline_cpu_expect_success $cpu
152done
153
154#
155# Online all hot-pluggable CPUs again
156#
157for cpu in `hotplaggable_offline_cpus`; do
158 online_cpu_expect_success $cpu
159done
160
161#
162# Test with cpu notifier error injection
163#
164
165DEBUGFS=`mount -t debugfs | head -1 | awk '{ print $3 }'`
166NOTIFIER_ERR_INJECT_DIR=$DEBUGFS/notifier-error-inject/cpu
167
168prerequisite_extra()
169{
170 msg="skip extra tests:"
171
172 /sbin/modprobe -q -r cpu-notifier-error-inject
173 /sbin/modprobe -q cpu-notifier-error-inject priority=$priority
174
175 if [ ! -d "$DEBUGFS" ]; then
176 echo $msg debugfs is not mounted >&2
177 exit 0
178 fi
179
180 if [ ! -d $NOTIFIER_ERR_INJECT_DIR ]; then
181 echo $msg cpu-notifier-error-inject module is not available >&2
182 exit 0
183 fi
184}
185
186prerequisite_extra
187
188#
189# Offline all hot-pluggable CPUs
190#
191echo 0 > $NOTIFIER_ERR_INJECT_DIR/actions/CPU_DOWN_PREPARE/error
192for cpu in `hotpluggable_online_cpus`; do
193 offline_cpu_expect_success $cpu
194done
195
196#
197# Test CPU hot-add error handling (offline => online)
198#
199echo $error > $NOTIFIER_ERR_INJECT_DIR/actions/CPU_UP_PREPARE/error
200for cpu in `hotplaggable_offline_cpus`; do
201 online_cpu_expect_fail $cpu
202done
203
204#
205# Online all hot-pluggable CPUs
206#
207echo 0 > $NOTIFIER_ERR_INJECT_DIR/actions/CPU_UP_PREPARE/error
208for cpu in `hotplaggable_offline_cpus`; do
209 online_cpu_expect_success $cpu
210done
211
212#
213# Test CPU hot-remove error handling (online => offline)
214#
215echo $error > $NOTIFIER_ERR_INJECT_DIR/actions/CPU_DOWN_PREPARE/error
216for cpu in `hotpluggable_online_cpus`; do
217 offline_cpu_expect_fail $cpu
218done
219
220echo 0 > $NOTIFIER_ERR_INJECT_DIR/actions/CPU_DOWN_PREPARE/error
221/sbin/modprobe -q -r cpu-notifier-error-inject
diff --git a/tools/testing/selftests/memory-hotplug/Makefile b/tools/testing/selftests/memory-hotplug/Makefile
new file mode 100644
index 000000000000..7c9c20ff578a
--- /dev/null
+++ b/tools/testing/selftests/memory-hotplug/Makefile
@@ -0,0 +1,6 @@
1all:
2
3run_tests:
4 ./on-off-test.sh
5
6clean:
diff --git a/tools/testing/selftests/memory-hotplug/on-off-test.sh b/tools/testing/selftests/memory-hotplug/on-off-test.sh
new file mode 100644
index 000000000000..a2816f631542
--- /dev/null
+++ b/tools/testing/selftests/memory-hotplug/on-off-test.sh
@@ -0,0 +1,230 @@
1#!/bin/bash
2
3SYSFS=
4
5prerequisite()
6{
7 msg="skip all tests:"
8
9 if [ $UID != 0 ]; then
10 echo $msg must be run as root >&2
11 exit 0
12 fi
13
14 SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'`
15
16 if [ ! -d "$SYSFS" ]; then
17 echo $msg sysfs is not mounted >&2
18 exit 0
19 fi
20
21 if ! ls $SYSFS/devices/system/memory/memory* > /dev/null 2>&1; then
22 echo $msg memory hotplug is not supported >&2
23 exit 0
24 fi
25}
26
27#
28# list all hot-pluggable memory
29#
30hotpluggable_memory()
31{
32 local state=${1:-.\*}
33
34 for memory in $SYSFS/devices/system/memory/memory*; do
35 if grep -q 1 $memory/removable &&
36 grep -q $state $memory/state; then
37 echo ${memory##/*/memory}
38 fi
39 done
40}
41
42hotplaggable_offline_memory()
43{
44 hotpluggable_memory offline
45}
46
47hotpluggable_online_memory()
48{
49 hotpluggable_memory online
50}
51
52memory_is_online()
53{
54 grep -q online $SYSFS/devices/system/memory/memory$1/state
55}
56
57memory_is_offline()
58{
59 grep -q offline $SYSFS/devices/system/memory/memory$1/state
60}
61
62online_memory()
63{
64 echo online > $SYSFS/devices/system/memory/memory$1/state
65}
66
67offline_memory()
68{
69 echo offline > $SYSFS/devices/system/memory/memory$1/state
70}
71
72online_memory_expect_success()
73{
74 local memory=$1
75
76 if ! online_memory $memory; then
77 echo $FUNCNAME $memory: unexpected fail >&2
78 elif ! memory_is_online $memory; then
79 echo $FUNCNAME $memory: unexpected offline >&2
80 fi
81}
82
83online_memory_expect_fail()
84{
85 local memory=$1
86
87 if online_memory $memory 2> /dev/null; then
88 echo $FUNCNAME $memory: unexpected success >&2
89 elif ! memory_is_offline $memory; then
90 echo $FUNCNAME $memory: unexpected online >&2
91 fi
92}
93
94offline_memory_expect_success()
95{
96 local memory=$1
97
98 if ! offline_memory $memory; then
99 echo $FUNCNAME $memory: unexpected fail >&2
100 elif ! memory_is_offline $memory; then
101 echo $FUNCNAME $memory: unexpected offline >&2
102 fi
103}
104
105offline_memory_expect_fail()
106{
107 local memory=$1
108
109 if offline_memory $memory 2> /dev/null; then
110 echo $FUNCNAME $memory: unexpected success >&2
111 elif ! memory_is_online $memory; then
112 echo $FUNCNAME $memory: unexpected offline >&2
113 fi
114}
115
116error=-12
117priority=0
118ratio=10
119
120while getopts e:hp:r: opt; do
121 case $opt in
122 e)
123 error=$OPTARG
124 ;;
125 h)
126 echo "Usage $0 [ -e errno ] [ -p notifier-priority ] [ -r percent-of-memory-to-offline ]"
127 exit
128 ;;
129 p)
130 priority=$OPTARG
131 ;;
132 r)
133 ratio=$OPTARG
134 ;;
135 esac
136done
137
138if ! [ "$error" -ge -4095 -a "$error" -lt 0 ]; then
139 echo "error code must be -4095 <= errno < 0" >&2
140 exit 1
141fi
142
143prerequisite
144
145#
146# Online all hot-pluggable memory
147#
148for memory in `hotplaggable_offline_memory`; do
149 online_memory_expect_success $memory
150done
151
152#
153# Offline $ratio percent of hot-pluggable memory
154#
155for memory in `hotpluggable_online_memory`; do
156 if [ $((RANDOM % 100)) -lt $ratio ]; then
157 offline_memory_expect_success $memory
158 fi
159done
160
161#
162# Online all hot-pluggable memory again
163#
164for memory in `hotplaggable_offline_memory`; do
165 online_memory_expect_success $memory
166done
167
168#
169# Test with memory notifier error injection
170#
171
172DEBUGFS=`mount -t debugfs | head -1 | awk '{ print $3 }'`
173NOTIFIER_ERR_INJECT_DIR=$DEBUGFS/notifier-error-inject/memory
174
175prerequisite_extra()
176{
177 msg="skip extra tests:"
178
179 /sbin/modprobe -q -r memory-notifier-error-inject
180 /sbin/modprobe -q memory-notifier-error-inject priority=$priority
181
182 if [ ! -d "$DEBUGFS" ]; then
183 echo $msg debugfs is not mounted >&2
184 exit 0
185 fi
186
187 if [ ! -d $NOTIFIER_ERR_INJECT_DIR ]; then
188 echo $msg memory-notifier-error-inject module is not available >&2
189 exit 0
190 fi
191}
192
193prerequisite_extra
194
195#
196# Offline $ratio percent of hot-pluggable memory
197#
198echo 0 > $NOTIFIER_ERR_INJECT_DIR/actions/MEM_GOING_OFFLINE/error
199for memory in `hotpluggable_online_memory`; do
200 if [ $((RANDOM % 100)) -lt $ratio ]; then
201 offline_memory_expect_success $memory
202 fi
203done
204
205#
206# Test memory hot-add error handling (offline => online)
207#
208echo $error > $NOTIFIER_ERR_INJECT_DIR/actions/MEM_GOING_ONLINE/error
209for memory in `hotplaggable_offline_memory`; do
210 online_memory_expect_fail $memory
211done
212
213#
214# Online all hot-pluggable memory
215#
216echo 0 > $NOTIFIER_ERR_INJECT_DIR/actions/MEM_GOING_ONLINE/error
217for memory in `hotplaggable_offline_memory`; do
218 online_memory_expect_success $memory
219done
220
221#
222# Test memory hot-remove error handling (online => offline)
223#
224echo $error > $NOTIFIER_ERR_INJECT_DIR/actions/MEM_GOING_OFFLINE/error
225for memory in `hotpluggable_online_memory`; do
226 offline_memory_expect_fail $memory
227done
228
229echo 0 > $NOTIFIER_ERR_INJECT_DIR/actions/MEM_GOING_OFFLINE/error
230/sbin/modprobe -q -r memory-notifier-error-inject