aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-01-07 10:42:38 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-01-07 10:42:38 -0500
commitd0631c6e09f51e094ae5aec1eabe81cc63d78178 (patch)
tree69d8dc6fa37d2e440f37cda06c40f1800edb8a08
parentde9ac5cea33098143edd26d10ece7fe215e66623 (diff)
parent35dac27cedd14c3b6fcd4ba7bc3c31738cfd1831 (diff)
Merge branch 'akpm' (fixes from Andrew)
Merge emailed fixes from Andrew Morton: "Bunch of fixes: - delayed IPC updates. I held back on this because of some possible outstanding bug reports, but they appear to have been addressed in later versions - A bunch of MAINTAINERS updates - Yet Another RTC driver. I'd held this back while a couple of little issues were being worked out. I'm expecting an intrusive-but-simple patchset from Joe Perches which splits up printk.c into kernel/printk/*. That will be a pig to maintain for two months so if it passes testing I'd like to get it upstream after a week or so." * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (35 commits) printk: fix incorrect length from print_time() when seconds > 99999 drivers/rtc/rtc-vt8500.c: fix handling of data passed in struct rtc_time drivers/rtc/rtc-vt8500.c: correct handling of CR_24H bitfield rtc: add RTC driver for TPS6586x MAINTAINERS: fix drivers/staging/sm7xx/ MAINTAINERS: remove include/linux/of_pwm.h MAINTAINERS: remove arch/*/lib/perf_event*.c MAINTAINERS: remove drivers/mmc/host/imxmmc.* MAINTAINERS: fix Documentation/mei/ MAINTAINERS: remove arch/x86/platform/mrst/pmu.* MAINTAINERS: remove firmware/isci/ MAINTAINERS: fix drivers/ieee802154/ MAINTAINERS: fix .../plat-mxc/include/mach/imxfb.h MAINTAINERS: remove drivers/video/epson1355fb.c MAINTAINERS: fix drivers/media/usb/dvb-usb/cxusb* MAINTAINERS: adjust for UAPI MAINTAINERS: fix drivers/media/platform/atmel-isi.c MAINTAINERS: fix arch/arm/mach-at91/include/mach/at_hdmac.h MAINTAINERS: fix drivers/rtc/rtc-vt8500.c MAINTAINERS: remove arch/arm/plat-s5p/ ...
-rw-r--r--Documentation/sysctl/kernel.txt32
-rw-r--r--MAINTAINERS199
-rw-r--r--drivers/rtc/Kconfig8
-rw-r--r--drivers/rtc/Makefile1
-rw-r--r--drivers/rtc/rtc-tegra.c7
-rw-r--r--drivers/rtc/rtc-tps6586x.c356
-rw-r--r--drivers/rtc/rtc-vt8500.c11
-rw-r--r--include/asm-generic/tlb.h9
-rw-r--r--include/linux/ipc_namespace.h1
-rw-r--r--include/linux/mmzone.h8
-rw-r--r--include/linux/msg.h6
-rw-r--r--include/uapi/linux/msg.h1
-rw-r--r--ipc/compat.c46
-rw-r--r--ipc/ipc_sysctl.c32
-rw-r--r--ipc/msg.c123
-rw-r--r--ipc/msgutil.c43
-rw-r--r--ipc/util.c16
-rw-r--r--ipc/util.h2
-rw-r--r--kernel/printk.c5
-rw-r--r--mm/memory.c5
-rw-r--r--mm/page_alloc.c27
-rw-r--r--mm/page_isolation.c26
-rw-r--r--tools/testing/selftests/ipc/Makefile25
-rw-r--r--tools/testing/selftests/ipc/msgque.c246
24 files changed, 1035 insertions, 200 deletions
diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt
index 2907ba6c360..ccd42589e12 100644
--- a/Documentation/sysctl/kernel.txt
+++ b/Documentation/sysctl/kernel.txt
@@ -38,6 +38,7 @@ show up in /proc/sys/kernel:
38- l2cr [ PPC only ] 38- l2cr [ PPC only ]
39- modprobe ==> Documentation/debugging-modules.txt 39- modprobe ==> Documentation/debugging-modules.txt
40- modules_disabled 40- modules_disabled
41- msg_next_id [ sysv ipc ]
41- msgmax 42- msgmax
42- msgmnb 43- msgmnb
43- msgmni 44- msgmni
@@ -62,7 +63,9 @@ show up in /proc/sys/kernel:
62- rtsig-max 63- rtsig-max
63- rtsig-nr 64- rtsig-nr
64- sem 65- sem
66- sem_next_id [ sysv ipc ]
65- sg-big-buff [ generic SCSI device (sg) ] 67- sg-big-buff [ generic SCSI device (sg) ]
68- shm_next_id [ sysv ipc ]
66- shm_rmid_forced 69- shm_rmid_forced
67- shmall 70- shmall
68- shmmax [ sysv ipc ] 71- shmmax [ sysv ipc ]
@@ -320,6 +323,22 @@ to false.
320 323
321============================================================== 324==============================================================
322 325
326msg_next_id, sem_next_id, and shm_next_id:
327
328These three toggles allows to specify desired id for next allocated IPC
329object: message, semaphore or shared memory respectively.
330
331By default they are equal to -1, which means generic allocation logic.
332Possible values to set are in range {0..INT_MAX}.
333
334Notes:
3351) kernel doesn't guarantee, that new object will have desired id. So,
336it's up to userspace, how to handle an object with "wrong" id.
3372) Toggle with non-default value will be set back to -1 by kernel after
338successful IPC object allocation.
339
340==============================================================
341
323nmi_watchdog: 342nmi_watchdog:
324 343
325Enables/Disables the NMI watchdog on x86 systems. When the value is 344Enables/Disables the NMI watchdog on x86 systems. When the value is
@@ -542,6 +561,19 @@ are doing anyway :)
542 561
543============================================================== 562==============================================================
544 563
564shmall:
565
566This parameter sets the total amount of shared memory pages that
567can be used system wide. Hence, SHMALL should always be at least
568ceil(shmmax/PAGE_SIZE).
569
570If you are not sure what the default PAGE_SIZE is on your Linux
571system, you can run the following command:
572
573# getconf PAGE_SIZE
574
575==============================================================
576
545shmmax: 577shmmax:
546 578
547This value can be used to query and set the run time limit 579This value can be used to query and set the run time limit
diff --git a/MAINTAINERS b/MAINTAINERS
index 7a58a25a6e7..915564eda14 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -449,6 +449,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
449S: Maintained 449S: Maintained
450F: drivers/char/agp/ 450F: drivers/char/agp/
451F: include/linux/agp* 451F: include/linux/agp*
452F: include/uapi/linux/agp*
452 453
453AHA152X SCSI DRIVER 454AHA152X SCSI DRIVER
454M: "Juergen E. Fischer" <fischer@norbit.de> 455M: "Juergen E. Fischer" <fischer@norbit.de>
@@ -589,6 +590,7 @@ M: Jiri Kosina <jkosina@suse.cz>
589S: Odd fixes 590S: Odd fixes
590F: arch/x86/kernel/apm_32.c 591F: arch/x86/kernel/apm_32.c
591F: include/linux/apm_bios.h 592F: include/linux/apm_bios.h
593F: include/uapi/linux/apm_bios.h
592F: drivers/char/apm-emulation.c 594F: drivers/char/apm-emulation.c
593 595
594APPLE BCM5974 MULTITOUCH DRIVER 596APPLE BCM5974 MULTITOUCH DRIVER
@@ -1005,7 +1007,6 @@ F: drivers/mmc/host/msm_sdcc.c
1005F: drivers/mmc/host/msm_sdcc.h 1007F: drivers/mmc/host/msm_sdcc.h
1006F: drivers/tty/serial/msm_serial.h 1008F: drivers/tty/serial/msm_serial.h
1007F: drivers/tty/serial/msm_serial.c 1009F: drivers/tty/serial/msm_serial.c
1008F: drivers/platform/msm/
1009F: drivers/*/pm8???-* 1010F: drivers/*/pm8???-*
1010F: include/linux/mfd/pm8xxx/ 1011F: include/linux/mfd/pm8xxx/
1011T: git git://git.kernel.org/pub/scm/linux/kernel/git/davidb/linux-msm.git 1012T: git git://git.kernel.org/pub/scm/linux/kernel/git/davidb/linux-msm.git
@@ -1069,7 +1070,6 @@ M: Russell King <linux@arm.linux.org.uk>
1069L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1070L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1070W: http://www.arm.linux.org.uk/ 1071W: http://www.arm.linux.org.uk/
1071S: Maintained 1072S: Maintained
1072F: arch/arm/common/time-acorn.c
1073F: arch/arm/include/asm/hardware/entry-macro-iomd.S 1073F: arch/arm/include/asm/hardware/entry-macro-iomd.S
1074F: arch/arm/include/asm/hardware/ioc.h 1074F: arch/arm/include/asm/hardware/ioc.h
1075F: arch/arm/include/asm/hardware/iomd.h 1075F: arch/arm/include/asm/hardware/iomd.h
@@ -1094,7 +1094,6 @@ W: http://www.fluff.org/ben/linux/
1094S: Maintained 1094S: Maintained
1095F: arch/arm/plat-samsung/ 1095F: arch/arm/plat-samsung/
1096F: arch/arm/plat-s3c24xx/ 1096F: arch/arm/plat-s3c24xx/
1097F: arch/arm/plat-s5p/
1098F: arch/arm/mach-s3c24*/ 1097F: arch/arm/mach-s3c24*/
1099F: arch/arm/mach-s3c64xx/ 1098F: arch/arm/mach-s3c64xx/
1100F: drivers/*/*s3c2410* 1099F: drivers/*/*s3c2410*
@@ -1125,7 +1124,6 @@ M: Sylwester Nawrocki <s.nawrocki@samsung.com>
1125L: linux-arm-kernel@lists.infradead.org 1124L: linux-arm-kernel@lists.infradead.org
1126L: linux-media@vger.kernel.org 1125L: linux-media@vger.kernel.org
1127S: Maintained 1126S: Maintained
1128F: arch/arm/plat-s5p/dev-fimc*
1129F: arch/arm/plat-samsung/include/plat/*fimc* 1127F: arch/arm/plat-samsung/include/plat/*fimc*
1130F: drivers/media/platform/s5p-fimc/ 1128F: drivers/media/platform/s5p-fimc/
1131 1129
@@ -1136,7 +1134,7 @@ M: Jeongtae Park <jtp.park@samsung.com>
1136L: linux-arm-kernel@lists.infradead.org 1134L: linux-arm-kernel@lists.infradead.org
1137L: linux-media@vger.kernel.org 1135L: linux-media@vger.kernel.org
1138S: Maintained 1136S: Maintained
1139F: arch/arm/plat-s5p/dev-mfc.c 1137F: arch/arm/plat-samsung/s5p-dev-mfc.c
1140F: drivers/media/platform/s5p-mfc/ 1138F: drivers/media/platform/s5p-mfc/
1141 1139
1142ARM/SAMSUNG S5P SERIES TV SUBSYSTEM SUPPORT 1140ARM/SAMSUNG S5P SERIES TV SUBSYSTEM SUPPORT
@@ -1254,7 +1252,7 @@ F: drivers/video/vt8500lcdfb.*
1254F: drivers/video/wm8505fb* 1252F: drivers/video/wm8505fb*
1255F: drivers/video/wmt_ge_rops.* 1253F: drivers/video/wmt_ge_rops.*
1256F: drivers/tty/serial/vt8500_serial.c 1254F: drivers/tty/serial/vt8500_serial.c
1257F: drivers/rtc/rtc-vt8500-c 1255F: drivers/rtc/rtc-vt8500.c
1258F: drivers/mmc/host/wmt-sdmmc.c 1256F: drivers/mmc/host/wmt-sdmmc.c
1259 1257
1260ARM/ZIPIT Z2 SUPPORT 1258ARM/ZIPIT Z2 SUPPORT
@@ -1388,6 +1386,7 @@ W: http://linux-atm.sourceforge.net
1388S: Maintained 1386S: Maintained
1389F: drivers/atm/ 1387F: drivers/atm/
1390F: include/linux/atm* 1388F: include/linux/atm*
1389F: include/uapi/linux/atm*
1391 1390
1392ATMEL AT91 / AT32 MCI DRIVER 1391ATMEL AT91 / AT32 MCI DRIVER
1393M: Ludovic Desroches <ludovic.desroches@atmel.com> 1392M: Ludovic Desroches <ludovic.desroches@atmel.com>
@@ -1406,13 +1405,13 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1406S: Supported 1405S: Supported
1407F: drivers/dma/at_hdmac.c 1406F: drivers/dma/at_hdmac.c
1408F: drivers/dma/at_hdmac_regs.h 1407F: drivers/dma/at_hdmac_regs.h
1409F: arch/arm/mach-at91/include/mach/at_hdmac.h 1408F: include/linux/platform_data/dma-atmel.h
1410 1409
1411ATMEL ISI DRIVER 1410ATMEL ISI DRIVER
1412M: Josh Wu <josh.wu@atmel.com> 1411M: Josh Wu <josh.wu@atmel.com>
1413L: linux-media@vger.kernel.org 1412L: linux-media@vger.kernel.org
1414S: Supported 1413S: Supported
1415F: drivers/media/platform/atmel-isi.c 1414F: drivers/media/platform/soc_camera/atmel-isi.c
1416F: include/media/atmel-isi.h 1415F: include/media/atmel-isi.h
1417 1416
1418ATMEL LCDFB DRIVER 1417ATMEL LCDFB DRIVER
@@ -1467,6 +1466,7 @@ W: http://people.redhat.com/sgrubb/audit/
1467T: git git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current.git 1466T: git git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current.git
1468S: Maintained 1467S: Maintained
1469F: include/linux/audit.h 1468F: include/linux/audit.h
1469F: include/uapi/linux/audit.h
1470F: kernel/audit* 1470F: kernel/audit*
1471 1471
1472AUXILIARY DISPLAY DRIVERS 1472AUXILIARY DISPLAY DRIVERS
@@ -1497,7 +1497,7 @@ M: Ralf Baechle <ralf@linux-mips.org>
1497L: linux-hams@vger.kernel.org 1497L: linux-hams@vger.kernel.org
1498W: http://www.linux-ax25.org/ 1498W: http://www.linux-ax25.org/
1499S: Maintained 1499S: Maintained
1500F: include/linux/ax25.h 1500F: include/uapi/linux/ax25.h
1501F: include/net/ax25.h 1501F: include/net/ax25.h
1502F: net/ax25/ 1502F: net/ax25/
1503 1503
@@ -1558,7 +1558,7 @@ M: "Tigran A. Aivazian" <tigran@aivazian.fsnet.co.uk>
1558S: Maintained 1558S: Maintained
1559F: Documentation/filesystems/bfs.txt 1559F: Documentation/filesystems/bfs.txt
1560F: fs/bfs/ 1560F: fs/bfs/
1561F: include/linux/bfs_fs.h 1561F: include/uapi/linux/bfs_fs.h
1562 1562
1563BLACKFIN ARCHITECTURE 1563BLACKFIN ARCHITECTURE
1564M: Mike Frysinger <vapier@gentoo.org> 1564M: Mike Frysinger <vapier@gentoo.org>
@@ -1655,7 +1655,7 @@ L: netdev@vger.kernel.org
1655W: http://sourceforge.net/projects/bonding/ 1655W: http://sourceforge.net/projects/bonding/
1656S: Supported 1656S: Supported
1657F: drivers/net/bonding/ 1657F: drivers/net/bonding/
1658F: include/linux/if_bonding.h 1658F: include/uapi/linux/if_bonding.h
1659 1659
1660BROADCOM B44 10/100 ETHERNET DRIVER 1660BROADCOM B44 10/100 ETHERNET DRIVER
1661M: Gary Zambrano <zambrano@broadcom.com> 1661M: Gary Zambrano <zambrano@broadcom.com>
@@ -1734,6 +1734,7 @@ L: linux-scsi@vger.kernel.org
1734S: Supported 1734S: Supported
1735F: block/bsg.c 1735F: block/bsg.c
1736F: include/linux/bsg.h 1736F: include/linux/bsg.h
1737F: include/uapi/linux/bsg.h
1737 1738
1738BT87X AUDIO DRIVER 1739BT87X AUDIO DRIVER
1739M: Clemens Ladisch <clemens@ladisch.de> 1740M: Clemens Ladisch <clemens@ladisch.de>
@@ -1804,7 +1805,7 @@ L: netdev@vger.kernel.org
1804S: Supported 1805S: Supported
1805F: Documentation/networking/caif/ 1806F: Documentation/networking/caif/
1806F: drivers/net/caif/ 1807F: drivers/net/caif/
1807F: include/linux/caif/ 1808F: include/uapi/linux/caif/
1808F: include/net/caif/ 1809F: include/net/caif/
1809F: net/caif/ 1810F: net/caif/
1810 1811
@@ -1825,11 +1826,11 @@ W: http://gitorious.org/linux-can
1825T: git git://gitorious.org/linux-can/linux-can-next.git 1826T: git git://gitorious.org/linux-can/linux-can-next.git
1826S: Maintained 1827S: Maintained
1827F: net/can/ 1828F: net/can/
1828F: include/linux/can.h
1829F: include/linux/can/core.h 1829F: include/linux/can/core.h
1830F: include/linux/can/bcm.h 1830F: include/uapi/linux/can.h
1831F: include/linux/can/raw.h 1831F: include/uapi/linux/can/bcm.h
1832F: include/linux/can/gw.h 1832F: include/uapi/linux/can/raw.h
1833F: include/uapi/linux/can/gw.h
1833 1834
1834CAN NETWORK DRIVERS 1835CAN NETWORK DRIVERS
1835M: Wolfgang Grandegger <wg@grandegger.com> 1836M: Wolfgang Grandegger <wg@grandegger.com>
@@ -1840,15 +1841,16 @@ T: git git://gitorious.org/linux-can/linux-can-next.git
1840S: Maintained 1841S: Maintained
1841F: drivers/net/can/ 1842F: drivers/net/can/
1842F: include/linux/can/dev.h 1843F: include/linux/can/dev.h
1843F: include/linux/can/error.h
1844F: include/linux/can/netlink.h
1845F: include/linux/can/platform/ 1844F: include/linux/can/platform/
1845F: include/uapi/linux/can/error.h
1846F: include/uapi/linux/can/netlink.h
1846 1847
1847CAPABILITIES 1848CAPABILITIES
1848M: Serge Hallyn <serge.hallyn@canonical.com> 1849M: Serge Hallyn <serge.hallyn@canonical.com>
1849L: linux-security-module@vger.kernel.org 1850L: linux-security-module@vger.kernel.org
1850S: Supported 1851S: Supported
1851F: include/linux/capability.h 1852F: include/linux/capability.h
1853F: include/uapi/linux/capability.h
1852F: security/capability.c 1854F: security/capability.c
1853F: security/commoncap.c 1855F: security/commoncap.c
1854F: kernel/capability.c 1856F: kernel/capability.c
@@ -1861,6 +1863,7 @@ W: http://www.ibm.com/developerworks/power/cell/
1861S: Supported 1863S: Supported
1862F: arch/powerpc/include/asm/cell*.h 1864F: arch/powerpc/include/asm/cell*.h
1863F: arch/powerpc/include/asm/spu*.h 1865F: arch/powerpc/include/asm/spu*.h
1866F: arch/powerpc/include/uapi/asm/spu*.h
1864F: arch/powerpc/oprofile/*cell* 1867F: arch/powerpc/oprofile/*cell*
1865F: arch/powerpc/platforms/cell/ 1868F: arch/powerpc/platforms/cell/
1866 1869
@@ -1909,7 +1912,7 @@ W: http://wireless.kernel.org/
1909T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git 1912T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
1910T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git 1913T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
1911S: Maintained 1914S: Maintained
1912F: include/linux/nl80211.h 1915F: include/uapi/linux/nl80211.h
1913F: include/net/cfg80211.h 1916F: include/net/cfg80211.h
1914F: net/wireless/* 1917F: net/wireless/*
1915X: net/wireless/wext* 1918X: net/wireless/wext*
@@ -2012,6 +2015,7 @@ S: Maintained
2012F: Documentation/filesystems/coda.txt 2015F: Documentation/filesystems/coda.txt
2013F: fs/coda/ 2016F: fs/coda/
2014F: include/linux/coda*.h 2017F: include/linux/coda*.h
2018F: include/uapi/linux/coda*.h
2015 2019
2016COMMON CLK FRAMEWORK 2020COMMON CLK FRAMEWORK
2017M: Mike Turquette <mturquette@linaro.org> 2021M: Mike Turquette <mturquette@linaro.org>
@@ -2266,6 +2270,7 @@ W: http://www.cyclades.com/
2266S: Orphan 2270S: Orphan
2267F: drivers/tty/cyclades.c 2271F: drivers/tty/cyclades.c
2268F: include/linux/cyclades.h 2272F: include/linux/cyclades.h
2273F: include/uapi/linux/cyclades.h
2269 2274
2270CYCLADES PC300 DRIVER 2275CYCLADES PC300 DRIVER
2271W: http://www.cyclades.com/ 2276W: http://www.cyclades.com/
@@ -2323,6 +2328,7 @@ L: dccp@vger.kernel.org
2323W: http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp 2328W: http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp
2324S: Maintained 2329S: Maintained
2325F: include/linux/dccp.h 2330F: include/linux/dccp.h
2331F: include/uapi/linux/dccp.h
2326F: include/linux/tfrc.h 2332F: include/linux/tfrc.h
2327F: net/dccp/ 2333F: net/dccp/
2328 2334
@@ -2349,7 +2355,7 @@ M: Massimo Dal Zotto <dz@debian.org>
2349W: http://www.debian.org/~dz/i8k/ 2355W: http://www.debian.org/~dz/i8k/
2350S: Maintained 2356S: Maintained
2351F: drivers/char/i8k.c 2357F: drivers/char/i8k.c
2352F: include/linux/i8k.h 2358F: include/uapi/linux/i8k.h
2353 2359
2354DELL SYSTEMS MANAGEMENT BASE DRIVER (dcdbas) 2360DELL SYSTEMS MANAGEMENT BASE DRIVER (dcdbas)
2355M: Doug Warzecha <Douglas_Warzecha@dell.com> 2361M: Doug Warzecha <Douglas_Warzecha@dell.com>
@@ -2422,6 +2428,7 @@ S: Maintained
2422F: Documentation/filesystems/quota.txt 2428F: Documentation/filesystems/quota.txt
2423F: fs/quota/ 2429F: fs/quota/
2424F: include/linux/quota*.h 2430F: include/linux/quota*.h
2431F: include/uapi/linux/quota*.h
2425 2432
2426DISPLAYLINK USB 2.0 FRAMEBUFFER DRIVER (UDLFB) 2433DISPLAYLINK USB 2.0 FRAMEBUFFER DRIVER (UDLFB)
2427M: Bernie Thompson <bernie@plugable.com> 2434M: Bernie Thompson <bernie@plugable.com>
@@ -2528,6 +2535,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
2528S: Maintained 2535S: Maintained
2529F: drivers/gpu/drm/ 2536F: drivers/gpu/drm/
2530F: include/drm/ 2537F: include/drm/
2538F: include/uapi/drm/
2531 2539
2532INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets) 2540INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
2533M: Daniel Vetter <daniel.vetter@ffwll.ch> 2541M: Daniel Vetter <daniel.vetter@ffwll.ch>
@@ -2537,6 +2545,7 @@ T: git git://people.freedesktop.org/~danvet/drm-intel
2537S: Supported 2545S: Supported
2538F: drivers/gpu/drm/i915 2546F: drivers/gpu/drm/i915
2539F: include/drm/i915* 2547F: include/drm/i915*
2548F: include/uapi/drm/i915*
2540 2549
2541DRM DRIVERS FOR EXYNOS 2550DRM DRIVERS FOR EXYNOS
2542M: Inki Dae <inki.dae@samsung.com> 2551M: Inki Dae <inki.dae@samsung.com>
@@ -2548,6 +2557,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git
2548S: Supported 2557S: Supported
2549F: drivers/gpu/drm/exynos 2558F: drivers/gpu/drm/exynos
2550F: include/drm/exynos* 2559F: include/drm/exynos*
2560F: include/uapi/drm/exynos*
2551 2561
2552DRM DRIVERS FOR NVIDIA TEGRA 2562DRM DRIVERS FOR NVIDIA TEGRA
2553M: Thierry Reding <thierry.reding@avionic-design.de> 2563M: Thierry Reding <thierry.reding@avionic-design.de>
@@ -2622,7 +2632,7 @@ W: http://github.com/mkrufky
2622Q: http://patchwork.linuxtv.org/project/linux-media/list/ 2632Q: http://patchwork.linuxtv.org/project/linux-media/list/
2623T: git git://linuxtv.org/media_tree.git 2633T: git git://linuxtv.org/media_tree.git
2624S: Maintained 2634S: Maintained
2625F: drivers/media/usb/dvb-usb-v2/cxusb* 2635F: drivers/media/usb/dvb-usb/cxusb*
2626 2636
2627DVB_USB_CYPRESS_FIRMWARE MEDIA DRIVER 2637DVB_USB_CYPRESS_FIRMWARE MEDIA DRIVER
2628M: Antti Palosaari <crope@iki.fi> 2638M: Antti Palosaari <crope@iki.fi>
@@ -2722,6 +2732,7 @@ L: netfilter-devel@vger.kernel.org
2722W: http://ebtables.sourceforge.net/ 2732W: http://ebtables.sourceforge.net/
2723S: Maintained 2733S: Maintained
2724F: include/linux/netfilter_bridge/ebt_*.h 2734F: include/linux/netfilter_bridge/ebt_*.h
2735F: include/uapi/linux/netfilter_bridge/ebt_*.h
2725F: net/bridge/netfilter/ebt*.c 2736F: net/bridge/netfilter/ebt*.c
2726 2737
2727EC100 MEDIA DRIVER 2738EC100 MEDIA DRIVER
@@ -2933,12 +2944,6 @@ M: Maxim Levitsky <maximlevitsky@gmail.com>
2933S: Maintained 2944S: Maintained
2934F: drivers/media/rc/ene_ir.* 2945F: drivers/media/rc/ene_ir.*
2935 2946
2936EPSON 1355 FRAMEBUFFER DRIVER
2937M: Christopher Hoover <ch@murgatroid.com>
2938M: Christopher Hoover <ch@hpl.hp.com>
2939S: Maintained
2940F: drivers/video/epson1355fb.c
2941
2942EPSON S1D13XXX FRAMEBUFFER DRIVER 2947EPSON S1D13XXX FRAMEBUFFER DRIVER
2943M: Kristoffer Ericson <kristoffer.ericson@gmail.com> 2948M: Kristoffer Ericson <kristoffer.ericson@gmail.com>
2944S: Maintained 2949S: Maintained
@@ -3051,6 +3056,7 @@ M: Eric Paris <eparis@redhat.com>
3051S: Maintained 3056S: Maintained
3052F: fs/notify/fanotify/ 3057F: fs/notify/fanotify/
3053F: include/linux/fanotify.h 3058F: include/linux/fanotify.h
3059F: include/uapi/linux/fanotify.h
3054 3060
3055FARSYNC SYNCHRONOUS DRIVER 3061FARSYNC SYNCHRONOUS DRIVER
3056M: Kevin Curtis <kevin.curtis@farsite.co.uk> 3062M: Kevin Curtis <kevin.curtis@farsite.co.uk>
@@ -3074,6 +3080,7 @@ F: drivers/scsi/fcoe/
3074F: include/scsi/fc/ 3080F: include/scsi/fc/
3075F: include/scsi/libfc.h 3081F: include/scsi/libfc.h
3076F: include/scsi/libfcoe.h 3082F: include/scsi/libfcoe.h
3083F: include/uapi/scsi/fc/
3077 3084
3078FILE LOCKING (flock() and fcntl()/lockf()) 3085FILE LOCKING (flock() and fcntl()/lockf())
3079M: Matthew Wilcox <matthew@wil.cx> 3086M: Matthew Wilcox <matthew@wil.cx>
@@ -3081,6 +3088,8 @@ L: linux-fsdevel@vger.kernel.org
3081S: Maintained 3088S: Maintained
3082F: include/linux/fcntl.h 3089F: include/linux/fcntl.h
3083F: include/linux/fs.h 3090F: include/linux/fs.h
3091F: include/uapi/linux/fcntl.h
3092F: include/uapi/linux/fs.h
3084F: fs/fcntl.c 3093F: fs/fcntl.c
3085F: fs/locks.c 3094F: fs/locks.c
3086 3095
@@ -3170,6 +3179,8 @@ F: Documentation/devicetree/bindings/fb/
3170F: drivers/video/ 3179F: drivers/video/
3171F: include/video/ 3180F: include/video/
3172F: include/linux/fb.h 3181F: include/linux/fb.h
3182F: include/uapi/video/
3183F: include/uapi/linux/fb.h
3173 3184
3174FREESCALE DIU FRAMEBUFFER DRIVER 3185FREESCALE DIU FRAMEBUFFER DRIVER
3175M: Timur Tabi <timur@freescale.com> 3186M: Timur Tabi <timur@freescale.com>
@@ -3196,7 +3207,7 @@ M: Sascha Hauer <kernel@pengutronix.de>
3196L: linux-fbdev@vger.kernel.org 3207L: linux-fbdev@vger.kernel.org
3197L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 3208L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
3198S: Maintained 3209S: Maintained
3199F: arch/arm/plat-mxc/include/mach/imxfb.h 3210F: include/linux/platform_data/video-imxfb.h
3200F: drivers/video/imxfb.c 3211F: drivers/video/imxfb.c
3201 3212
3202FREESCALE SOC FS_ENET DRIVER 3213FREESCALE SOC FS_ENET DRIVER
@@ -3314,7 +3325,7 @@ L: fuse-devel@lists.sourceforge.net
3314W: http://fuse.sourceforge.net/ 3325W: http://fuse.sourceforge.net/
3315S: Maintained 3326S: Maintained
3316F: fs/fuse/ 3327F: fs/fuse/
3317F: include/linux/fuse.h 3328F: include/uapi/linux/fuse.h
3318 3329
3319FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit) 3330FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit)
3320M: Rik Faith <faith@cs.unc.edu> 3331M: Rik Faith <faith@cs.unc.edu>
@@ -3361,6 +3372,7 @@ L: linux-arch@vger.kernel.org
3361T: git git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic.git 3372T: git git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic.git
3362S: Maintained 3373S: Maintained
3363F: include/asm-generic 3374F: include/asm-generic
3375F: include/uapi/asm-generic
3364 3376
3365GENERIC UIO DRIVER FOR PCI DEVICES 3377GENERIC UIO DRIVER FOR PCI DEVICES
3366M: "Michael S. Tsirkin" <mst@redhat.com> 3378M: "Michael S. Tsirkin" <mst@redhat.com>
@@ -3377,7 +3389,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-nmw.git
3377S: Supported 3389S: Supported
3378F: Documentation/filesystems/gfs2*.txt 3390F: Documentation/filesystems/gfs2*.txt
3379F: fs/gfs2/ 3391F: fs/gfs2/
3380F: include/linux/gfs2_ondisk.h 3392F: include/uapi/linux/gfs2_ondisk.h
3381 3393
3382GIGASET ISDN DRIVERS 3394GIGASET ISDN DRIVERS
3383M: Hansjoerg Lipp <hjlipp@web.de> 3395M: Hansjoerg Lipp <hjlipp@web.de>
@@ -3387,7 +3399,7 @@ W: http://gigaset307x.sourceforge.net/
3387S: Maintained 3399S: Maintained
3388F: Documentation/isdn/README.gigaset 3400F: Documentation/isdn/README.gigaset
3389F: drivers/isdn/gigaset/ 3401F: drivers/isdn/gigaset/
3390F: include/linux/gigaset_dev.h 3402F: include/uapi/linux/gigaset_dev.h
3391 3403
3392GPIO SUBSYSTEM 3404GPIO SUBSYSTEM
3393M: Grant Likely <grant.likely@secretlab.ca> 3405M: Grant Likely <grant.likely@secretlab.ca>
@@ -3544,6 +3556,7 @@ S: Supported
3544F: Documentation/scsi/hpsa.txt 3556F: Documentation/scsi/hpsa.txt
3545F: drivers/scsi/hpsa*.[ch] 3557F: drivers/scsi/hpsa*.[ch]
3546F: include/linux/cciss*.h 3558F: include/linux/cciss*.h
3559F: include/uapi/linux/cciss*.h
3547 3560
3548HEWLETT-PACKARD SMART CISS RAID DRIVER (cciss) 3561HEWLETT-PACKARD SMART CISS RAID DRIVER (cciss)
3549M: Mike Miller <mike.miller@hp.com> 3562M: Mike Miller <mike.miller@hp.com>
@@ -3552,6 +3565,7 @@ S: Supported
3552F: Documentation/blockdev/cciss.txt 3565F: Documentation/blockdev/cciss.txt
3553F: drivers/block/cciss* 3566F: drivers/block/cciss*
3554F: include/linux/cciss_ioctl.h 3567F: include/linux/cciss_ioctl.h
3568F: include/uapi/linux/cciss_ioctl.h
3555 3569
3556HFS FILESYSTEM 3570HFS FILESYSTEM
3557L: linux-fsdevel@vger.kernel.org 3571L: linux-fsdevel@vger.kernel.org
@@ -3586,6 +3600,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git
3586S: Maintained 3600S: Maintained
3587F: drivers/hid/ 3601F: drivers/hid/
3588F: include/linux/hid* 3602F: include/linux/hid*
3603F: include/uapi/linux/hid*
3589 3604
3590HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS 3605HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS
3591M: Thomas Gleixner <tglx@linutronix.de> 3606M: Thomas Gleixner <tglx@linutronix.de>
@@ -3617,7 +3632,7 @@ M: Jes Sorensen <jes@trained-monkey.org>
3617L: linux-hippi@sunsite.dk 3632L: linux-hippi@sunsite.dk
3618S: Maintained 3633S: Maintained
3619F: include/linux/hippidevice.h 3634F: include/linux/hippidevice.h
3620F: include/linux/if_hippi.h 3635F: include/uapi/linux/if_hippi.h
3621F: net/802/hippi.c 3636F: net/802/hippi.c
3622F: drivers/net/hippi/ 3637F: drivers/net/hippi/
3623 3638
@@ -3645,6 +3660,7 @@ S: Maintained
3645F: Documentation/timers/hpet.txt 3660F: Documentation/timers/hpet.txt
3646F: drivers/char/hpet.c 3661F: drivers/char/hpet.c
3647F: include/linux/hpet.h 3662F: include/linux/hpet.h
3663F: include/uapi/linux/hpet.h
3648 3664
3649HPET: x86 3665HPET: x86
3650M: "Venkatesh Pallipadi (Venki)" <venki@google.com> 3666M: "Venkatesh Pallipadi (Venki)" <venki@google.com>
@@ -3745,6 +3761,8 @@ F: Documentation/i2c/
3745F: drivers/i2c/ 3761F: drivers/i2c/
3746F: include/linux/i2c.h 3762F: include/linux/i2c.h
3747F: include/linux/i2c-*.h 3763F: include/linux/i2c-*.h
3764F: include/uapi/linux/i2c.h
3765F: include/uapi/linux/i2c-*.h
3748 3766
3749I2C-TAOS-EVM DRIVER 3767I2C-TAOS-EVM DRIVER
3750M: Jean Delvare <khali@linux-fr.org> 3768M: Jean Delvare <khali@linux-fr.org>
@@ -3860,7 +3878,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/lowpan/lowpan.git
3860S: Maintained 3878S: Maintained
3861F: net/ieee802154/ 3879F: net/ieee802154/
3862F: net/mac802154/ 3880F: net/mac802154/
3863F: drivers/ieee802154/ 3881F: drivers/net/ieee802154/
3864 3882
3865IGUANAWORKS USB IR TRANSCEIVER 3883IGUANAWORKS USB IR TRANSCEIVER
3866M: Sean Young <sean@mess.org> 3884M: Sean Young <sean@mess.org>
@@ -3911,7 +3929,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git
3911S: Supported 3929S: Supported
3912F: Documentation/infiniband/ 3930F: Documentation/infiniband/
3913F: drivers/infiniband/ 3931F: drivers/infiniband/
3914F: include/linux/if_infiniband.h 3932F: include/uapi/linux/if_infiniband.h
3915 3933
3916INOTIFY 3934INOTIFY
3917M: John McCutchan <john@johnmccutchan.com> 3935M: John McCutchan <john@johnmccutchan.com>
@@ -3921,6 +3939,7 @@ S: Maintained
3921F: Documentation/filesystems/inotify.txt 3939F: Documentation/filesystems/inotify.txt
3922F: fs/notify/inotify/ 3940F: fs/notify/inotify/
3923F: include/linux/inotify.h 3941F: include/linux/inotify.h
3942F: include/uapi/linux/inotify.h
3924 3943
3925INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN) DRIVERS 3944INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN) DRIVERS
3926M: Dmitry Torokhov <dmitry.torokhov@gmail.com> 3945M: Dmitry Torokhov <dmitry.torokhov@gmail.com>
@@ -3931,6 +3950,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git
3931S: Maintained 3950S: Maintained
3932F: drivers/input/ 3951F: drivers/input/
3933F: include/linux/input.h 3952F: include/linux/input.h
3953F: include/uapi/linux/input.h
3934F: include/linux/input/ 3954F: include/linux/input/
3935 3955
3936INPUT MULTITOUCH (MT) PROTOCOL 3956INPUT MULTITOUCH (MT) PROTOCOL
@@ -3951,7 +3971,6 @@ L: linux-scsi@vger.kernel.org
3951T: git git://git.code.sf.net/p/intel-sas/isci 3971T: git git://git.code.sf.net/p/intel-sas/isci
3952S: Supported 3972S: Supported
3953F: drivers/scsi/isci/ 3973F: drivers/scsi/isci/
3954F: firmware/isci/
3955 3974
3956INTEL IDLE DRIVER 3975INTEL IDLE DRIVER
3957M: Len Brown <lenb@kernel.org> 3976M: Len Brown <lenb@kernel.org>
@@ -4046,12 +4065,6 @@ F: Documentation/networking/ixgbe.txt
4046F: Documentation/networking/ixgbevf.txt 4065F: Documentation/networking/ixgbevf.txt
4047F: drivers/net/ethernet/intel/ 4066F: drivers/net/ethernet/intel/
4048 4067
4049INTEL MRST PMU DRIVER
4050M: Len Brown <len.brown@intel.com>
4051L: linux-pm@vger.kernel.org
4052S: Supported
4053F: arch/x86/platform/mrst/pmu.*
4054
4055INTEL PRO/WIRELESS 2100, 2200BG, 2915ABG NETWORK CONNECTION SUPPORT 4068INTEL PRO/WIRELESS 2100, 2200BG, 2915ABG NETWORK CONNECTION SUPPORT
4056M: Stanislav Yakovlev <stas.yakovlev@gmail.com> 4069M: Stanislav Yakovlev <stas.yakovlev@gmail.com>
4057L: linux-wireless@vger.kernel.org 4070L: linux-wireless@vger.kernel.org
@@ -4080,7 +4093,7 @@ S: Supported
4080W: http://linuxwimax.org 4093W: http://linuxwimax.org
4081F: Documentation/wimax/README.i2400m 4094F: Documentation/wimax/README.i2400m
4082F: drivers/net/wimax/i2400m/ 4095F: drivers/net/wimax/i2400m/
4083F: include/linux/wimax/i2400m.h 4096F: include/uapi/linux/wimax/i2400m.h
4084 4097
4085INTEL WIRELESS 3945ABG/BG, 4965AGN (iwlegacy) 4098INTEL WIRELESS 3945ABG/BG, 4965AGN (iwlegacy)
4086M: Stanislaw Gruszka <sgruszka@redhat.com> 4099M: Stanislaw Gruszka <sgruszka@redhat.com>
@@ -4102,9 +4115,9 @@ INTEL MANAGEMENT ENGINE (mei)
4102M: Tomas Winkler <tomas.winkler@intel.com> 4115M: Tomas Winkler <tomas.winkler@intel.com>
4103L: linux-kernel@vger.kernel.org 4116L: linux-kernel@vger.kernel.org
4104S: Supported 4117S: Supported
4105F: include/linux/mei.h 4118F: include/uapi/linux/mei.h
4106F: drivers/misc/mei/* 4119F: drivers/misc/mei/*
4107F: Documentation/mei/* 4120F: Documentation/misc-devices/mei/*
4108 4121
4109IOC3 ETHERNET DRIVER 4122IOC3 ETHERNET DRIVER
4110M: Ralf Baechle <ralf@linux-mips.org> 4123M: Ralf Baechle <ralf@linux-mips.org>
@@ -4144,6 +4157,7 @@ S: Supported
4144F: Documentation/IPMI.txt 4157F: Documentation/IPMI.txt
4145F: drivers/char/ipmi/ 4158F: drivers/char/ipmi/
4146F: include/linux/ipmi* 4159F: include/linux/ipmi*
4160F: include/uapi/linux/ipmi*
4147 4161
4148IPS SCSI RAID DRIVER 4162IPS SCSI RAID DRIVER
4149M: Adaptec OEM Raid Solutions <aacraid@adaptec.com> 4163M: Adaptec OEM Raid Solutions <aacraid@adaptec.com>
@@ -4161,7 +4175,7 @@ L: lvs-devel@vger.kernel.org
4161S: Maintained 4175S: Maintained
4162F: Documentation/networking/ipvs-sysctl.txt 4176F: Documentation/networking/ipvs-sysctl.txt
4163F: include/net/ip_vs.h 4177F: include/net/ip_vs.h
4164F: include/linux/ip_vs.h 4178F: include/uapi/linux/ip_vs.h
4165F: net/netfilter/ipvs/ 4179F: net/netfilter/ipvs/
4166 4180
4167IPWIRELESS DRIVER 4181IPWIRELESS DRIVER
@@ -4174,8 +4188,8 @@ IPX NETWORK LAYER
4174M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> 4188M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
4175L: netdev@vger.kernel.org 4189L: netdev@vger.kernel.org
4176S: Maintained 4190S: Maintained
4177F: include/linux/ipx.h
4178F: include/net/ipx.h 4191F: include/net/ipx.h
4192F: include/uapi/linux/ipx.h
4179F: net/ipx/ 4193F: net/ipx/
4180 4194
4181IRDA SUBSYSTEM 4195IRDA SUBSYSTEM
@@ -4238,6 +4252,8 @@ F: Documentation/isdn/
4238F: drivers/isdn/ 4252F: drivers/isdn/
4239F: include/linux/isdn.h 4253F: include/linux/isdn.h
4240F: include/linux/isdn/ 4254F: include/linux/isdn/
4255F: include/uapi/linux/isdn.h
4256F: include/uapi/linux/isdn/
4241 4257
4242ISDN SUBSYSTEM (Eicon active card driver) 4258ISDN SUBSYSTEM (Eicon active card driver)
4243M: Armin Schindler <mac@melware.de> 4259M: Armin Schindler <mac@melware.de>
@@ -4278,7 +4294,7 @@ W: http://www.ivtvdriver.org
4278S: Maintained 4294S: Maintained
4279F: Documentation/video4linux/*.ivtv 4295F: Documentation/video4linux/*.ivtv
4280F: drivers/media/pci/ivtv/ 4296F: drivers/media/pci/ivtv/
4281F: include/linux/ivtv* 4297F: include/uapi/linux/ivtv*
4282 4298
4283IX2505V MEDIA DRIVER 4299IX2505V MEDIA DRIVER
4284M: Malcolm Priestley <tvboxspy@gmail.com> 4300M: Malcolm Priestley <tvboxspy@gmail.com>
@@ -4316,7 +4332,7 @@ L: linux-mtd@lists.infradead.org
4316W: http://www.linux-mtd.infradead.org/doc/jffs2.html 4332W: http://www.linux-mtd.infradead.org/doc/jffs2.html
4317S: Maintained 4333S: Maintained
4318F: fs/jffs2/ 4334F: fs/jffs2/
4319F: include/linux/jffs2.h 4335F: include/uapi/linux/jffs2.h
4320 4336
4321JOURNALLING LAYER FOR BLOCK DEVICES (JBD) 4337JOURNALLING LAYER FOR BLOCK DEVICES (JBD)
4322M: Andrew Morton <akpm@linux-foundation.org> 4338M: Andrew Morton <akpm@linux-foundation.org>
@@ -4399,11 +4415,13 @@ W: http://nfs.sourceforge.net/
4399S: Supported 4415S: Supported
4400F: fs/nfsd/ 4416F: fs/nfsd/
4401F: include/linux/nfsd/ 4417F: include/linux/nfsd/
4418F: include/uapi/linux/nfsd/
4402F: fs/lockd/ 4419F: fs/lockd/
4403F: fs/nfs_common/ 4420F: fs/nfs_common/
4404F: net/sunrpc/ 4421F: net/sunrpc/
4405F: include/linux/lockd/ 4422F: include/linux/lockd/
4406F: include/linux/sunrpc/ 4423F: include/linux/sunrpc/
4424F: include/uapi/linux/sunrpc/
4407 4425
4408KERNEL VIRTUAL MACHINE (KVM) 4426KERNEL VIRTUAL MACHINE (KVM)
4409M: Marcelo Tosatti <mtosatti@redhat.com> 4427M: Marcelo Tosatti <mtosatti@redhat.com>
@@ -4415,6 +4433,7 @@ F: Documentation/*/kvm.txt
4415F: arch/*/kvm/ 4433F: arch/*/kvm/
4416F: arch/*/include/asm/kvm* 4434F: arch/*/include/asm/kvm*
4417F: include/linux/kvm* 4435F: include/linux/kvm*
4436F: include/uapi/linux/kvm*
4418F: virt/kvm/ 4437F: virt/kvm/
4419 4438
4420KERNEL VIRTUAL MACHINE (KVM) FOR AMD-V 4439KERNEL VIRTUAL MACHINE (KVM) FOR AMD-V
@@ -4461,6 +4480,7 @@ W: http://kernel.org/pub/linux/utils/kernel/kexec/
4461L: kexec@lists.infradead.org 4480L: kexec@lists.infradead.org
4462S: Maintained 4481S: Maintained
4463F: include/linux/kexec.h 4482F: include/linux/kexec.h
4483F: include/uapi/linux/kexec.h
4464F: kernel/kexec.c 4484F: kernel/kexec.c
4465 4485
4466KEYS/KEYRINGS: 4486KEYS/KEYRINGS:
@@ -4702,6 +4722,7 @@ LLC (802.2)
4702M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> 4722M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
4703S: Maintained 4723S: Maintained
4704F: include/linux/llc.h 4724F: include/linux/llc.h
4725F: include/uapi/linux/llc.h
4705F: include/net/llc* 4726F: include/net/llc*
4706F: net/llc/ 4727F: net/llc/
4707 4728
@@ -4922,7 +4943,7 @@ MATROX FRAMEBUFFER DRIVER
4922L: linux-fbdev@vger.kernel.org 4943L: linux-fbdev@vger.kernel.org
4923S: Orphan 4944S: Orphan
4924F: drivers/video/matrox/matroxfb_* 4945F: drivers/video/matrox/matroxfb_*
4925F: include/linux/matroxfb.h 4946F: include/uapi/linux/matroxfb.h
4926 4947
4927MAX16065 HARDWARE MONITOR DRIVER 4948MAX16065 HARDWARE MONITOR DRIVER
4928M: Guenter Roeck <linux@roeck-us.net> 4949M: Guenter Roeck <linux@roeck-us.net>
@@ -5004,7 +5025,7 @@ T: git git://git.infradead.org/mtd-2.6.git
5004S: Maintained 5025S: Maintained
5005F: drivers/mtd/ 5026F: drivers/mtd/
5006F: include/linux/mtd/ 5027F: include/linux/mtd/
5007F: include/mtd/ 5028F: include/uapi/mtd/
5008 5029
5009MICROBLAZE ARCHITECTURE 5030MICROBLAZE ARCHITECTURE
5010M: Michal Simek <monstr@monstr.eu> 5031M: Michal Simek <monstr@monstr.eu>
@@ -5042,12 +5063,6 @@ F: Documentation/video4linux/meye.txt
5042F: drivers/media/pci/meye/ 5063F: drivers/media/pci/meye/
5043F: include/uapi/linux/meye.h 5064F: include/uapi/linux/meye.h
5044 5065
5045MOTOROLA IMX MMC/SD HOST CONTROLLER INTERFACE DRIVER
5046M: Pavel Pisa <ppisa@pikron.com>
5047L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
5048S: Maintained
5049F: drivers/mmc/host/imxmmc.*
5050
5051MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD 5066MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD
5052M: Jiri Slaby <jirislaby@gmail.com> 5067M: Jiri Slaby <jirislaby@gmail.com>
5053S: Maintained 5068S: Maintained
@@ -5086,6 +5101,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git
5086S: Maintained 5101S: Maintained
5087F: drivers/mmc/ 5102F: drivers/mmc/
5088F: include/linux/mmc/ 5103F: include/linux/mmc/
5104F: include/uapi/linux/mmc/
5089 5105
5090MULTIMEDIA CARD (MMC) ETC. OVER SPI 5106MULTIMEDIA CARD (MMC) ETC. OVER SPI
5091S: Orphan 5107S: Orphan
@@ -5186,6 +5202,8 @@ S: Supported
5186F: include/linux/netfilter* 5202F: include/linux/netfilter*
5187F: include/linux/netfilter/ 5203F: include/linux/netfilter/
5188F: include/net/netfilter/ 5204F: include/net/netfilter/
5205F: include/uapi/linux/netfilter*
5206F: include/uapi/linux/netfilter/
5189F: net/*/netfilter.c 5207F: net/*/netfilter.c
5190F: net/*/netfilter/ 5208F: net/*/netfilter/
5191F: net/netfilter/ 5209F: net/netfilter/
@@ -5204,8 +5222,8 @@ M: Ralf Baechle <ralf@linux-mips.org>
5204L: linux-hams@vger.kernel.org 5222L: linux-hams@vger.kernel.org
5205W: http://www.linux-ax25.org/ 5223W: http://www.linux-ax25.org/
5206S: Maintained 5224S: Maintained
5207F: include/linux/netrom.h
5208F: include/net/netrom.h 5225F: include/net/netrom.h
5226F: include/uapi/linux/netrom.h
5209F: net/netrom/ 5227F: net/netrom/
5210 5228
5211NETWORK BLOCK DEVICE (NBD) 5229NETWORK BLOCK DEVICE (NBD)
@@ -5214,6 +5232,7 @@ S: Maintained
5214F: Documentation/blockdev/nbd.txt 5232F: Documentation/blockdev/nbd.txt
5215F: drivers/block/nbd.c 5233F: drivers/block/nbd.c
5216F: include/linux/nbd.h 5234F: include/linux/nbd.h
5235F: include/uapi/linux/nbd.h
5217 5236
5218NETWORK DROP MONITOR 5237NETWORK DROP MONITOR
5219M: Neil Horman <nhorman@tuxdriver.com> 5238M: Neil Horman <nhorman@tuxdriver.com>
@@ -5235,6 +5254,9 @@ F: include/net/
5235F: include/linux/in.h 5254F: include/linux/in.h
5236F: include/linux/net.h 5255F: include/linux/net.h
5237F: include/linux/netdevice.h 5256F: include/linux/netdevice.h
5257F: include/uapi/linux/in.h
5258F: include/uapi/linux/net.h
5259F: include/uapi/linux/netdevice.h
5238 5260
5239NETWORKING [IPv4/IPv6] 5261NETWORKING [IPv4/IPv6]
5240M: "David S. Miller" <davem@davemloft.net> 5262M: "David S. Miller" <davem@davemloft.net>
@@ -5280,6 +5302,7 @@ F: net/rfkill/
5280F: net/wireless/ 5302F: net/wireless/
5281F: include/net/ieee80211* 5303F: include/net/ieee80211*
5282F: include/linux/wireless.h 5304F: include/linux/wireless.h
5305F: include/uapi/linux/wireless.h
5283F: include/net/iw_handler.h 5306F: include/net/iw_handler.h
5284F: drivers/net/wireless/ 5307F: drivers/net/wireless/
5285 5308
@@ -5299,6 +5322,8 @@ F: include/linux/fcdevice.h
5299F: include/linux/fddidevice.h 5322F: include/linux/fddidevice.h
5300F: include/linux/hippidevice.h 5323F: include/linux/hippidevice.h
5301F: include/linux/inetdevice.h 5324F: include/linux/inetdevice.h
5325F: include/uapi/linux/if_*
5326F: include/uapi/linux/netdevice.h
5302 5327
5303NETXEN (1/10) GbE SUPPORT 5328NETXEN (1/10) GbE SUPPORT
5304M: Sony Chacko <sony.chacko@qlogic.com> 5329M: Sony Chacko <sony.chacko@qlogic.com>
@@ -5316,8 +5341,8 @@ L: linux-wireless@vger.kernel.org
5316L: linux-nfc@lists.01.org (moderated for non-subscribers) 5341L: linux-nfc@lists.01.org (moderated for non-subscribers)
5317S: Maintained 5342S: Maintained
5318F: net/nfc/ 5343F: net/nfc/
5319F: include/linux/nfc.h
5320F: include/net/nfc/ 5344F: include/net/nfc/
5345F: include/uapi/linux/nfc.h
5321F: drivers/nfc/ 5346F: drivers/nfc/
5322F: include/linux/platform_data/pn544.h 5347F: include/linux/platform_data/pn544.h
5323 5348
@@ -5334,6 +5359,8 @@ F: net/sunrpc/
5334F: include/linux/lockd/ 5359F: include/linux/lockd/
5335F: include/linux/nfs* 5360F: include/linux/nfs*
5336F: include/linux/sunrpc/ 5361F: include/linux/sunrpc/
5362F: include/uapi/linux/nfs*
5363F: include/uapi/linux/sunrpc/
5337 5364
5338NI5010 NETWORK DRIVER 5365NI5010 NETWORK DRIVER
5339M: Jan-Pascal van Best <janpascal@vanbest.org> 5366M: Jan-Pascal van Best <janpascal@vanbest.org>
@@ -5523,6 +5550,7 @@ M: Harald Welte <laforge@gnumonks.org>
5523S: Maintained 5550S: Maintained
5524F: drivers/char/pcmcia/cm4000_cs.c 5551F: drivers/char/pcmcia/cm4000_cs.c
5525F: include/linux/cm4000_cs.h 5552F: include/linux/cm4000_cs.h
5553F: include/uapi/linux/cm4000_cs.h
5526 5554
5527OMNIKEY CARDMAN 4040 DRIVER 5555OMNIKEY CARDMAN 4040 DRIVER
5528M: Harald Welte <laforge@gnumonks.org> 5556M: Harald Welte <laforge@gnumonks.org>
@@ -5681,7 +5709,7 @@ S: Orphan
5681F: drivers/parport/ 5709F: drivers/parport/
5682F: include/linux/parport*.h 5710F: include/linux/parport*.h
5683F: drivers/char/ppdev.c 5711F: drivers/char/ppdev.c
5684F: include/linux/ppdev.h 5712F: include/uapi/linux/ppdev.h
5685 5713
5686PARAVIRT_OPS INTERFACE 5714PARAVIRT_OPS INTERFACE
5687M: Jeremy Fitzhardinge <jeremy@goop.org> 5715M: Jeremy Fitzhardinge <jeremy@goop.org>
@@ -5822,11 +5850,11 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
5822S: Supported 5850S: Supported
5823F: kernel/events/* 5851F: kernel/events/*
5824F: include/linux/perf_event.h 5852F: include/linux/perf_event.h
5853F: include/uapi/linux/perf_event.h
5825F: arch/*/kernel/perf_event*.c 5854F: arch/*/kernel/perf_event*.c
5826F: arch/*/kernel/*/perf_event*.c 5855F: arch/*/kernel/*/perf_event*.c
5827F: arch/*/kernel/*/*/perf_event*.c 5856F: arch/*/kernel/*/*/perf_event*.c
5828F: arch/*/include/asm/perf_event.h 5857F: arch/*/include/asm/perf_event.h
5829F: arch/*/lib/perf_event*.c
5830F: arch/*/kernel/perf_callchain.c 5858F: arch/*/kernel/perf_callchain.c
5831F: tools/perf/ 5859F: tools/perf/
5832 5860
@@ -5835,6 +5863,7 @@ M: Christoph Hellwig <hch@infradead.org>
5835L: linux-abi-devel@lists.sourceforge.net 5863L: linux-abi-devel@lists.sourceforge.net
5836S: Maintained 5864S: Maintained
5837F: include/linux/personality.h 5865F: include/linux/personality.h
5866F: include/uapi/linux/personality.h
5838 5867
5839PHONET PROTOCOL 5868PHONET PROTOCOL
5840M: Remi Denis-Courmont <courmisch@gmail.com> 5869M: Remi Denis-Courmont <courmisch@gmail.com>
@@ -5842,6 +5871,7 @@ S: Supported
5842F: Documentation/networking/phonet.txt 5871F: Documentation/networking/phonet.txt
5843F: include/linux/phonet.h 5872F: include/linux/phonet.h
5844F: include/net/phonet/ 5873F: include/net/phonet/
5874F: include/uapi/linux/phonet.h
5845F: net/phonet/ 5875F: net/phonet/
5846 5876
5847PHRAM MTD DRIVER 5877PHRAM MTD DRIVER
@@ -5890,6 +5920,7 @@ M: Jiri Kosina <jkosina@suse.cz>
5890S: Maintained 5920S: Maintained
5891F: drivers/block/pktcdvd.c 5921F: drivers/block/pktcdvd.c
5892F: include/linux/pktcdvd.h 5922F: include/linux/pktcdvd.h
5923F: include/uapi/linux/pktcdvd.h
5893 5924
5894PKUNITY SOC DRIVERS 5925PKUNITY SOC DRIVERS
5895M: Guan Xuetao <gxt@mprc.pku.edu.cn> 5926M: Guan Xuetao <gxt@mprc.pku.edu.cn>
@@ -5964,7 +5995,7 @@ PPP OVER ATM (RFC 2364)
5964M: Mitchell Blank Jr <mitch@sfgoth.com> 5995M: Mitchell Blank Jr <mitch@sfgoth.com>
5965S: Maintained 5996S: Maintained
5966F: net/atm/pppoatm.c 5997F: net/atm/pppoatm.c
5967F: include/linux/atmppp.h 5998F: include/uapi/linux/atmppp.h
5968 5999
5969PPP OVER ETHERNET 6000PPP OVER ETHERNET
5970M: Michal Ostrowski <mostrows@earthlink.net> 6001M: Michal Ostrowski <mostrows@earthlink.net>
@@ -5977,6 +6008,7 @@ M: James Chapman <jchapman@katalix.com>
5977S: Maintained 6008S: Maintained
5978F: net/l2tp/l2tp_ppp.c 6009F: net/l2tp/l2tp_ppp.c
5979F: include/linux/if_pppol2tp.h 6010F: include/linux/if_pppol2tp.h
6011F: include/uapi/linux/if_pppol2tp.h
5980 6012
5981PPS SUPPORT 6013PPS SUPPORT
5982M: Rodolfo Giometti <giometti@enneenne.com> 6014M: Rodolfo Giometti <giometti@enneenne.com>
@@ -6074,6 +6106,7 @@ F: include/asm-generic/syscall.h
6074F: include/linux/ptrace.h 6106F: include/linux/ptrace.h
6075F: include/linux/regset.h 6107F: include/linux/regset.h
6076F: include/linux/tracehook.h 6108F: include/linux/tracehook.h
6109F: include/uapi/linux/ptrace.h
6077F: kernel/ptrace.c 6110F: kernel/ptrace.c
6078 6111
6079PVRUSB2 VIDEO4LINUX DRIVER 6112PVRUSB2 VIDEO4LINUX DRIVER
@@ -6102,7 +6135,6 @@ T: git git://gitorious.org/linux-pwm/linux-pwm.git
6102F: Documentation/pwm.txt 6135F: Documentation/pwm.txt
6103F: Documentation/devicetree/bindings/pwm/ 6136F: Documentation/devicetree/bindings/pwm/
6104F: include/linux/pwm.h 6137F: include/linux/pwm.h
6105F: include/linux/of_pwm.h
6106F: drivers/pwm/ 6138F: drivers/pwm/
6107F: drivers/video/backlight/pwm_bl.c 6139F: drivers/video/backlight/pwm_bl.c
6108F: include/linux/pwm_backlight.h 6140F: include/linux/pwm_backlight.h
@@ -6198,8 +6230,8 @@ M: Anders Larsen <al@alarsen.net>
6198W: http://www.alarsen.net/linux/qnx4fs/ 6230W: http://www.alarsen.net/linux/qnx4fs/
6199S: Maintained 6231S: Maintained
6200F: fs/qnx4/ 6232F: fs/qnx4/
6201F: include/linux/qnx4_fs.h 6233F: include/uapi/linux/qnx4_fs.h
6202F: include/linux/qnxtypes.h 6234F: include/uapi/linux/qnxtypes.h
6203 6235
6204QT1010 MEDIA DRIVER 6236QT1010 MEDIA DRIVER
6205M: Antti Palosaari <crope@iki.fi> 6237M: Antti Palosaari <crope@iki.fi>
@@ -6233,7 +6265,7 @@ M: Benjamin Herrenschmidt <benh@kernel.crashing.org>
6233L: linux-fbdev@vger.kernel.org 6265L: linux-fbdev@vger.kernel.org
6234S: Maintained 6266S: Maintained
6235F: drivers/video/aty/radeon* 6267F: drivers/video/aty/radeon*
6236F: include/linux/radeonfb.h 6268F: include/uapi/linux/radeonfb.h
6237 6269
6238RADIOSHARK RADIO DRIVER 6270RADIOSHARK RADIO DRIVER
6239M: Hans de Goede <hdegoede@redhat.com> 6271M: Hans de Goede <hdegoede@redhat.com>
@@ -6334,6 +6366,7 @@ S: Maintained
6334F: Documentation/rtc.txt 6366F: Documentation/rtc.txt
6335F: drivers/rtc/ 6367F: drivers/rtc/
6336F: include/linux/rtc.h 6368F: include/linux/rtc.h
6369F: include/uapi/linux/rtc.h
6337 6370
6338REISERFS FILE SYSTEM 6371REISERFS FILE SYSTEM
6339L: reiserfs-devel@vger.kernel.org 6372L: reiserfs-devel@vger.kernel.org
@@ -6388,8 +6421,8 @@ M: Ralf Baechle <ralf@linux-mips.org>
6388L: linux-hams@vger.kernel.org 6421L: linux-hams@vger.kernel.org
6389W: http://www.linux-ax25.org/ 6422W: http://www.linux-ax25.org/
6390S: Maintained 6423S: Maintained
6391F: include/linux/rose.h
6392F: include/net/rose.h 6424F: include/net/rose.h
6425F: include/uapi/linux/rose.h
6393F: net/rose/ 6426F: net/rose/
6394 6427
6395RTL2830 MEDIA DRIVER 6428RTL2830 MEDIA DRIVER
@@ -6566,6 +6599,8 @@ S: Supported
6566F: include/linux/clocksource.h 6599F: include/linux/clocksource.h
6567F: include/linux/time.h 6600F: include/linux/time.h
6568F: include/linux/timex.h 6601F: include/linux/timex.h
6602F: include/uapi/linux/time.h
6603F: include/uapi/linux/timex.h
6569F: kernel/time/clocksource.c 6604F: kernel/time/clocksource.c
6570F: kernel/time/time*.c 6605F: kernel/time/time*.c
6571F: kernel/time/ntp.c 6606F: kernel/time/ntp.c
@@ -6590,6 +6625,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core
6590S: Maintained 6625S: Maintained
6591F: kernel/sched/ 6626F: kernel/sched/
6592F: include/linux/sched.h 6627F: include/linux/sched.h
6628F: include/uapi/linux/sched.h
6593 6629
6594SCORE ARCHITECTURE 6630SCORE ARCHITECTURE
6595M: Chen Liqin <liqin.chen@sunplusct.com> 6631M: Chen Liqin <liqin.chen@sunplusct.com>
@@ -6743,7 +6779,7 @@ SENSABLE PHANTOM
6743M: Jiri Slaby <jirislaby@gmail.com> 6779M: Jiri Slaby <jirislaby@gmail.com>
6744S: Maintained 6780S: Maintained
6745F: drivers/misc/phantom.c 6781F: drivers/misc/phantom.c
6746F: include/linux/phantom.h 6782F: include/uapi/linux/phantom.h
6747 6783
6748SERIAL ATA (SATA) SUBSYSTEM 6784SERIAL ATA (SATA) SUBSYSTEM
6749M: Jeff Garzik <jgarzik@pobox.com> 6785M: Jeff Garzik <jgarzik@pobox.com>
@@ -7001,6 +7037,7 @@ L: linux-raid@vger.kernel.org
7001S: Supported 7037S: Supported
7002F: drivers/md/ 7038F: drivers/md/
7003F: include/linux/raid/ 7039F: include/linux/raid/
7040F: include/uapi/linux/raid/
7004 7041
7005SONIC NETWORK DRIVER 7042SONIC NETWORK DRIVER
7006M: Thomas Bogendoerfer <tsbogend@alpha.franken.de> 7043M: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
@@ -7041,6 +7078,7 @@ T: git git://git.alsa-project.org/alsa-kernel.git
7041S: Maintained 7078S: Maintained
7042F: Documentation/sound/ 7079F: Documentation/sound/
7043F: include/sound/ 7080F: include/sound/
7081F: include/uapi/sound/
7044F: sound/ 7082F: sound/
7045 7083
7046SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC) 7084SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC)
@@ -7141,6 +7179,7 @@ S: Maintained
7141F: Documentation/spi/ 7179F: Documentation/spi/
7142F: drivers/spi/ 7180F: drivers/spi/
7143F: include/linux/spi/ 7181F: include/linux/spi/
7182F: include/uapi/linux/spi/
7144 7183
7145SPIDERNET NETWORK DRIVER for CELL 7184SPIDERNET NETWORK DRIVER for CELL
7146M: Ishizaki Kou <kou.ishizaki@toshiba.co.jp> 7185M: Ishizaki Kou <kou.ishizaki@toshiba.co.jp>
@@ -7277,7 +7316,7 @@ F: drivers/staging/rtl8712/
7277STAGING - SILICON MOTION SM7XX FRAME BUFFER DRIVER 7316STAGING - SILICON MOTION SM7XX FRAME BUFFER DRIVER
7278M: Teddy Wang <teddy.wang@siliconmotion.com.cn> 7317M: Teddy Wang <teddy.wang@siliconmotion.com.cn>
7279S: Odd Fixes 7318S: Odd Fixes
7280F: drivers/staging/sm7xx/ 7319F: drivers/staging/sm7xxfb/
7281 7320
7282STAGING - SOFTLOGIC 6x10 MPEG CODEC 7321STAGING - SOFTLOGIC 6x10 MPEG CODEC
7283M: Ben Collins <bcollins@bluecherry.net> 7322M: Ben Collins <bcollins@bluecherry.net>
@@ -7403,8 +7442,8 @@ TC CLASSIFIER
7403M: Jamal Hadi Salim <jhs@mojatatu.com> 7442M: Jamal Hadi Salim <jhs@mojatatu.com>
7404L: netdev@vger.kernel.org 7443L: netdev@vger.kernel.org
7405S: Maintained 7444S: Maintained
7406F: include/linux/pkt_cls.h
7407F: include/net/pkt_cls.h 7445F: include/net/pkt_cls.h
7446F: include/uapi/linux/pkt_cls.h
7408F: net/sched/ 7447F: net/sched/
7409 7448
7410TCP LOW PRIORITY MODULE 7449TCP LOW PRIORITY MODULE
@@ -7496,6 +7535,7 @@ L: netdev@vger.kernel.org
7496S: Supported 7535S: Supported
7497F: drivers/net/team/ 7536F: drivers/net/team/
7498F: include/linux/if_team.h 7537F: include/linux/if_team.h
7538F: include/uapi/linux/if_team.h
7499 7539
7500TECHNOTREND USB IR RECEIVER 7540TECHNOTREND USB IR RECEIVER
7501M: Sean Young <sean@mess.org> 7541M: Sean Young <sean@mess.org>
@@ -7594,7 +7634,7 @@ L: netdev@vger.kernel.org (core kernel code)
7594L: tipc-discussion@lists.sourceforge.net (user apps, general discussion) 7634L: tipc-discussion@lists.sourceforge.net (user apps, general discussion)
7595W: http://tipc.sourceforge.net/ 7635W: http://tipc.sourceforge.net/
7596S: Maintained 7636S: Maintained
7597F: include/linux/tipc*.h 7637F: include/uapi/linux/tipc*.h
7598F: net/tipc/ 7638F: net/tipc/
7599 7639
7600TILE ARCHITECTURE 7640TILE ARCHITECTURE
@@ -7644,6 +7684,7 @@ W: http://www.buzzard.org.uk/toshiba/
7644S: Maintained 7684S: Maintained
7645F: drivers/char/toshiba.c 7685F: drivers/char/toshiba.c
7646F: include/linux/toshiba.h 7686F: include/linux/toshiba.h
7687F: include/uapi/linux/toshiba.h
7647 7688
7648TMIO MMC DRIVER 7689TMIO MMC DRIVER
7649M: Guennadi Liakhovetski <g.liakhovetski@gmx.de> 7690M: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
@@ -7711,6 +7752,9 @@ F: drivers/tty/serial/serial_core.c
7711F: include/linux/serial_core.h 7752F: include/linux/serial_core.h
7712F: include/linux/serial.h 7753F: include/linux/serial.h
7713F: include/linux/tty.h 7754F: include/linux/tty.h
7755F: include/uapi/linux/serial_core.h
7756F: include/uapi/linux/serial.h
7757F: include/uapi/linux/tty.h
7714 7758
7715TUA9001 MEDIA DRIVER 7759TUA9001 MEDIA DRIVER
7716M: Antti Palosaari <crope@iki.fi> 7760M: Antti Palosaari <crope@iki.fi>
@@ -7790,7 +7834,7 @@ M: David Herrmann <dh.herrmann@googlemail.com>
7790L: linux-input@vger.kernel.org 7834L: linux-input@vger.kernel.org
7791S: Maintained 7835S: Maintained
7792F: drivers/hid/uhid.c 7836F: drivers/hid/uhid.c
7793F: include/linux/uhid.h 7837F: include/uapi/linux/uhid.h
7794 7838
7795ULTRA-WIDEBAND (UWB) SUBSYSTEM: 7839ULTRA-WIDEBAND (UWB) SUBSYSTEM:
7796L: linux-usb@vger.kernel.org 7840L: linux-usb@vger.kernel.org
@@ -7819,6 +7863,7 @@ S: Maintained
7819F: Documentation/cdrom/ 7863F: Documentation/cdrom/
7820F: drivers/cdrom/cdrom.c 7864F: drivers/cdrom/cdrom.c
7821F: include/linux/cdrom.h 7865F: include/linux/cdrom.h
7866F: include/uapi/linux/cdrom.h
7822 7867
7823UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER 7868UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER
7824M: Vinayak Holikatti <vinholikatti@gmail.com> 7869M: Vinayak Holikatti <vinholikatti@gmail.com>
@@ -7836,7 +7881,7 @@ T: git git://git.infradead.org/ubi-2.6.git
7836S: Maintained 7881S: Maintained
7837F: drivers/mtd/ubi/ 7882F: drivers/mtd/ubi/
7838F: include/linux/mtd/ubi.h 7883F: include/linux/mtd/ubi.h
7839F: include/mtd/ubi-user.h 7884F: include/uapi/mtd/ubi-user.h
7840 7885
7841UNSORTED BLOCK IMAGES (UBI) Fastmap 7886UNSORTED BLOCK IMAGES (UBI) Fastmap
7842M: Richard Weinberger <richard@nod.at> 7887M: Richard Weinberger <richard@nod.at>
@@ -7870,7 +7915,7 @@ M: Oliver Neukum <oliver@neukum.org>
7870L: linux-usb@vger.kernel.org 7915L: linux-usb@vger.kernel.org
7871S: Maintained 7916S: Maintained
7872F: drivers/net/usb/cdc_*.c 7917F: drivers/net/usb/cdc_*.c
7873F: include/linux/usb/cdc.h 7918F: include/uapi/linux/usb/cdc.h
7874 7919
7875USB CYPRESS C67X00 DRIVER 7920USB CYPRESS C67X00 DRIVER
7876M: Peter Korsgaard <jacmet@sunsite.dk> 7921M: Peter Korsgaard <jacmet@sunsite.dk>
@@ -8191,6 +8236,7 @@ S: Maintained
8191F: Documentation/vfio.txt 8236F: Documentation/vfio.txt
8192F: drivers/vfio/ 8237F: drivers/vfio/
8193F: include/linux/vfio.h 8238F: include/linux/vfio.h
8239F: include/uapi/linux/vfio.h
8194 8240
8195VIDEOBUF2 FRAMEWORK 8241VIDEOBUF2 FRAMEWORK
8196M: Pawel Osciak <pawel@osciak.com> 8242M: Pawel Osciak <pawel@osciak.com>
@@ -8207,6 +8253,7 @@ L: virtualization@lists.linux-foundation.org
8207S: Maintained 8253S: Maintained
8208F: drivers/char/virtio_console.c 8254F: drivers/char/virtio_console.c
8209F: include/linux/virtio_console.h 8255F: include/linux/virtio_console.h
8256F: include/uapi/linux/virtio_console.h
8210 8257
8211VIRTIO CORE, NET AND BLOCK DRIVERS 8258VIRTIO CORE, NET AND BLOCK DRIVERS
8212M: Rusty Russell <rusty@rustcorp.com.au> 8259M: Rusty Russell <rusty@rustcorp.com.au>
@@ -8225,7 +8272,7 @@ L: virtualization@lists.linux-foundation.org
8225L: netdev@vger.kernel.org 8272L: netdev@vger.kernel.org
8226S: Maintained 8273S: Maintained
8227F: drivers/vhost/ 8274F: drivers/vhost/
8228F: include/linux/vhost.h 8275F: include/uapi/linux/vhost.h
8229 8276
8230VIA RHINE NETWORK DRIVER 8277VIA RHINE NETWORK DRIVER
8231M: Roger Luethi <rl@hellgate.ch> 8278M: Roger Luethi <rl@hellgate.ch>
@@ -8365,6 +8412,7 @@ S: Maintained
8365F: Documentation/watchdog/ 8412F: Documentation/watchdog/
8366F: drivers/watchdog/ 8413F: drivers/watchdog/
8367F: include/linux/watchdog.h 8414F: include/linux/watchdog.h
8415F: include/uapi/linux/watchdog.h
8368 8416
8369WD7000 SCSI DRIVER 8417WD7000 SCSI DRIVER
8370M: Miroslav Zagorac <zaga@fly.cc.fer.hr> 8418M: Miroslav Zagorac <zaga@fly.cc.fer.hr>
@@ -8390,9 +8438,9 @@ L: wimax@linuxwimax.org
8390S: Supported 8438S: Supported
8391W: http://linuxwimax.org 8439W: http://linuxwimax.org
8392F: Documentation/wimax/README.wimax 8440F: Documentation/wimax/README.wimax
8393F: include/linux/wimax.h
8394F: include/linux/wimax/debug.h 8441F: include/linux/wimax/debug.h
8395F: include/net/wimax.h 8442F: include/net/wimax.h
8443F: include/uapi/linux/wimax.h
8396F: net/wimax/ 8444F: net/wimax/
8397 8445
8398WISTRON LAPTOP BUTTON DRIVER 8446WISTRON LAPTOP BUTTON DRIVER
@@ -8510,6 +8558,7 @@ F: drivers/*/xen-*front.c
8510F: drivers/xen/ 8558F: drivers/xen/
8511F: arch/x86/include/asm/xen/ 8559F: arch/x86/include/asm/xen/
8512F: include/xen/ 8560F: include/xen/
8561F: include/uapi/xen/
8513 8562
8514XEN HYPERVISOR ARM 8563XEN HYPERVISOR ARM
8515M: Stefano Stabellini <stefano.stabellini@eu.citrix.com> 8564M: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index d0cea02b5df..923a9da9c82 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -352,6 +352,14 @@ config RTC_DRV_TWL4030
352 This driver can also be built as a module. If so, the module 352 This driver can also be built as a module. If so, the module
353 will be called rtc-twl. 353 will be called rtc-twl.
354 354
355config RTC_DRV_TPS6586X
356 tristate "TI TPS6586X RTC driver"
357 depends on MFD_TPS6586X
358 help
359 TI Power Managment IC TPS6586X supports RTC functionality
360 along with alarm. This driver supports the RTC driver for
361 the TPS6586X RTC module.
362
355config RTC_DRV_TPS65910 363config RTC_DRV_TPS65910
356 tristate "TI TPS65910 RTC driver" 364 tristate "TI TPS65910 RTC driver"
357 depends on RTC_CLASS && MFD_TPS65910 365 depends on RTC_CLASS && MFD_TPS65910
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
index c3f62c80dc0..4418ef3f9ec 100644
--- a/drivers/rtc/Makefile
+++ b/drivers/rtc/Makefile
@@ -111,6 +111,7 @@ obj-$(CONFIG_RTC_DRV_TEGRA) += rtc-tegra.o
111obj-$(CONFIG_RTC_DRV_TEST) += rtc-test.o 111obj-$(CONFIG_RTC_DRV_TEST) += rtc-test.o
112obj-$(CONFIG_RTC_DRV_TILE) += rtc-tile.o 112obj-$(CONFIG_RTC_DRV_TILE) += rtc-tile.o
113obj-$(CONFIG_RTC_DRV_TWL4030) += rtc-twl.o 113obj-$(CONFIG_RTC_DRV_TWL4030) += rtc-twl.o
114obj-$(CONFIG_RTC_DRV_TPS6586X) += rtc-tps6586x.o
114obj-$(CONFIG_RTC_DRV_TPS65910) += rtc-tps65910.o 115obj-$(CONFIG_RTC_DRV_TPS65910) += rtc-tps65910.o
115obj-$(CONFIG_RTC_DRV_TX4939) += rtc-tx4939.o 116obj-$(CONFIG_RTC_DRV_TX4939) += rtc-tx4939.o
116obj-$(CONFIG_RTC_DRV_V3020) += rtc-v3020.o 117obj-$(CONFIG_RTC_DRV_V3020) += rtc-v3020.o
diff --git a/drivers/rtc/rtc-tegra.c b/drivers/rtc/rtc-tegra.c
index 5ba2f756a52..c84ea6659f4 100644
--- a/drivers/rtc/rtc-tegra.c
+++ b/drivers/rtc/rtc-tegra.c
@@ -303,6 +303,12 @@ static struct rtc_class_ops tegra_rtc_ops = {
303 .alarm_irq_enable = tegra_rtc_alarm_irq_enable, 303 .alarm_irq_enable = tegra_rtc_alarm_irq_enable,
304}; 304};
305 305
306static const struct of_device_id tegra_rtc_dt_match[] = {
307 { .compatible = "nvidia,tegra20-rtc", },
308 {}
309};
310MODULE_DEVICE_TABLE(of, tegra_rtc_dt_match);
311
306static int tegra_rtc_probe(struct platform_device *pdev) 312static int tegra_rtc_probe(struct platform_device *pdev)
307{ 313{
308 struct tegra_rtc_info *info; 314 struct tegra_rtc_info *info;
@@ -440,6 +446,7 @@ static struct platform_driver tegra_rtc_driver = {
440 .driver = { 446 .driver = {
441 .name = "tegra_rtc", 447 .name = "tegra_rtc",
442 .owner = THIS_MODULE, 448 .owner = THIS_MODULE,
449 .of_match_table = tegra_rtc_dt_match,
443 }, 450 },
444#ifdef CONFIG_PM 451#ifdef CONFIG_PM
445 .suspend = tegra_rtc_suspend, 452 .suspend = tegra_rtc_suspend,
diff --git a/drivers/rtc/rtc-tps6586x.c b/drivers/rtc/rtc-tps6586x.c
new file mode 100644
index 00000000000..70f61b8e9e6
--- /dev/null
+++ b/drivers/rtc/rtc-tps6586x.c
@@ -0,0 +1,356 @@
1/*
2 * rtc-tps6586x.c: RTC driver for TI PMIC TPS6586X
3 *
4 * Copyright (c) 2012, NVIDIA Corporation.
5 *
6 * Author: Laxman Dewangan <ldewangan@nvidia.com>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation version 2.
11 *
12 * This program is distributed "as is" WITHOUT ANY WARRANTY of any kind,
13 * whether express or implied; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
20 * 02111-1307, USA
21 */
22
23#include <linux/device.h>
24#include <linux/err.h>
25#include <linux/init.h>
26#include <linux/kernel.h>
27#include <linux/mfd/tps6586x.h>
28#include <linux/module.h>
29#include <linux/platform_device.h>
30#include <linux/pm_runtime.h>
31#include <linux/rtc.h>
32#include <linux/slab.h>
33
34#define RTC_CTRL 0xc0
35#define POR_RESET_N BIT(7)
36#define OSC_SRC_SEL BIT(6)
37#define RTC_ENABLE BIT(5) /* enables alarm */
38#define RTC_BUF_ENABLE BIT(4) /* 32 KHz buffer enable */
39#define PRE_BYPASS BIT(3) /* 0=1KHz or 1=32KHz updates */
40#define CL_SEL_MASK (BIT(2)|BIT(1))
41#define CL_SEL_POS 1
42#define RTC_ALARM1_HI 0xc1
43#define RTC_COUNT4 0xc6
44
45/* start a PMU RTC access by reading the register prior to the RTC_COUNT4 */
46#define RTC_COUNT4_DUMMYREAD 0xc5
47
48/*only 14-bits width in second*/
49#define ALM1_VALID_RANGE_IN_SEC 0x3FFF
50
51#define TPS6586X_RTC_CL_SEL_1_5PF 0x0
52#define TPS6586X_RTC_CL_SEL_6_5PF 0x1
53#define TPS6586X_RTC_CL_SEL_7_5PF 0x2
54#define TPS6586X_RTC_CL_SEL_12_5PF 0x3
55
56struct tps6586x_rtc {
57 struct device *dev;
58 struct rtc_device *rtc;
59 int irq;
60 bool irq_en;
61 unsigned long long epoch_start;
62};
63
64static inline struct device *to_tps6586x_dev(struct device *dev)
65{
66 return dev->parent;
67}
68
69static int tps6586x_rtc_read_time(struct device *dev, struct rtc_time *tm)
70{
71 struct tps6586x_rtc *rtc = dev_get_drvdata(dev);
72 struct device *tps_dev = to_tps6586x_dev(dev);
73 unsigned long long ticks = 0;
74 unsigned long seconds;
75 u8 buff[6];
76 int ret;
77 int i;
78
79 ret = tps6586x_reads(tps_dev, RTC_COUNT4_DUMMYREAD, sizeof(buff), buff);
80 if (ret < 0) {
81 dev_err(dev, "read counter failed with err %d\n", ret);
82 return ret;
83 }
84
85 for (i = 1; i < sizeof(buff); i++) {
86 ticks <<= 8;
87 ticks |= buff[i];
88 }
89
90 seconds = ticks >> 10;
91 seconds += rtc->epoch_start;
92 rtc_time_to_tm(seconds, tm);
93 return rtc_valid_tm(tm);
94}
95
96static int tps6586x_rtc_set_time(struct device *dev, struct rtc_time *tm)
97{
98 struct tps6586x_rtc *rtc = dev_get_drvdata(dev);
99 struct device *tps_dev = to_tps6586x_dev(dev);
100 unsigned long long ticks;
101 unsigned long seconds;
102 u8 buff[5];
103 int ret;
104
105 rtc_tm_to_time(tm, &seconds);
106 if (seconds < rtc->epoch_start) {
107 dev_err(dev, "requested time unsupported\n");
108 return -EINVAL;
109 }
110 seconds -= rtc->epoch_start;
111
112 ticks = (unsigned long long)seconds << 10;
113 buff[0] = (ticks >> 32) & 0xff;
114 buff[1] = (ticks >> 24) & 0xff;
115 buff[2] = (ticks >> 16) & 0xff;
116 buff[3] = (ticks >> 8) & 0xff;
117 buff[4] = ticks & 0xff;
118
119 /* Disable RTC before changing time */
120 ret = tps6586x_clr_bits(tps_dev, RTC_CTRL, RTC_ENABLE);
121 if (ret < 0) {
122 dev_err(dev, "failed to clear RTC_ENABLE\n");
123 return ret;
124 }
125
126 ret = tps6586x_writes(tps_dev, RTC_COUNT4, sizeof(buff), buff);
127 if (ret < 0) {
128 dev_err(dev, "failed to program new time\n");
129 return ret;
130 }
131
132 /* Enable RTC */
133 ret = tps6586x_set_bits(tps_dev, RTC_CTRL, RTC_ENABLE);
134 if (ret < 0) {
135 dev_err(dev, "failed to set RTC_ENABLE\n");
136 return ret;
137 }
138 return 0;
139}
140
141static int tps6586x_rtc_alarm_irq_enable(struct device *dev,
142 unsigned int enabled)
143{
144 struct tps6586x_rtc *rtc = dev_get_drvdata(dev);
145
146 if (enabled && !rtc->irq_en) {
147 enable_irq(rtc->irq);
148 rtc->irq_en = true;
149 } else if (!enabled && rtc->irq_en) {
150 disable_irq(rtc->irq);
151 rtc->irq_en = false;
152 }
153 return 0;
154}
155
156static int tps6586x_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
157{
158 struct tps6586x_rtc *rtc = dev_get_drvdata(dev);
159 struct device *tps_dev = to_tps6586x_dev(dev);
160 unsigned long seconds;
161 unsigned long ticks;
162 unsigned long rtc_current_time;
163 unsigned long long rticks = 0;
164 u8 buff[3];
165 u8 rbuff[6];
166 int ret;
167 int i;
168
169 rtc_tm_to_time(&alrm->time, &seconds);
170
171 if (alrm->enabled && (seconds < rtc->epoch_start)) {
172 dev_err(dev, "can't set alarm to requested time\n");
173 return -EINVAL;
174 }
175
176 ret = tps6586x_rtc_alarm_irq_enable(dev, alrm->enabled);
177 if (ret < 0) {
178 dev_err(dev, "can't set alarm irq, err %d\n", ret);
179 return ret;
180 }
181
182 seconds -= rtc->epoch_start;
183 ret = tps6586x_reads(tps_dev, RTC_COUNT4_DUMMYREAD,
184 sizeof(rbuff), rbuff);
185 if (ret < 0) {
186 dev_err(dev, "read counter failed with err %d\n", ret);
187 return ret;
188 }
189
190 for (i = 1; i < sizeof(rbuff); i++) {
191 rticks <<= 8;
192 rticks |= rbuff[i];
193 }
194
195 rtc_current_time = rticks >> 10;
196 if ((seconds - rtc_current_time) > ALM1_VALID_RANGE_IN_SEC)
197 seconds = rtc_current_time - 1;
198
199 ticks = (unsigned long long)seconds << 10;
200 buff[0] = (ticks >> 16) & 0xff;
201 buff[1] = (ticks >> 8) & 0xff;
202 buff[2] = ticks & 0xff;
203
204 ret = tps6586x_writes(tps_dev, RTC_ALARM1_HI, sizeof(buff), buff);
205 if (ret)
206 dev_err(dev, "programming alarm failed with err %d\n", ret);
207
208 return ret;
209}
210
211static int tps6586x_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
212{
213 struct tps6586x_rtc *rtc = dev_get_drvdata(dev);
214 struct device *tps_dev = to_tps6586x_dev(dev);
215 unsigned long ticks;
216 unsigned long seconds;
217 u8 buff[3];
218 int ret;
219
220 ret = tps6586x_reads(tps_dev, RTC_ALARM1_HI, sizeof(buff), buff);
221 if (ret) {
222 dev_err(dev, "read RTC_ALARM1_HI failed with err %d\n", ret);
223 return ret;
224 }
225
226 ticks = (buff[0] << 16) | (buff[1] << 8) | buff[2];
227 seconds = ticks >> 10;
228 seconds += rtc->epoch_start;
229
230 rtc_time_to_tm(seconds, &alrm->time);
231 return 0;
232}
233
234static const struct rtc_class_ops tps6586x_rtc_ops = {
235 .read_time = tps6586x_rtc_read_time,
236 .set_time = tps6586x_rtc_set_time,
237 .set_alarm = tps6586x_rtc_set_alarm,
238 .read_alarm = tps6586x_rtc_read_alarm,
239 .alarm_irq_enable = tps6586x_rtc_alarm_irq_enable,
240};
241
242static irqreturn_t tps6586x_rtc_irq(int irq, void *data)
243{
244 struct tps6586x_rtc *rtc = data;
245
246 rtc_update_irq(rtc->rtc, 1, RTC_IRQF | RTC_AF);
247 return IRQ_HANDLED;
248}
249
250static int tps6586x_rtc_probe(struct platform_device *pdev)
251{
252 struct device *tps_dev = to_tps6586x_dev(&pdev->dev);
253 struct tps6586x_rtc *rtc;
254 int ret;
255
256 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
257 if (!rtc)
258 return -ENOMEM;
259
260 rtc->dev = &pdev->dev;
261 rtc->irq = platform_get_irq(pdev, 0);
262
263 /* Set epoch start as 00:00:00:01:01:2009 */
264 rtc->epoch_start = mktime(2009, 1, 1, 0, 0, 0);
265
266 /* 1 kHz tick mode, enable tick counting */
267 ret = tps6586x_update(tps_dev, RTC_CTRL,
268 RTC_ENABLE | OSC_SRC_SEL |
269 ((TPS6586X_RTC_CL_SEL_1_5PF << CL_SEL_POS) & CL_SEL_MASK),
270 RTC_ENABLE | OSC_SRC_SEL | PRE_BYPASS | CL_SEL_MASK);
271 if (ret < 0) {
272 dev_err(&pdev->dev, "unable to start counter\n");
273 return ret;
274 }
275
276 platform_set_drvdata(pdev, rtc);
277 rtc->rtc = rtc_device_register(dev_name(&pdev->dev), &pdev->dev,
278 &tps6586x_rtc_ops, THIS_MODULE);
279 if (IS_ERR(rtc->rtc)) {
280 ret = PTR_ERR(rtc->rtc);
281 dev_err(&pdev->dev, "RTC device register: ret %d\n", ret);
282 goto fail_rtc_register;
283 }
284
285 ret = request_threaded_irq(rtc->irq, NULL, tps6586x_rtc_irq,
286 IRQF_ONESHOT | IRQF_EARLY_RESUME,
287 dev_name(&pdev->dev), rtc);
288 if (ret < 0) {
289 dev_err(&pdev->dev, "request IRQ(%d) failed with ret %d\n",
290 rtc->irq, ret);
291 goto fail_req_irq;
292 }
293 disable_irq(rtc->irq);
294 device_set_wakeup_capable(&pdev->dev, 1);
295 return 0;
296
297fail_req_irq:
298 rtc_device_unregister(rtc->rtc);
299
300fail_rtc_register:
301 tps6586x_update(tps_dev, RTC_CTRL, 0,
302 RTC_ENABLE | OSC_SRC_SEL | PRE_BYPASS | CL_SEL_MASK);
303 return ret;
304};
305
306static int tps6586x_rtc_remove(struct platform_device *pdev)
307{
308 struct tps6586x_rtc *rtc = platform_get_drvdata(pdev);
309 struct device *tps_dev = to_tps6586x_dev(&pdev->dev);
310
311 tps6586x_update(tps_dev, RTC_CTRL, 0,
312 RTC_ENABLE | OSC_SRC_SEL | PRE_BYPASS | CL_SEL_MASK);
313 rtc_device_unregister(rtc->rtc);
314 free_irq(rtc->irq, rtc);
315 return 0;
316}
317
318#ifdef CONFIG_PM_SLEEP
319static int tps6586x_rtc_suspend(struct device *dev)
320{
321 struct tps6586x_rtc *rtc = dev_get_drvdata(dev);
322
323 if (device_may_wakeup(dev))
324 enable_irq_wake(rtc->irq);
325 return 0;
326}
327
328static int tps6586x_rtc_resume(struct device *dev)
329{
330 struct tps6586x_rtc *rtc = dev_get_drvdata(dev);
331
332 if (device_may_wakeup(dev))
333 disable_irq_wake(rtc->irq);
334 return 0;
335}
336#endif
337
338static const struct dev_pm_ops tps6586x_pm_ops = {
339 SET_SYSTEM_SLEEP_PM_OPS(tps6586x_rtc_suspend, tps6586x_rtc_resume)
340};
341
342static struct platform_driver tps6586x_rtc_driver = {
343 .driver = {
344 .name = "tps6586x-rtc",
345 .owner = THIS_MODULE,
346 .pm = &tps6586x_pm_ops,
347 },
348 .probe = tps6586x_rtc_probe,
349 .remove = tps6586x_rtc_remove,
350};
351module_platform_driver(tps6586x_rtc_driver);
352
353MODULE_ALIAS("platform:rtc-tps6586x");
354MODULE_DESCRIPTION("TI TPS6586x RTC driver");
355MODULE_AUTHOR("Laxman dewangan <ldewangan@nvidia.com>");
356MODULE_LICENSE("GPL v2");
diff --git a/drivers/rtc/rtc-vt8500.c b/drivers/rtc/rtc-vt8500.c
index fd1418750ac..00c930f4b6f 100644
--- a/drivers/rtc/rtc-vt8500.c
+++ b/drivers/rtc/rtc-vt8500.c
@@ -70,7 +70,7 @@
70 | ALARM_SEC_BIT) 70 | ALARM_SEC_BIT)
71 71
72#define VT8500_RTC_CR_ENABLE (1 << 0) /* Enable RTC */ 72#define VT8500_RTC_CR_ENABLE (1 << 0) /* Enable RTC */
73#define VT8500_RTC_CR_24H (1 << 1) /* 24h time format */ 73#define VT8500_RTC_CR_12H (1 << 1) /* 12h time format */
74#define VT8500_RTC_CR_SM_ENABLE (1 << 2) /* Enable periodic irqs */ 74#define VT8500_RTC_CR_SM_ENABLE (1 << 2) /* Enable periodic irqs */
75#define VT8500_RTC_CR_SM_SEC (1 << 3) /* 0: 1Hz/60, 1: 1Hz */ 75#define VT8500_RTC_CR_SM_SEC (1 << 3) /* 0: 1Hz/60, 1: 1Hz */
76#define VT8500_RTC_CR_CALIB (1 << 4) /* Enable calibration */ 76#define VT8500_RTC_CR_CALIB (1 << 4) /* Enable calibration */
@@ -119,7 +119,7 @@ static int vt8500_rtc_read_time(struct device *dev, struct rtc_time *tm)
119 tm->tm_min = bcd2bin((time & TIME_MIN_MASK) >> TIME_MIN_S); 119 tm->tm_min = bcd2bin((time & TIME_MIN_MASK) >> TIME_MIN_S);
120 tm->tm_hour = bcd2bin((time & TIME_HOUR_MASK) >> TIME_HOUR_S); 120 tm->tm_hour = bcd2bin((time & TIME_HOUR_MASK) >> TIME_HOUR_S);
121 tm->tm_mday = bcd2bin(date & DATE_DAY_MASK); 121 tm->tm_mday = bcd2bin(date & DATE_DAY_MASK);
122 tm->tm_mon = bcd2bin((date & DATE_MONTH_MASK) >> DATE_MONTH_S); 122 tm->tm_mon = bcd2bin((date & DATE_MONTH_MASK) >> DATE_MONTH_S) - 1;
123 tm->tm_year = bcd2bin((date & DATE_YEAR_MASK) >> DATE_YEAR_S) 123 tm->tm_year = bcd2bin((date & DATE_YEAR_MASK) >> DATE_YEAR_S)
124 + ((date >> DATE_CENTURY_S) & 1 ? 200 : 100); 124 + ((date >> DATE_CENTURY_S) & 1 ? 200 : 100);
125 tm->tm_wday = (time & TIME_DOW_MASK) >> TIME_DOW_S; 125 tm->tm_wday = (time & TIME_DOW_MASK) >> TIME_DOW_S;
@@ -138,8 +138,9 @@ static int vt8500_rtc_set_time(struct device *dev, struct rtc_time *tm)
138 } 138 }
139 139
140 writel((bin2bcd(tm->tm_year - 100) << DATE_YEAR_S) 140 writel((bin2bcd(tm->tm_year - 100) << DATE_YEAR_S)
141 | (bin2bcd(tm->tm_mon) << DATE_MONTH_S) 141 | (bin2bcd(tm->tm_mon + 1) << DATE_MONTH_S)
142 | (bin2bcd(tm->tm_mday)), 142 | (bin2bcd(tm->tm_mday))
143 | ((tm->tm_year >= 200) << DATE_CENTURY_S),
143 vt8500_rtc->regbase + VT8500_RTC_DS); 144 vt8500_rtc->regbase + VT8500_RTC_DS);
144 writel((bin2bcd(tm->tm_wday) << TIME_DOW_S) 145 writel((bin2bcd(tm->tm_wday) << TIME_DOW_S)
145 | (bin2bcd(tm->tm_hour) << TIME_HOUR_S) 146 | (bin2bcd(tm->tm_hour) << TIME_HOUR_S)
@@ -247,7 +248,7 @@ static int vt8500_rtc_probe(struct platform_device *pdev)
247 } 248 }
248 249
249 /* Enable RTC and set it to 24-hour mode */ 250 /* Enable RTC and set it to 24-hour mode */
250 writel(VT8500_RTC_CR_ENABLE | VT8500_RTC_CR_24H, 251 writel(VT8500_RTC_CR_ENABLE,
251 vt8500_rtc->regbase + VT8500_RTC_CR); 252 vt8500_rtc->regbase + VT8500_RTC_CR);
252 253
253 vt8500_rtc->rtc = rtc_device_register("vt8500-rtc", &pdev->dev, 254 vt8500_rtc->rtc = rtc_device_register("vt8500-rtc", &pdev->dev,
diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h
index ed6642ad03e..25f01d0bc14 100644
--- a/include/asm-generic/tlb.h
+++ b/include/asm-generic/tlb.h
@@ -78,6 +78,14 @@ struct mmu_gather_batch {
78#define MAX_GATHER_BATCH \ 78#define MAX_GATHER_BATCH \
79 ((PAGE_SIZE - sizeof(struct mmu_gather_batch)) / sizeof(void *)) 79 ((PAGE_SIZE - sizeof(struct mmu_gather_batch)) / sizeof(void *))
80 80
81/*
82 * Limit the maximum number of mmu_gather batches to reduce a risk of soft
83 * lockups for non-preemptible kernels on huge machines when a lot of memory
84 * is zapped during unmapping.
85 * 10K pages freed at once should be safe even without a preemption point.
86 */
87#define MAX_GATHER_BATCH_COUNT (10000UL/MAX_GATHER_BATCH)
88
81/* struct mmu_gather is an opaque type used by the mm code for passing around 89/* struct mmu_gather is an opaque type used by the mm code for passing around
82 * any data needed by arch specific code for tlb_remove_page. 90 * any data needed by arch specific code for tlb_remove_page.
83 */ 91 */
@@ -96,6 +104,7 @@ struct mmu_gather {
96 struct mmu_gather_batch *active; 104 struct mmu_gather_batch *active;
97 struct mmu_gather_batch local; 105 struct mmu_gather_batch local;
98 struct page *__pages[MMU_GATHER_BUNDLE]; 106 struct page *__pages[MMU_GATHER_BUNDLE];
107 unsigned int batch_count;
99}; 108};
100 109
101#define HAVE_GENERIC_MMU_GATHER 110#define HAVE_GENERIC_MMU_GATHER
diff --git a/include/linux/ipc_namespace.h b/include/linux/ipc_namespace.h
index fe771978e87..ae221a7b509 100644
--- a/include/linux/ipc_namespace.h
+++ b/include/linux/ipc_namespace.h
@@ -24,6 +24,7 @@ struct ipc_ids {
24 unsigned short seq_max; 24 unsigned short seq_max;
25 struct rw_semaphore rw_mutex; 25 struct rw_semaphore rw_mutex;
26 struct idr ipcs_idr; 26 struct idr ipcs_idr;
27 int next_id;
27}; 28};
28 29
29struct ipc_namespace { 30struct ipc_namespace {
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index 4bec5be82ca..73b64a38b98 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -503,14 +503,6 @@ struct zone {
503 * rarely used fields: 503 * rarely used fields:
504 */ 504 */
505 const char *name; 505 const char *name;
506#ifdef CONFIG_MEMORY_ISOLATION
507 /*
508 * the number of MIGRATE_ISOLATE *pageblock*.
509 * We need this for free page counting. Look at zone_watermark_ok_safe.
510 * It's protected by zone->lock
511 */
512 int nr_pageblock_isolate;
513#endif
514} ____cacheline_internodealigned_in_smp; 506} ____cacheline_internodealigned_in_smp;
515 507
516typedef enum { 508typedef enum {
diff --git a/include/linux/msg.h b/include/linux/msg.h
index 7a4b9e97d29..391af8d11cc 100644
--- a/include/linux/msg.h
+++ b/include/linux/msg.h
@@ -34,7 +34,9 @@ struct msg_queue {
34/* Helper routines for sys_msgsnd and sys_msgrcv */ 34/* Helper routines for sys_msgsnd and sys_msgrcv */
35extern long do_msgsnd(int msqid, long mtype, void __user *mtext, 35extern long do_msgsnd(int msqid, long mtype, void __user *mtext,
36 size_t msgsz, int msgflg); 36 size_t msgsz, int msgflg);
37extern long do_msgrcv(int msqid, long *pmtype, void __user *mtext, 37extern long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp,
38 size_t msgsz, long msgtyp, int msgflg); 38 int msgflg,
39 long (*msg_fill)(void __user *, struct msg_msg *,
40 size_t));
39 41
40#endif /* _LINUX_MSG_H */ 42#endif /* _LINUX_MSG_H */
diff --git a/include/uapi/linux/msg.h b/include/uapi/linux/msg.h
index 78dbd2f996a..22d95c6854e 100644
--- a/include/uapi/linux/msg.h
+++ b/include/uapi/linux/msg.h
@@ -10,6 +10,7 @@
10/* msgrcv options */ 10/* msgrcv options */
11#define MSG_NOERROR 010000 /* no error if message is too big */ 11#define MSG_NOERROR 010000 /* no error if message is too big */
12#define MSG_EXCEPT 020000 /* recv any msg except of specified type.*/ 12#define MSG_EXCEPT 020000 /* recv any msg except of specified type.*/
13#define MSG_COPY 040000 /* copy (not remove) all queue messages */
13 14
14/* Obsolete, used only for backwards compatibility and libc5 compiles */ 15/* Obsolete, used only for backwards compatibility and libc5 compiles */
15struct msqid_ds { 16struct msqid_ds {
diff --git a/ipc/compat.c b/ipc/compat.c
index ad9518eb26e..2547f29dcd1 100644
--- a/ipc/compat.c
+++ b/ipc/compat.c
@@ -306,6 +306,20 @@ static long do_compat_semctl(int first, int second, int third, u32 pad)
306 return err; 306 return err;
307} 307}
308 308
309long compat_do_msg_fill(void __user *dest, struct msg_msg *msg, size_t bufsz)
310{
311 struct compat_msgbuf __user *msgp = dest;
312 size_t msgsz;
313
314 if (put_user(msg->m_type, &msgp->mtype))
315 return -EFAULT;
316
317 msgsz = (bufsz > msg->m_ts) ? msg->m_ts : bufsz;
318 if (store_msg(msgp->mtext, msg, msgsz))
319 return -EFAULT;
320 return msgsz;
321}
322
309#ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC 323#ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC
310long compat_sys_semctl(int first, int second, int third, void __user *uptr) 324long compat_sys_semctl(int first, int second, int third, void __user *uptr)
311{ 325{
@@ -337,10 +351,6 @@ long compat_sys_msgsnd(int first, int second, int third, void __user *uptr)
337long compat_sys_msgrcv(int first, int second, int msgtyp, int third, 351long compat_sys_msgrcv(int first, int second, int msgtyp, int third,
338 int version, void __user *uptr) 352 int version, void __user *uptr)
339{ 353{
340 struct compat_msgbuf __user *up;
341 long type;
342 int err;
343
344 if (first < 0) 354 if (first < 0)
345 return -EINVAL; 355 return -EINVAL;
346 if (second < 0) 356 if (second < 0)
@@ -348,23 +358,15 @@ long compat_sys_msgrcv(int first, int second, int msgtyp, int third,
348 358
349 if (!version) { 359 if (!version) {
350 struct compat_ipc_kludge ipck; 360 struct compat_ipc_kludge ipck;
351 err = -EINVAL;
352 if (!uptr) 361 if (!uptr)
353 goto out; 362 return -EINVAL;
354 err = -EFAULT;
355 if (copy_from_user (&ipck, uptr, sizeof(ipck))) 363 if (copy_from_user (&ipck, uptr, sizeof(ipck)))
356 goto out; 364 return -EFAULT;
357 uptr = compat_ptr(ipck.msgp); 365 uptr = compat_ptr(ipck.msgp);
358 msgtyp = ipck.msgtyp; 366 msgtyp = ipck.msgtyp;
359 } 367 }
360 up = uptr; 368 return do_msgrcv(first, uptr, second, msgtyp, third,
361 err = do_msgrcv(first, &type, up->mtext, second, msgtyp, third); 369 compat_do_msg_fill);
362 if (err < 0)
363 goto out;
364 if (put_user(type, &up->mtype))
365 err = -EFAULT;
366out:
367 return err;
368} 370}
369#else 371#else
370long compat_sys_semctl(int semid, int semnum, int cmd, int arg) 372long compat_sys_semctl(int semid, int semnum, int cmd, int arg)
@@ -385,16 +387,8 @@ long compat_sys_msgsnd(int msqid, struct compat_msgbuf __user *msgp,
385long compat_sys_msgrcv(int msqid, struct compat_msgbuf __user *msgp, 387long compat_sys_msgrcv(int msqid, struct compat_msgbuf __user *msgp,
386 compat_ssize_t msgsz, long msgtyp, int msgflg) 388 compat_ssize_t msgsz, long msgtyp, int msgflg)
387{ 389{
388 long err, mtype; 390 return do_msgrcv(msqid, msgp, (ssize_t)msgsz, msgtyp, msgflg,
389 391 compat_do_msg_fill);
390 err = do_msgrcv(msqid, &mtype, msgp->mtext, (ssize_t)msgsz, msgtyp, msgflg);
391 if (err < 0)
392 goto out;
393
394 if (put_user(mtype, &msgp->mtype))
395 err = -EFAULT;
396 out:
397 return err;
398} 392}
399#endif 393#endif
400 394
diff --git a/ipc/ipc_sysctl.c b/ipc/ipc_sysctl.c
index 00fba2bab87..130dfece27a 100644
--- a/ipc/ipc_sysctl.c
+++ b/ipc/ipc_sysctl.c
@@ -158,6 +158,9 @@ static int proc_ipcauto_dointvec_minmax(ctl_table *table, int write,
158 158
159static int zero; 159static int zero;
160static int one = 1; 160static int one = 1;
161#ifdef CONFIG_CHECKPOINT_RESTORE
162static int int_max = INT_MAX;
163#endif
161 164
162static struct ctl_table ipc_kern_table[] = { 165static struct ctl_table ipc_kern_table[] = {
163 { 166 {
@@ -227,6 +230,35 @@ static struct ctl_table ipc_kern_table[] = {
227 .extra1 = &zero, 230 .extra1 = &zero,
228 .extra2 = &one, 231 .extra2 = &one,
229 }, 232 },
233#ifdef CONFIG_CHECKPOINT_RESTORE
234 {
235 .procname = "sem_next_id",
236 .data = &init_ipc_ns.ids[IPC_SEM_IDS].next_id,
237 .maxlen = sizeof(init_ipc_ns.ids[IPC_SEM_IDS].next_id),
238 .mode = 0644,
239 .proc_handler = proc_ipc_dointvec_minmax,
240 .extra1 = &zero,
241 .extra2 = &int_max,
242 },
243 {
244 .procname = "msg_next_id",
245 .data = &init_ipc_ns.ids[IPC_MSG_IDS].next_id,
246 .maxlen = sizeof(init_ipc_ns.ids[IPC_MSG_IDS].next_id),
247 .mode = 0644,
248 .proc_handler = proc_ipc_dointvec_minmax,
249 .extra1 = &zero,
250 .extra2 = &int_max,
251 },
252 {
253 .procname = "shm_next_id",
254 .data = &init_ipc_ns.ids[IPC_SHM_IDS].next_id,
255 .maxlen = sizeof(init_ipc_ns.ids[IPC_SHM_IDS].next_id),
256 .mode = 0644,
257 .proc_handler = proc_ipc_dointvec_minmax,
258 .extra1 = &zero,
259 .extra2 = &int_max,
260 },
261#endif
230 {} 262 {}
231}; 263};
232 264
diff --git a/ipc/msg.c b/ipc/msg.c
index a71af5a65ab..950572f9d79 100644
--- a/ipc/msg.c
+++ b/ipc/msg.c
@@ -755,26 +755,91 @@ static inline int convert_mode(long *msgtyp, int msgflg)
755 return SEARCH_EQUAL; 755 return SEARCH_EQUAL;
756} 756}
757 757
758long do_msgrcv(int msqid, long *pmtype, void __user *mtext, 758static long do_msg_fill(void __user *dest, struct msg_msg *msg, size_t bufsz)
759 size_t msgsz, long msgtyp, int msgflg) 759{
760 struct msgbuf __user *msgp = dest;
761 size_t msgsz;
762
763 if (put_user(msg->m_type, &msgp->mtype))
764 return -EFAULT;
765
766 msgsz = (bufsz > msg->m_ts) ? msg->m_ts : bufsz;
767 if (store_msg(msgp->mtext, msg, msgsz))
768 return -EFAULT;
769 return msgsz;
770}
771
772#ifdef CONFIG_CHECKPOINT_RESTORE
773/*
774 * This function creates new kernel message structure, large enough to store
775 * bufsz message bytes.
776 */
777static inline struct msg_msg *prepare_copy(void __user *buf, size_t bufsz,
778 int msgflg, long *msgtyp,
779 unsigned long *copy_number)
780{
781 struct msg_msg *copy;
782
783 *copy_number = *msgtyp;
784 *msgtyp = 0;
785 /*
786 * Create dummy message to copy real message to.
787 */
788 copy = load_msg(buf, bufsz);
789 if (!IS_ERR(copy))
790 copy->m_ts = bufsz;
791 return copy;
792}
793
794static inline void free_copy(struct msg_msg *copy)
795{
796 if (copy)
797 free_msg(copy);
798}
799#else
800static inline struct msg_msg *prepare_copy(void __user *buf, size_t bufsz,
801 int msgflg, long *msgtyp,
802 unsigned long *copy_number)
803{
804 return ERR_PTR(-ENOSYS);
805}
806
807static inline void free_copy(struct msg_msg *copy)
808{
809}
810#endif
811
812long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp,
813 int msgflg,
814 long (*msg_handler)(void __user *, struct msg_msg *, size_t))
760{ 815{
761 struct msg_queue *msq; 816 struct msg_queue *msq;
762 struct msg_msg *msg; 817 struct msg_msg *msg;
763 int mode; 818 int mode;
764 struct ipc_namespace *ns; 819 struct ipc_namespace *ns;
820 struct msg_msg *copy = NULL;
821 unsigned long copy_number = 0;
765 822
766 if (msqid < 0 || (long) msgsz < 0) 823 if (msqid < 0 || (long) bufsz < 0)
767 return -EINVAL; 824 return -EINVAL;
825 if (msgflg & MSG_COPY) {
826 copy = prepare_copy(buf, bufsz, msgflg, &msgtyp, &copy_number);
827 if (IS_ERR(copy))
828 return PTR_ERR(copy);
829 }
768 mode = convert_mode(&msgtyp, msgflg); 830 mode = convert_mode(&msgtyp, msgflg);
769 ns = current->nsproxy->ipc_ns; 831 ns = current->nsproxy->ipc_ns;
770 832
771 msq = msg_lock_check(ns, msqid); 833 msq = msg_lock_check(ns, msqid);
772 if (IS_ERR(msq)) 834 if (IS_ERR(msq)) {
835 free_copy(copy);
773 return PTR_ERR(msq); 836 return PTR_ERR(msq);
837 }
774 838
775 for (;;) { 839 for (;;) {
776 struct msg_receiver msr_d; 840 struct msg_receiver msr_d;
777 struct list_head *tmp; 841 struct list_head *tmp;
842 long msg_counter = 0;
778 843
779 msg = ERR_PTR(-EACCES); 844 msg = ERR_PTR(-EACCES);
780 if (ipcperms(ns, &msq->q_perm, S_IRUGO)) 845 if (ipcperms(ns, &msq->q_perm, S_IRUGO))
@@ -793,12 +858,21 @@ long do_msgrcv(int msqid, long *pmtype, void __user *mtext,
793 msg = walk_msg; 858 msg = walk_msg;
794 if (mode == SEARCH_LESSEQUAL && 859 if (mode == SEARCH_LESSEQUAL &&
795 walk_msg->m_type != 1) { 860 walk_msg->m_type != 1) {
796 msg = walk_msg;
797 msgtyp = walk_msg->m_type - 1; 861 msgtyp = walk_msg->m_type - 1;
798 } else { 862 } else if (msgflg & MSG_COPY) {
799 msg = walk_msg; 863 if (copy_number == msg_counter) {
864 /*
865 * Found requested message.
866 * Copy it.
867 */
868 msg = copy_msg(msg, copy);
869 if (IS_ERR(msg))
870 goto out_unlock;
871 break;
872 }
873 } else
800 break; 874 break;
801 } 875 msg_counter++;
802 } 876 }
803 tmp = tmp->next; 877 tmp = tmp->next;
804 } 878 }
@@ -807,10 +881,16 @@ long do_msgrcv(int msqid, long *pmtype, void __user *mtext,
807 * Found a suitable message. 881 * Found a suitable message.
808 * Unlink it from the queue. 882 * Unlink it from the queue.
809 */ 883 */
810 if ((msgsz < msg->m_ts) && !(msgflg & MSG_NOERROR)) { 884 if ((bufsz < msg->m_ts) && !(msgflg & MSG_NOERROR)) {
811 msg = ERR_PTR(-E2BIG); 885 msg = ERR_PTR(-E2BIG);
812 goto out_unlock; 886 goto out_unlock;
813 } 887 }
888 /*
889 * If we are copying, then do not unlink message and do
890 * not update queue parameters.
891 */
892 if (msgflg & MSG_COPY)
893 goto out_unlock;
814 list_del(&msg->m_list); 894 list_del(&msg->m_list);
815 msq->q_qnum--; 895 msq->q_qnum--;
816 msq->q_rtime = get_seconds(); 896 msq->q_rtime = get_seconds();
@@ -834,7 +914,7 @@ long do_msgrcv(int msqid, long *pmtype, void __user *mtext,
834 if (msgflg & MSG_NOERROR) 914 if (msgflg & MSG_NOERROR)
835 msr_d.r_maxsize = INT_MAX; 915 msr_d.r_maxsize = INT_MAX;
836 else 916 else
837 msr_d.r_maxsize = msgsz; 917 msr_d.r_maxsize = bufsz;
838 msr_d.r_msg = ERR_PTR(-EAGAIN); 918 msr_d.r_msg = ERR_PTR(-EAGAIN);
839 current->state = TASK_INTERRUPTIBLE; 919 current->state = TASK_INTERRUPTIBLE;
840 msg_unlock(msq); 920 msg_unlock(msq);
@@ -894,32 +974,21 @@ out_unlock:
894 break; 974 break;
895 } 975 }
896 } 976 }
897 if (IS_ERR(msg)) 977 if (IS_ERR(msg)) {
978 free_copy(copy);
898 return PTR_ERR(msg); 979 return PTR_ERR(msg);
980 }
899 981
900 msgsz = (msgsz > msg->m_ts) ? msg->m_ts : msgsz; 982 bufsz = msg_handler(buf, msg, bufsz);
901 *pmtype = msg->m_type;
902 if (store_msg(mtext, msg, msgsz))
903 msgsz = -EFAULT;
904
905 free_msg(msg); 983 free_msg(msg);
906 984
907 return msgsz; 985 return bufsz;
908} 986}
909 987
910SYSCALL_DEFINE5(msgrcv, int, msqid, struct msgbuf __user *, msgp, size_t, msgsz, 988SYSCALL_DEFINE5(msgrcv, int, msqid, struct msgbuf __user *, msgp, size_t, msgsz,
911 long, msgtyp, int, msgflg) 989 long, msgtyp, int, msgflg)
912{ 990{
913 long err, mtype; 991 return do_msgrcv(msqid, msgp, msgsz, msgtyp, msgflg, do_msg_fill);
914
915 err = do_msgrcv(msqid, &mtype, msgp->mtext, msgsz, msgtyp, msgflg);
916 if (err < 0)
917 goto out;
918
919 if (put_user(mtype, &msgp->mtype))
920 err = -EFAULT;
921out:
922 return err;
923} 992}
924 993
925#ifdef CONFIG_PROC_FS 994#ifdef CONFIG_PROC_FS
diff --git a/ipc/msgutil.c b/ipc/msgutil.c
index 6471f1bdae9..ebfcbfa8b7f 100644
--- a/ipc/msgutil.c
+++ b/ipc/msgutil.c
@@ -102,7 +102,50 @@ out_err:
102 free_msg(msg); 102 free_msg(msg);
103 return ERR_PTR(err); 103 return ERR_PTR(err);
104} 104}
105#ifdef CONFIG_CHECKPOINT_RESTORE
106struct msg_msg *copy_msg(struct msg_msg *src, struct msg_msg *dst)
107{
108 struct msg_msgseg *dst_pseg, *src_pseg;
109 int len = src->m_ts;
110 int alen;
111
112 BUG_ON(dst == NULL);
113 if (src->m_ts > dst->m_ts)
114 return ERR_PTR(-EINVAL);
105 115
116 alen = len;
117 if (alen > DATALEN_MSG)
118 alen = DATALEN_MSG;
119
120 dst->next = NULL;
121 dst->security = NULL;
122
123 memcpy(dst + 1, src + 1, alen);
124
125 len -= alen;
126 dst_pseg = dst->next;
127 src_pseg = src->next;
128 while (len > 0) {
129 alen = len;
130 if (alen > DATALEN_SEG)
131 alen = DATALEN_SEG;
132 memcpy(dst_pseg + 1, src_pseg + 1, alen);
133 dst_pseg = dst_pseg->next;
134 len -= alen;
135 src_pseg = src_pseg->next;
136 }
137
138 dst->m_type = src->m_type;
139 dst->m_ts = src->m_ts;
140
141 return dst;
142}
143#else
144struct msg_msg *copy_msg(struct msg_msg *src, struct msg_msg *dst)
145{
146 return ERR_PTR(-ENOSYS);
147}
148#endif
106int store_msg(void __user *dest, struct msg_msg *msg, int len) 149int store_msg(void __user *dest, struct msg_msg *msg, int len)
107{ 150{
108 int alen; 151 int alen;
diff --git a/ipc/util.c b/ipc/util.c
index 72fd0785ac9..74e1d9c7a98 100644
--- a/ipc/util.c
+++ b/ipc/util.c
@@ -122,6 +122,7 @@ void ipc_init_ids(struct ipc_ids *ids)
122 122
123 ids->in_use = 0; 123 ids->in_use = 0;
124 ids->seq = 0; 124 ids->seq = 0;
125 ids->next_id = -1;
125 { 126 {
126 int seq_limit = INT_MAX/SEQ_MULTIPLIER; 127 int seq_limit = INT_MAX/SEQ_MULTIPLIER;
127 if (seq_limit > USHRT_MAX) 128 if (seq_limit > USHRT_MAX)
@@ -252,6 +253,7 @@ int ipc_addid(struct ipc_ids* ids, struct kern_ipc_perm* new, int size)
252 kuid_t euid; 253 kuid_t euid;
253 kgid_t egid; 254 kgid_t egid;
254 int id, err; 255 int id, err;
256 int next_id = ids->next_id;
255 257
256 if (size > IPCMNI) 258 if (size > IPCMNI)
257 size = IPCMNI; 259 size = IPCMNI;
@@ -264,7 +266,8 @@ int ipc_addid(struct ipc_ids* ids, struct kern_ipc_perm* new, int size)
264 rcu_read_lock(); 266 rcu_read_lock();
265 spin_lock(&new->lock); 267 spin_lock(&new->lock);
266 268
267 err = idr_get_new(&ids->ipcs_idr, new, &id); 269 err = idr_get_new_above(&ids->ipcs_idr, new,
270 (next_id < 0) ? 0 : ipcid_to_idx(next_id), &id);
268 if (err) { 271 if (err) {
269 spin_unlock(&new->lock); 272 spin_unlock(&new->lock);
270 rcu_read_unlock(); 273 rcu_read_unlock();
@@ -277,9 +280,14 @@ int ipc_addid(struct ipc_ids* ids, struct kern_ipc_perm* new, int size)
277 new->cuid = new->uid = euid; 280 new->cuid = new->uid = euid;
278 new->gid = new->cgid = egid; 281 new->gid = new->cgid = egid;
279 282
280 new->seq = ids->seq++; 283 if (next_id < 0) {
281 if(ids->seq > ids->seq_max) 284 new->seq = ids->seq++;
282 ids->seq = 0; 285 if (ids->seq > ids->seq_max)
286 ids->seq = 0;
287 } else {
288 new->seq = ipcid_to_seqx(next_id);
289 ids->next_id = -1;
290 }
283 291
284 new->id = ipc_buildid(id, new->seq); 292 new->id = ipc_buildid(id, new->seq);
285 return id; 293 return id;
diff --git a/ipc/util.h b/ipc/util.h
index c8fe2f7631e..eeb79a1fbd8 100644
--- a/ipc/util.h
+++ b/ipc/util.h
@@ -92,6 +92,7 @@ void __init ipc_init_proc_interface(const char *path, const char *header,
92#define IPC_SHM_IDS 2 92#define IPC_SHM_IDS 2
93 93
94#define ipcid_to_idx(id) ((id) % SEQ_MULTIPLIER) 94#define ipcid_to_idx(id) ((id) % SEQ_MULTIPLIER)
95#define ipcid_to_seqx(id) ((id) / SEQ_MULTIPLIER)
95 96
96/* must be called with ids->rw_mutex acquired for writing */ 97/* must be called with ids->rw_mutex acquired for writing */
97int ipc_addid(struct ipc_ids *, struct kern_ipc_perm *, int); 98int ipc_addid(struct ipc_ids *, struct kern_ipc_perm *, int);
@@ -139,6 +140,7 @@ int ipc_parse_version (int *cmd);
139 140
140extern void free_msg(struct msg_msg *msg); 141extern void free_msg(struct msg_msg *msg);
141extern struct msg_msg *load_msg(const void __user *src, int len); 142extern struct msg_msg *load_msg(const void __user *src, int len);
143extern struct msg_msg *copy_msg(struct msg_msg *src, struct msg_msg *dst);
142extern int store_msg(void __user *dest, struct msg_msg *msg, int len); 144extern int store_msg(void __user *dest, struct msg_msg *msg, int len);
143 145
144extern void recompute_msgmni(struct ipc_namespace *); 146extern void recompute_msgmni(struct ipc_namespace *);
diff --git a/kernel/printk.c b/kernel/printk.c
index 19c0d7bcf24..357f714ddd4 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -870,10 +870,11 @@ static size_t print_time(u64 ts, char *buf)
870 if (!printk_time) 870 if (!printk_time)
871 return 0; 871 return 0;
872 872
873 rem_nsec = do_div(ts, 1000000000);
874
873 if (!buf) 875 if (!buf)
874 return 15; 876 return snprintf(NULL, 0, "[%5lu.000000] ", (unsigned long)ts);
875 877
876 rem_nsec = do_div(ts, 1000000000);
877 return sprintf(buf, "[%5lu.%06lu] ", 878 return sprintf(buf, "[%5lu.%06lu] ",
878 (unsigned long)ts, rem_nsec / 1000); 879 (unsigned long)ts, rem_nsec / 1000);
879} 880}
diff --git a/mm/memory.c b/mm/memory.c
index e0a9b0ce4f1..49fb1cf0861 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -184,10 +184,14 @@ static int tlb_next_batch(struct mmu_gather *tlb)
184 return 1; 184 return 1;
185 } 185 }
186 186
187 if (tlb->batch_count == MAX_GATHER_BATCH_COUNT)
188 return 0;
189
187 batch = (void *)__get_free_pages(GFP_NOWAIT | __GFP_NOWARN, 0); 190 batch = (void *)__get_free_pages(GFP_NOWAIT | __GFP_NOWARN, 0);
188 if (!batch) 191 if (!batch)
189 return 0; 192 return 0;
190 193
194 tlb->batch_count++;
191 batch->next = NULL; 195 batch->next = NULL;
192 batch->nr = 0; 196 batch->nr = 0;
193 batch->max = MAX_GATHER_BATCH; 197 batch->max = MAX_GATHER_BATCH;
@@ -216,6 +220,7 @@ void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, bool fullmm)
216 tlb->local.nr = 0; 220 tlb->local.nr = 0;
217 tlb->local.max = ARRAY_SIZE(tlb->__pages); 221 tlb->local.max = ARRAY_SIZE(tlb->__pages);
218 tlb->active = &tlb->local; 222 tlb->active = &tlb->local;
223 tlb->batch_count = 0;
219 224
220#ifdef CONFIG_HAVE_RCU_TABLE_FREE 225#ifdef CONFIG_HAVE_RCU_TABLE_FREE
221 tlb->batch = NULL; 226 tlb->batch = NULL;
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 4ba5e37127f..bc6cc0e913b 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -221,11 +221,6 @@ EXPORT_SYMBOL(nr_online_nodes);
221 221
222int page_group_by_mobility_disabled __read_mostly; 222int page_group_by_mobility_disabled __read_mostly;
223 223
224/*
225 * NOTE:
226 * Don't use set_pageblock_migratetype(page, MIGRATE_ISOLATE) directly.
227 * Instead, use {un}set_pageblock_isolate.
228 */
229void set_pageblock_migratetype(struct page *page, int migratetype) 224void set_pageblock_migratetype(struct page *page, int migratetype)
230{ 225{
231 226
@@ -1655,20 +1650,6 @@ static bool __zone_watermark_ok(struct zone *z, int order, unsigned long mark,
1655 return true; 1650 return true;
1656} 1651}
1657 1652
1658#ifdef CONFIG_MEMORY_ISOLATION
1659static inline unsigned long nr_zone_isolate_freepages(struct zone *zone)
1660{
1661 if (unlikely(zone->nr_pageblock_isolate))
1662 return zone->nr_pageblock_isolate * pageblock_nr_pages;
1663 return 0;
1664}
1665#else
1666static inline unsigned long nr_zone_isolate_freepages(struct zone *zone)
1667{
1668 return 0;
1669}
1670#endif
1671
1672bool zone_watermark_ok(struct zone *z, int order, unsigned long mark, 1653bool zone_watermark_ok(struct zone *z, int order, unsigned long mark,
1673 int classzone_idx, int alloc_flags) 1654 int classzone_idx, int alloc_flags)
1674{ 1655{
@@ -1684,14 +1665,6 @@ bool zone_watermark_ok_safe(struct zone *z, int order, unsigned long mark,
1684 if (z->percpu_drift_mark && free_pages < z->percpu_drift_mark) 1665 if (z->percpu_drift_mark && free_pages < z->percpu_drift_mark)
1685 free_pages = zone_page_state_snapshot(z, NR_FREE_PAGES); 1666 free_pages = zone_page_state_snapshot(z, NR_FREE_PAGES);
1686 1667
1687 /*
1688 * If the zone has MIGRATE_ISOLATE type free pages, we should consider
1689 * it. nr_zone_isolate_freepages is never accurate so kswapd might not
1690 * sleep although it could do so. But this is more desirable for memory
1691 * hotplug than sleeping which can cause a livelock in the direct
1692 * reclaim path.
1693 */
1694 free_pages -= nr_zone_isolate_freepages(z);
1695 return __zone_watermark_ok(z, order, mark, classzone_idx, alloc_flags, 1668 return __zone_watermark_ok(z, order, mark, classzone_idx, alloc_flags,
1696 free_pages); 1669 free_pages);
1697} 1670}
diff --git a/mm/page_isolation.c b/mm/page_isolation.c
index 9d2264ea460..383bdbb98b0 100644
--- a/mm/page_isolation.c
+++ b/mm/page_isolation.c
@@ -8,28 +8,6 @@
8#include <linux/memory.h> 8#include <linux/memory.h>
9#include "internal.h" 9#include "internal.h"
10 10
11/* called while holding zone->lock */
12static void set_pageblock_isolate(struct page *page)
13{
14 if (get_pageblock_migratetype(page) == MIGRATE_ISOLATE)
15 return;
16
17 set_pageblock_migratetype(page, MIGRATE_ISOLATE);
18 page_zone(page)->nr_pageblock_isolate++;
19}
20
21/* called while holding zone->lock */
22static void restore_pageblock_isolate(struct page *page, int migratetype)
23{
24 struct zone *zone = page_zone(page);
25 if (WARN_ON(get_pageblock_migratetype(page) != MIGRATE_ISOLATE))
26 return;
27
28 BUG_ON(zone->nr_pageblock_isolate <= 0);
29 set_pageblock_migratetype(page, migratetype);
30 zone->nr_pageblock_isolate--;
31}
32
33int set_migratetype_isolate(struct page *page, bool skip_hwpoisoned_pages) 11int set_migratetype_isolate(struct page *page, bool skip_hwpoisoned_pages)
34{ 12{
35 struct zone *zone; 13 struct zone *zone;
@@ -80,7 +58,7 @@ out:
80 unsigned long nr_pages; 58 unsigned long nr_pages;
81 int migratetype = get_pageblock_migratetype(page); 59 int migratetype = get_pageblock_migratetype(page);
82 60
83 set_pageblock_isolate(page); 61 set_pageblock_migratetype(page, MIGRATE_ISOLATE);
84 nr_pages = move_freepages_block(zone, page, MIGRATE_ISOLATE); 62 nr_pages = move_freepages_block(zone, page, MIGRATE_ISOLATE);
85 63
86 __mod_zone_freepage_state(zone, -nr_pages, migratetype); 64 __mod_zone_freepage_state(zone, -nr_pages, migratetype);
@@ -103,7 +81,7 @@ void unset_migratetype_isolate(struct page *page, unsigned migratetype)
103 goto out; 81 goto out;
104 nr_pages = move_freepages_block(zone, page, migratetype); 82 nr_pages = move_freepages_block(zone, page, migratetype);
105 __mod_zone_freepage_state(zone, nr_pages, migratetype); 83 __mod_zone_freepage_state(zone, nr_pages, migratetype);
106 restore_pageblock_isolate(page, migratetype); 84 set_pageblock_migratetype(page, migratetype);
107out: 85out:
108 spin_unlock_irqrestore(&zone->lock, flags); 86 spin_unlock_irqrestore(&zone->lock, flags);
109} 87}
diff --git a/tools/testing/selftests/ipc/Makefile b/tools/testing/selftests/ipc/Makefile
new file mode 100644
index 00000000000..5386fd7c43a
--- /dev/null
+++ b/tools/testing/selftests/ipc/Makefile
@@ -0,0 +1,25 @@
1uname_M := $(shell uname -m 2>/dev/null || echo not)
2ARCH ?= $(shell echo $(uname_M) | sed -e s/i.86/i386/)
3ifeq ($(ARCH),i386)
4 ARCH := X86
5 CFLAGS := -DCONFIG_X86_32 -D__i386__
6endif
7ifeq ($(ARCH),x86_64)
8 ARCH := X86
9 CFLAGS := -DCONFIG_X86_64 -D__x86_64__
10endif
11
12CFLAGS += -I../../../../usr/include/
13
14all:
15ifeq ($(ARCH),X86)
16 gcc $(CFLAGS) msgque.c -o msgque_test
17else
18 echo "Not an x86 target, can't build msgque selftest"
19endif
20
21run_tests: all
22 ./msgque_test
23
24clean:
25 rm -fr ./msgque_test
diff --git a/tools/testing/selftests/ipc/msgque.c b/tools/testing/selftests/ipc/msgque.c
new file mode 100644
index 00000000000..d66418237d2
--- /dev/null
+++ b/tools/testing/selftests/ipc/msgque.c
@@ -0,0 +1,246 @@
1#include <stdlib.h>
2#include <stdio.h>
3#include <string.h>
4#include <errno.h>
5#include <linux/msg.h>
6#include <fcntl.h>
7
8#define MAX_MSG_SIZE 32
9
10struct msg1 {
11 int msize;
12 long mtype;
13 char mtext[MAX_MSG_SIZE];
14};
15
16#define TEST_STRING "Test sysv5 msg"
17#define MSG_TYPE 1
18
19#define ANOTHER_TEST_STRING "Yet another test sysv5 msg"
20#define ANOTHER_MSG_TYPE 26538
21
22struct msgque_data {
23 key_t key;
24 int msq_id;
25 int qbytes;
26 int qnum;
27 int mode;
28 struct msg1 *messages;
29};
30
31int restore_queue(struct msgque_data *msgque)
32{
33 int fd, ret, id, i;
34 char buf[32];
35
36 fd = open("/proc/sys/kernel/msg_next_id", O_WRONLY);
37 if (fd == -1) {
38 printf("Failed to open /proc/sys/kernel/msg_next_id\n");
39 return -errno;
40 }
41 sprintf(buf, "%d", msgque->msq_id);
42
43 ret = write(fd, buf, strlen(buf));
44 if (ret != strlen(buf)) {
45 printf("Failed to write to /proc/sys/kernel/msg_next_id\n");
46 return -errno;
47 }
48
49 id = msgget(msgque->key, msgque->mode | IPC_CREAT | IPC_EXCL);
50 if (id == -1) {
51 printf("Failed to create queue\n");
52 return -errno;
53 }
54
55 if (id != msgque->msq_id) {
56 printf("Restored queue has wrong id (%d instead of %d)\n",
57 id, msgque->msq_id);
58 ret = -EFAULT;
59 goto destroy;
60 }
61
62 for (i = 0; i < msgque->qnum; i++) {
63 if (msgsnd(msgque->msq_id, &msgque->messages[i].mtype,
64 msgque->messages[i].msize, IPC_NOWAIT) != 0) {
65 printf("msgsnd failed (%m)\n");
66 ret = -errno;
67 goto destroy;
68 };
69 }
70 return 0;
71
72destroy:
73 if (msgctl(id, IPC_RMID, 0))
74 printf("Failed to destroy queue: %d\n", -errno);
75 return ret;
76}
77
78int check_and_destroy_queue(struct msgque_data *msgque)
79{
80 struct msg1 message;
81 int cnt = 0, ret;
82
83 while (1) {
84 ret = msgrcv(msgque->msq_id, &message.mtype, MAX_MSG_SIZE,
85 0, IPC_NOWAIT);
86 if (ret < 0) {
87 if (errno == ENOMSG)
88 break;
89 printf("Failed to read IPC message: %m\n");
90 ret = -errno;
91 goto err;
92 }
93 if (ret != msgque->messages[cnt].msize) {
94 printf("Wrong message size: %d (expected %d)\n", ret,
95 msgque->messages[cnt].msize);
96 ret = -EINVAL;
97 goto err;
98 }
99 if (message.mtype != msgque->messages[cnt].mtype) {
100 printf("Wrong message type\n");
101 ret = -EINVAL;
102 goto err;
103 }
104 if (memcmp(message.mtext, msgque->messages[cnt].mtext, ret)) {
105 printf("Wrong message content\n");
106 ret = -EINVAL;
107 goto err;
108 }
109 cnt++;
110 }
111
112 if (cnt != msgque->qnum) {
113 printf("Wrong message number\n");
114 ret = -EINVAL;
115 goto err;
116 }
117
118 ret = 0;
119err:
120 if (msgctl(msgque->msq_id, IPC_RMID, 0)) {
121 printf("Failed to destroy queue: %d\n", -errno);
122 return -errno;
123 }
124 return ret;
125}
126
127int dump_queue(struct msgque_data *msgque)
128{
129 struct msqid64_ds ds;
130 int kern_id;
131 int i, ret;
132
133 for (kern_id = 0; kern_id < 256; kern_id++) {
134 ret = msgctl(kern_id, MSG_STAT, &ds);
135 if (ret < 0) {
136 if (errno == -EINVAL)
137 continue;
138 printf("Failed to get stats for IPC queue with id %d\n",
139 kern_id);
140 return -errno;
141 }
142
143 if (ret == msgque->msq_id)
144 break;
145 }
146
147 msgque->messages = malloc(sizeof(struct msg1) * ds.msg_qnum);
148 if (msgque->messages == NULL) {
149 printf("Failed to get stats for IPC queue\n");
150 return -ENOMEM;
151 }
152
153 msgque->qnum = ds.msg_qnum;
154 msgque->mode = ds.msg_perm.mode;
155 msgque->qbytes = ds.msg_qbytes;
156
157 for (i = 0; i < msgque->qnum; i++) {
158 ret = msgrcv(msgque->msq_id, &msgque->messages[i].mtype,
159 MAX_MSG_SIZE, i, IPC_NOWAIT | MSG_COPY);
160 if (ret < 0) {
161 printf("Failed to copy IPC message: %m (%d)\n", errno);
162 return -errno;
163 }
164 msgque->messages[i].msize = ret;
165 }
166 return 0;
167}
168
169int fill_msgque(struct msgque_data *msgque)
170{
171 struct msg1 msgbuf;
172
173 msgbuf.mtype = MSG_TYPE;
174 memcpy(msgbuf.mtext, TEST_STRING, sizeof(TEST_STRING));
175 if (msgsnd(msgque->msq_id, &msgbuf.mtype, sizeof(TEST_STRING),
176 IPC_NOWAIT) != 0) {
177 printf("First message send failed (%m)\n");
178 return -errno;
179 };
180
181 msgbuf.mtype = ANOTHER_MSG_TYPE;
182 memcpy(msgbuf.mtext, ANOTHER_TEST_STRING, sizeof(ANOTHER_TEST_STRING));
183 if (msgsnd(msgque->msq_id, &msgbuf.mtype, sizeof(ANOTHER_TEST_STRING),
184 IPC_NOWAIT) != 0) {
185 printf("Second message send failed (%m)\n");
186 return -errno;
187 };
188 return 0;
189}
190
191int main(int argc, char **argv)
192{
193 int msg, pid, err;
194 struct msgque_data msgque;
195
196 msgque.key = ftok(argv[0], 822155650);
197 if (msgque.key == -1) {
198 printf("Can't make key\n");
199 return -errno;
200 }
201
202 msgque.msq_id = msgget(msgque.key, IPC_CREAT | IPC_EXCL | 0666);
203 if (msgque.msq_id == -1) {
204 printf("Can't create queue\n");
205 goto err_out;
206 }
207
208 err = fill_msgque(&msgque);
209 if (err) {
210 printf("Failed to fill queue\n");
211 goto err_destroy;
212 }
213
214 err = dump_queue(&msgque);
215 if (err) {
216 printf("Failed to dump queue\n");
217 goto err_destroy;
218 }
219
220 err = check_and_destroy_queue(&msgque);
221 if (err) {
222 printf("Failed to check and destroy queue\n");
223 goto err_out;
224 }
225
226 err = restore_queue(&msgque);
227 if (err) {
228 printf("Failed to restore queue\n");
229 goto err_destroy;
230 }
231
232 err = check_and_destroy_queue(&msgque);
233 if (err) {
234 printf("Failed to test queue\n");
235 goto err_out;
236 }
237 return 0;
238
239err_destroy:
240 if (msgctl(msgque.msq_id, IPC_RMID, 0)) {
241 printf("Failed to destroy queue: %d\n", -errno);
242 return -errno;
243 }
244err_out:
245 return err;
246}