diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-01-07 10:42:38 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-01-07 10:42:38 -0500 |
commit | d0631c6e09f51e094ae5aec1eabe81cc63d78178 (patch) | |
tree | 69d8dc6fa37d2e440f37cda06c40f1800edb8a08 | |
parent | de9ac5cea33098143edd26d10ece7fe215e66623 (diff) | |
parent | 35dac27cedd14c3b6fcd4ba7bc3c31738cfd1831 (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.txt | 32 | ||||
-rw-r--r-- | MAINTAINERS | 199 | ||||
-rw-r--r-- | drivers/rtc/Kconfig | 8 | ||||
-rw-r--r-- | drivers/rtc/Makefile | 1 | ||||
-rw-r--r-- | drivers/rtc/rtc-tegra.c | 7 | ||||
-rw-r--r-- | drivers/rtc/rtc-tps6586x.c | 356 | ||||
-rw-r--r-- | drivers/rtc/rtc-vt8500.c | 11 | ||||
-rw-r--r-- | include/asm-generic/tlb.h | 9 | ||||
-rw-r--r-- | include/linux/ipc_namespace.h | 1 | ||||
-rw-r--r-- | include/linux/mmzone.h | 8 | ||||
-rw-r--r-- | include/linux/msg.h | 6 | ||||
-rw-r--r-- | include/uapi/linux/msg.h | 1 | ||||
-rw-r--r-- | ipc/compat.c | 46 | ||||
-rw-r--r-- | ipc/ipc_sysctl.c | 32 | ||||
-rw-r--r-- | ipc/msg.c | 123 | ||||
-rw-r--r-- | ipc/msgutil.c | 43 | ||||
-rw-r--r-- | ipc/util.c | 16 | ||||
-rw-r--r-- | ipc/util.h | 2 | ||||
-rw-r--r-- | kernel/printk.c | 5 | ||||
-rw-r--r-- | mm/memory.c | 5 | ||||
-rw-r--r-- | mm/page_alloc.c | 27 | ||||
-rw-r--r-- | mm/page_isolation.c | 26 | ||||
-rw-r--r-- | tools/testing/selftests/ipc/Makefile | 25 | ||||
-rw-r--r-- | tools/testing/selftests/ipc/msgque.c | 246 |
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 | ||
326 | msg_next_id, sem_next_id, and shm_next_id: | ||
327 | |||
328 | These three toggles allows to specify desired id for next allocated IPC | ||
329 | object: message, semaphore or shared memory respectively. | ||
330 | |||
331 | By default they are equal to -1, which means generic allocation logic. | ||
332 | Possible values to set are in range {0..INT_MAX}. | ||
333 | |||
334 | Notes: | ||
335 | 1) kernel doesn't guarantee, that new object will have desired id. So, | ||
336 | it's up to userspace, how to handle an object with "wrong" id. | ||
337 | 2) Toggle with non-default value will be set back to -1 by kernel after | ||
338 | successful IPC object allocation. | ||
339 | |||
340 | ============================================================== | ||
341 | |||
323 | nmi_watchdog: | 342 | nmi_watchdog: |
324 | 343 | ||
325 | Enables/Disables the NMI watchdog on x86 systems. When the value is | 344 | Enables/Disables the NMI watchdog on x86 systems. When the value is |
@@ -542,6 +561,19 @@ are doing anyway :) | |||
542 | 561 | ||
543 | ============================================================== | 562 | ============================================================== |
544 | 563 | ||
564 | shmall: | ||
565 | |||
566 | This parameter sets the total amount of shared memory pages that | ||
567 | can be used system wide. Hence, SHMALL should always be at least | ||
568 | ceil(shmmax/PAGE_SIZE). | ||
569 | |||
570 | If you are not sure what the default PAGE_SIZE is on your Linux | ||
571 | system, you can run the following command: | ||
572 | |||
573 | # getconf PAGE_SIZE | ||
574 | |||
575 | ============================================================== | ||
576 | |||
545 | shmmax: | 577 | shmmax: |
546 | 578 | ||
547 | This value can be used to query and set the run time limit | 579 | This 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 | |||
449 | S: Maintained | 449 | S: Maintained |
450 | F: drivers/char/agp/ | 450 | F: drivers/char/agp/ |
451 | F: include/linux/agp* | 451 | F: include/linux/agp* |
452 | F: include/uapi/linux/agp* | ||
452 | 453 | ||
453 | AHA152X SCSI DRIVER | 454 | AHA152X SCSI DRIVER |
454 | M: "Juergen E. Fischer" <fischer@norbit.de> | 455 | M: "Juergen E. Fischer" <fischer@norbit.de> |
@@ -589,6 +590,7 @@ M: Jiri Kosina <jkosina@suse.cz> | |||
589 | S: Odd fixes | 590 | S: Odd fixes |
590 | F: arch/x86/kernel/apm_32.c | 591 | F: arch/x86/kernel/apm_32.c |
591 | F: include/linux/apm_bios.h | 592 | F: include/linux/apm_bios.h |
593 | F: include/uapi/linux/apm_bios.h | ||
592 | F: drivers/char/apm-emulation.c | 594 | F: drivers/char/apm-emulation.c |
593 | 595 | ||
594 | APPLE BCM5974 MULTITOUCH DRIVER | 596 | APPLE BCM5974 MULTITOUCH DRIVER |
@@ -1005,7 +1007,6 @@ F: drivers/mmc/host/msm_sdcc.c | |||
1005 | F: drivers/mmc/host/msm_sdcc.h | 1007 | F: drivers/mmc/host/msm_sdcc.h |
1006 | F: drivers/tty/serial/msm_serial.h | 1008 | F: drivers/tty/serial/msm_serial.h |
1007 | F: drivers/tty/serial/msm_serial.c | 1009 | F: drivers/tty/serial/msm_serial.c |
1008 | F: drivers/platform/msm/ | ||
1009 | F: drivers/*/pm8???-* | 1010 | F: drivers/*/pm8???-* |
1010 | F: include/linux/mfd/pm8xxx/ | 1011 | F: include/linux/mfd/pm8xxx/ |
1011 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/davidb/linux-msm.git | 1012 | T: 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> | |||
1069 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 1070 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
1070 | W: http://www.arm.linux.org.uk/ | 1071 | W: http://www.arm.linux.org.uk/ |
1071 | S: Maintained | 1072 | S: Maintained |
1072 | F: arch/arm/common/time-acorn.c | ||
1073 | F: arch/arm/include/asm/hardware/entry-macro-iomd.S | 1073 | F: arch/arm/include/asm/hardware/entry-macro-iomd.S |
1074 | F: arch/arm/include/asm/hardware/ioc.h | 1074 | F: arch/arm/include/asm/hardware/ioc.h |
1075 | F: arch/arm/include/asm/hardware/iomd.h | 1075 | F: arch/arm/include/asm/hardware/iomd.h |
@@ -1094,7 +1094,6 @@ W: http://www.fluff.org/ben/linux/ | |||
1094 | S: Maintained | 1094 | S: Maintained |
1095 | F: arch/arm/plat-samsung/ | 1095 | F: arch/arm/plat-samsung/ |
1096 | F: arch/arm/plat-s3c24xx/ | 1096 | F: arch/arm/plat-s3c24xx/ |
1097 | F: arch/arm/plat-s5p/ | ||
1098 | F: arch/arm/mach-s3c24*/ | 1097 | F: arch/arm/mach-s3c24*/ |
1099 | F: arch/arm/mach-s3c64xx/ | 1098 | F: arch/arm/mach-s3c64xx/ |
1100 | F: drivers/*/*s3c2410* | 1099 | F: drivers/*/*s3c2410* |
@@ -1125,7 +1124,6 @@ M: Sylwester Nawrocki <s.nawrocki@samsung.com> | |||
1125 | L: linux-arm-kernel@lists.infradead.org | 1124 | L: linux-arm-kernel@lists.infradead.org |
1126 | L: linux-media@vger.kernel.org | 1125 | L: linux-media@vger.kernel.org |
1127 | S: Maintained | 1126 | S: Maintained |
1128 | F: arch/arm/plat-s5p/dev-fimc* | ||
1129 | F: arch/arm/plat-samsung/include/plat/*fimc* | 1127 | F: arch/arm/plat-samsung/include/plat/*fimc* |
1130 | F: drivers/media/platform/s5p-fimc/ | 1128 | F: drivers/media/platform/s5p-fimc/ |
1131 | 1129 | ||
@@ -1136,7 +1134,7 @@ M: Jeongtae Park <jtp.park@samsung.com> | |||
1136 | L: linux-arm-kernel@lists.infradead.org | 1134 | L: linux-arm-kernel@lists.infradead.org |
1137 | L: linux-media@vger.kernel.org | 1135 | L: linux-media@vger.kernel.org |
1138 | S: Maintained | 1136 | S: Maintained |
1139 | F: arch/arm/plat-s5p/dev-mfc.c | 1137 | F: arch/arm/plat-samsung/s5p-dev-mfc.c |
1140 | F: drivers/media/platform/s5p-mfc/ | 1138 | F: drivers/media/platform/s5p-mfc/ |
1141 | 1139 | ||
1142 | ARM/SAMSUNG S5P SERIES TV SUBSYSTEM SUPPORT | 1140 | ARM/SAMSUNG S5P SERIES TV SUBSYSTEM SUPPORT |
@@ -1254,7 +1252,7 @@ F: drivers/video/vt8500lcdfb.* | |||
1254 | F: drivers/video/wm8505fb* | 1252 | F: drivers/video/wm8505fb* |
1255 | F: drivers/video/wmt_ge_rops.* | 1253 | F: drivers/video/wmt_ge_rops.* |
1256 | F: drivers/tty/serial/vt8500_serial.c | 1254 | F: drivers/tty/serial/vt8500_serial.c |
1257 | F: drivers/rtc/rtc-vt8500-c | 1255 | F: drivers/rtc/rtc-vt8500.c |
1258 | F: drivers/mmc/host/wmt-sdmmc.c | 1256 | F: drivers/mmc/host/wmt-sdmmc.c |
1259 | 1257 | ||
1260 | ARM/ZIPIT Z2 SUPPORT | 1258 | ARM/ZIPIT Z2 SUPPORT |
@@ -1388,6 +1386,7 @@ W: http://linux-atm.sourceforge.net | |||
1388 | S: Maintained | 1386 | S: Maintained |
1389 | F: drivers/atm/ | 1387 | F: drivers/atm/ |
1390 | F: include/linux/atm* | 1388 | F: include/linux/atm* |
1389 | F: include/uapi/linux/atm* | ||
1391 | 1390 | ||
1392 | ATMEL AT91 / AT32 MCI DRIVER | 1391 | ATMEL AT91 / AT32 MCI DRIVER |
1393 | M: Ludovic Desroches <ludovic.desroches@atmel.com> | 1392 | M: Ludovic Desroches <ludovic.desroches@atmel.com> |
@@ -1406,13 +1405,13 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | |||
1406 | S: Supported | 1405 | S: Supported |
1407 | F: drivers/dma/at_hdmac.c | 1406 | F: drivers/dma/at_hdmac.c |
1408 | F: drivers/dma/at_hdmac_regs.h | 1407 | F: drivers/dma/at_hdmac_regs.h |
1409 | F: arch/arm/mach-at91/include/mach/at_hdmac.h | 1408 | F: include/linux/platform_data/dma-atmel.h |
1410 | 1409 | ||
1411 | ATMEL ISI DRIVER | 1410 | ATMEL ISI DRIVER |
1412 | M: Josh Wu <josh.wu@atmel.com> | 1411 | M: Josh Wu <josh.wu@atmel.com> |
1413 | L: linux-media@vger.kernel.org | 1412 | L: linux-media@vger.kernel.org |
1414 | S: Supported | 1413 | S: Supported |
1415 | F: drivers/media/platform/atmel-isi.c | 1414 | F: drivers/media/platform/soc_camera/atmel-isi.c |
1416 | F: include/media/atmel-isi.h | 1415 | F: include/media/atmel-isi.h |
1417 | 1416 | ||
1418 | ATMEL LCDFB DRIVER | 1417 | ATMEL LCDFB DRIVER |
@@ -1467,6 +1466,7 @@ W: http://people.redhat.com/sgrubb/audit/ | |||
1467 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current.git | 1466 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current.git |
1468 | S: Maintained | 1467 | S: Maintained |
1469 | F: include/linux/audit.h | 1468 | F: include/linux/audit.h |
1469 | F: include/uapi/linux/audit.h | ||
1470 | F: kernel/audit* | 1470 | F: kernel/audit* |
1471 | 1471 | ||
1472 | AUXILIARY DISPLAY DRIVERS | 1472 | AUXILIARY DISPLAY DRIVERS |
@@ -1497,7 +1497,7 @@ M: Ralf Baechle <ralf@linux-mips.org> | |||
1497 | L: linux-hams@vger.kernel.org | 1497 | L: linux-hams@vger.kernel.org |
1498 | W: http://www.linux-ax25.org/ | 1498 | W: http://www.linux-ax25.org/ |
1499 | S: Maintained | 1499 | S: Maintained |
1500 | F: include/linux/ax25.h | 1500 | F: include/uapi/linux/ax25.h |
1501 | F: include/net/ax25.h | 1501 | F: include/net/ax25.h |
1502 | F: net/ax25/ | 1502 | F: net/ax25/ |
1503 | 1503 | ||
@@ -1558,7 +1558,7 @@ M: "Tigran A. Aivazian" <tigran@aivazian.fsnet.co.uk> | |||
1558 | S: Maintained | 1558 | S: Maintained |
1559 | F: Documentation/filesystems/bfs.txt | 1559 | F: Documentation/filesystems/bfs.txt |
1560 | F: fs/bfs/ | 1560 | F: fs/bfs/ |
1561 | F: include/linux/bfs_fs.h | 1561 | F: include/uapi/linux/bfs_fs.h |
1562 | 1562 | ||
1563 | BLACKFIN ARCHITECTURE | 1563 | BLACKFIN ARCHITECTURE |
1564 | M: Mike Frysinger <vapier@gentoo.org> | 1564 | M: Mike Frysinger <vapier@gentoo.org> |
@@ -1655,7 +1655,7 @@ L: netdev@vger.kernel.org | |||
1655 | W: http://sourceforge.net/projects/bonding/ | 1655 | W: http://sourceforge.net/projects/bonding/ |
1656 | S: Supported | 1656 | S: Supported |
1657 | F: drivers/net/bonding/ | 1657 | F: drivers/net/bonding/ |
1658 | F: include/linux/if_bonding.h | 1658 | F: include/uapi/linux/if_bonding.h |
1659 | 1659 | ||
1660 | BROADCOM B44 10/100 ETHERNET DRIVER | 1660 | BROADCOM B44 10/100 ETHERNET DRIVER |
1661 | M: Gary Zambrano <zambrano@broadcom.com> | 1661 | M: Gary Zambrano <zambrano@broadcom.com> |
@@ -1734,6 +1734,7 @@ L: linux-scsi@vger.kernel.org | |||
1734 | S: Supported | 1734 | S: Supported |
1735 | F: block/bsg.c | 1735 | F: block/bsg.c |
1736 | F: include/linux/bsg.h | 1736 | F: include/linux/bsg.h |
1737 | F: include/uapi/linux/bsg.h | ||
1737 | 1738 | ||
1738 | BT87X AUDIO DRIVER | 1739 | BT87X AUDIO DRIVER |
1739 | M: Clemens Ladisch <clemens@ladisch.de> | 1740 | M: Clemens Ladisch <clemens@ladisch.de> |
@@ -1804,7 +1805,7 @@ L: netdev@vger.kernel.org | |||
1804 | S: Supported | 1805 | S: Supported |
1805 | F: Documentation/networking/caif/ | 1806 | F: Documentation/networking/caif/ |
1806 | F: drivers/net/caif/ | 1807 | F: drivers/net/caif/ |
1807 | F: include/linux/caif/ | 1808 | F: include/uapi/linux/caif/ |
1808 | F: include/net/caif/ | 1809 | F: include/net/caif/ |
1809 | F: net/caif/ | 1810 | F: net/caif/ |
1810 | 1811 | ||
@@ -1825,11 +1826,11 @@ W: http://gitorious.org/linux-can | |||
1825 | T: git git://gitorious.org/linux-can/linux-can-next.git | 1826 | T: git git://gitorious.org/linux-can/linux-can-next.git |
1826 | S: Maintained | 1827 | S: Maintained |
1827 | F: net/can/ | 1828 | F: net/can/ |
1828 | F: include/linux/can.h | ||
1829 | F: include/linux/can/core.h | 1829 | F: include/linux/can/core.h |
1830 | F: include/linux/can/bcm.h | 1830 | F: include/uapi/linux/can.h |
1831 | F: include/linux/can/raw.h | 1831 | F: include/uapi/linux/can/bcm.h |
1832 | F: include/linux/can/gw.h | 1832 | F: include/uapi/linux/can/raw.h |
1833 | F: include/uapi/linux/can/gw.h | ||
1833 | 1834 | ||
1834 | CAN NETWORK DRIVERS | 1835 | CAN NETWORK DRIVERS |
1835 | M: Wolfgang Grandegger <wg@grandegger.com> | 1836 | M: Wolfgang Grandegger <wg@grandegger.com> |
@@ -1840,15 +1841,16 @@ T: git git://gitorious.org/linux-can/linux-can-next.git | |||
1840 | S: Maintained | 1841 | S: Maintained |
1841 | F: drivers/net/can/ | 1842 | F: drivers/net/can/ |
1842 | F: include/linux/can/dev.h | 1843 | F: include/linux/can/dev.h |
1843 | F: include/linux/can/error.h | ||
1844 | F: include/linux/can/netlink.h | ||
1845 | F: include/linux/can/platform/ | 1844 | F: include/linux/can/platform/ |
1845 | F: include/uapi/linux/can/error.h | ||
1846 | F: include/uapi/linux/can/netlink.h | ||
1846 | 1847 | ||
1847 | CAPABILITIES | 1848 | CAPABILITIES |
1848 | M: Serge Hallyn <serge.hallyn@canonical.com> | 1849 | M: Serge Hallyn <serge.hallyn@canonical.com> |
1849 | L: linux-security-module@vger.kernel.org | 1850 | L: linux-security-module@vger.kernel.org |
1850 | S: Supported | 1851 | S: Supported |
1851 | F: include/linux/capability.h | 1852 | F: include/linux/capability.h |
1853 | F: include/uapi/linux/capability.h | ||
1852 | F: security/capability.c | 1854 | F: security/capability.c |
1853 | F: security/commoncap.c | 1855 | F: security/commoncap.c |
1854 | F: kernel/capability.c | 1856 | F: kernel/capability.c |
@@ -1861,6 +1863,7 @@ W: http://www.ibm.com/developerworks/power/cell/ | |||
1861 | S: Supported | 1863 | S: Supported |
1862 | F: arch/powerpc/include/asm/cell*.h | 1864 | F: arch/powerpc/include/asm/cell*.h |
1863 | F: arch/powerpc/include/asm/spu*.h | 1865 | F: arch/powerpc/include/asm/spu*.h |
1866 | F: arch/powerpc/include/uapi/asm/spu*.h | ||
1864 | F: arch/powerpc/oprofile/*cell* | 1867 | F: arch/powerpc/oprofile/*cell* |
1865 | F: arch/powerpc/platforms/cell/ | 1868 | F: arch/powerpc/platforms/cell/ |
1866 | 1869 | ||
@@ -1909,7 +1912,7 @@ W: http://wireless.kernel.org/ | |||
1909 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git | 1912 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git |
1910 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git | 1913 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git |
1911 | S: Maintained | 1914 | S: Maintained |
1912 | F: include/linux/nl80211.h | 1915 | F: include/uapi/linux/nl80211.h |
1913 | F: include/net/cfg80211.h | 1916 | F: include/net/cfg80211.h |
1914 | F: net/wireless/* | 1917 | F: net/wireless/* |
1915 | X: net/wireless/wext* | 1918 | X: net/wireless/wext* |
@@ -2012,6 +2015,7 @@ S: Maintained | |||
2012 | F: Documentation/filesystems/coda.txt | 2015 | F: Documentation/filesystems/coda.txt |
2013 | F: fs/coda/ | 2016 | F: fs/coda/ |
2014 | F: include/linux/coda*.h | 2017 | F: include/linux/coda*.h |
2018 | F: include/uapi/linux/coda*.h | ||
2015 | 2019 | ||
2016 | COMMON CLK FRAMEWORK | 2020 | COMMON CLK FRAMEWORK |
2017 | M: Mike Turquette <mturquette@linaro.org> | 2021 | M: Mike Turquette <mturquette@linaro.org> |
@@ -2266,6 +2270,7 @@ W: http://www.cyclades.com/ | |||
2266 | S: Orphan | 2270 | S: Orphan |
2267 | F: drivers/tty/cyclades.c | 2271 | F: drivers/tty/cyclades.c |
2268 | F: include/linux/cyclades.h | 2272 | F: include/linux/cyclades.h |
2273 | F: include/uapi/linux/cyclades.h | ||
2269 | 2274 | ||
2270 | CYCLADES PC300 DRIVER | 2275 | CYCLADES PC300 DRIVER |
2271 | W: http://www.cyclades.com/ | 2276 | W: http://www.cyclades.com/ |
@@ -2323,6 +2328,7 @@ L: dccp@vger.kernel.org | |||
2323 | W: http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp | 2328 | W: http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp |
2324 | S: Maintained | 2329 | S: Maintained |
2325 | F: include/linux/dccp.h | 2330 | F: include/linux/dccp.h |
2331 | F: include/uapi/linux/dccp.h | ||
2326 | F: include/linux/tfrc.h | 2332 | F: include/linux/tfrc.h |
2327 | F: net/dccp/ | 2333 | F: net/dccp/ |
2328 | 2334 | ||
@@ -2349,7 +2355,7 @@ M: Massimo Dal Zotto <dz@debian.org> | |||
2349 | W: http://www.debian.org/~dz/i8k/ | 2355 | W: http://www.debian.org/~dz/i8k/ |
2350 | S: Maintained | 2356 | S: Maintained |
2351 | F: drivers/char/i8k.c | 2357 | F: drivers/char/i8k.c |
2352 | F: include/linux/i8k.h | 2358 | F: include/uapi/linux/i8k.h |
2353 | 2359 | ||
2354 | DELL SYSTEMS MANAGEMENT BASE DRIVER (dcdbas) | 2360 | DELL SYSTEMS MANAGEMENT BASE DRIVER (dcdbas) |
2355 | M: Doug Warzecha <Douglas_Warzecha@dell.com> | 2361 | M: Doug Warzecha <Douglas_Warzecha@dell.com> |
@@ -2422,6 +2428,7 @@ S: Maintained | |||
2422 | F: Documentation/filesystems/quota.txt | 2428 | F: Documentation/filesystems/quota.txt |
2423 | F: fs/quota/ | 2429 | F: fs/quota/ |
2424 | F: include/linux/quota*.h | 2430 | F: include/linux/quota*.h |
2431 | F: include/uapi/linux/quota*.h | ||
2425 | 2432 | ||
2426 | DISPLAYLINK USB 2.0 FRAMEBUFFER DRIVER (UDLFB) | 2433 | DISPLAYLINK USB 2.0 FRAMEBUFFER DRIVER (UDLFB) |
2427 | M: Bernie Thompson <bernie@plugable.com> | 2434 | M: 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 | |||
2528 | S: Maintained | 2535 | S: Maintained |
2529 | F: drivers/gpu/drm/ | 2536 | F: drivers/gpu/drm/ |
2530 | F: include/drm/ | 2537 | F: include/drm/ |
2538 | F: include/uapi/drm/ | ||
2531 | 2539 | ||
2532 | INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets) | 2540 | INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets) |
2533 | M: Daniel Vetter <daniel.vetter@ffwll.ch> | 2541 | M: Daniel Vetter <daniel.vetter@ffwll.ch> |
@@ -2537,6 +2545,7 @@ T: git git://people.freedesktop.org/~danvet/drm-intel | |||
2537 | S: Supported | 2545 | S: Supported |
2538 | F: drivers/gpu/drm/i915 | 2546 | F: drivers/gpu/drm/i915 |
2539 | F: include/drm/i915* | 2547 | F: include/drm/i915* |
2548 | F: include/uapi/drm/i915* | ||
2540 | 2549 | ||
2541 | DRM DRIVERS FOR EXYNOS | 2550 | DRM DRIVERS FOR EXYNOS |
2542 | M: Inki Dae <inki.dae@samsung.com> | 2551 | M: 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 | |||
2548 | S: Supported | 2557 | S: Supported |
2549 | F: drivers/gpu/drm/exynos | 2558 | F: drivers/gpu/drm/exynos |
2550 | F: include/drm/exynos* | 2559 | F: include/drm/exynos* |
2560 | F: include/uapi/drm/exynos* | ||
2551 | 2561 | ||
2552 | DRM DRIVERS FOR NVIDIA TEGRA | 2562 | DRM DRIVERS FOR NVIDIA TEGRA |
2553 | M: Thierry Reding <thierry.reding@avionic-design.de> | 2563 | M: Thierry Reding <thierry.reding@avionic-design.de> |
@@ -2622,7 +2632,7 @@ W: http://github.com/mkrufky | |||
2622 | Q: http://patchwork.linuxtv.org/project/linux-media/list/ | 2632 | Q: http://patchwork.linuxtv.org/project/linux-media/list/ |
2623 | T: git git://linuxtv.org/media_tree.git | 2633 | T: git git://linuxtv.org/media_tree.git |
2624 | S: Maintained | 2634 | S: Maintained |
2625 | F: drivers/media/usb/dvb-usb-v2/cxusb* | 2635 | F: drivers/media/usb/dvb-usb/cxusb* |
2626 | 2636 | ||
2627 | DVB_USB_CYPRESS_FIRMWARE MEDIA DRIVER | 2637 | DVB_USB_CYPRESS_FIRMWARE MEDIA DRIVER |
2628 | M: Antti Palosaari <crope@iki.fi> | 2638 | M: Antti Palosaari <crope@iki.fi> |
@@ -2722,6 +2732,7 @@ L: netfilter-devel@vger.kernel.org | |||
2722 | W: http://ebtables.sourceforge.net/ | 2732 | W: http://ebtables.sourceforge.net/ |
2723 | S: Maintained | 2733 | S: Maintained |
2724 | F: include/linux/netfilter_bridge/ebt_*.h | 2734 | F: include/linux/netfilter_bridge/ebt_*.h |
2735 | F: include/uapi/linux/netfilter_bridge/ebt_*.h | ||
2725 | F: net/bridge/netfilter/ebt*.c | 2736 | F: net/bridge/netfilter/ebt*.c |
2726 | 2737 | ||
2727 | EC100 MEDIA DRIVER | 2738 | EC100 MEDIA DRIVER |
@@ -2933,12 +2944,6 @@ M: Maxim Levitsky <maximlevitsky@gmail.com> | |||
2933 | S: Maintained | 2944 | S: Maintained |
2934 | F: drivers/media/rc/ene_ir.* | 2945 | F: drivers/media/rc/ene_ir.* |
2935 | 2946 | ||
2936 | EPSON 1355 FRAMEBUFFER DRIVER | ||
2937 | M: Christopher Hoover <ch@murgatroid.com> | ||
2938 | M: Christopher Hoover <ch@hpl.hp.com> | ||
2939 | S: Maintained | ||
2940 | F: drivers/video/epson1355fb.c | ||
2941 | |||
2942 | EPSON S1D13XXX FRAMEBUFFER DRIVER | 2947 | EPSON S1D13XXX FRAMEBUFFER DRIVER |
2943 | M: Kristoffer Ericson <kristoffer.ericson@gmail.com> | 2948 | M: Kristoffer Ericson <kristoffer.ericson@gmail.com> |
2944 | S: Maintained | 2949 | S: Maintained |
@@ -3051,6 +3056,7 @@ M: Eric Paris <eparis@redhat.com> | |||
3051 | S: Maintained | 3056 | S: Maintained |
3052 | F: fs/notify/fanotify/ | 3057 | F: fs/notify/fanotify/ |
3053 | F: include/linux/fanotify.h | 3058 | F: include/linux/fanotify.h |
3059 | F: include/uapi/linux/fanotify.h | ||
3054 | 3060 | ||
3055 | FARSYNC SYNCHRONOUS DRIVER | 3061 | FARSYNC SYNCHRONOUS DRIVER |
3056 | M: Kevin Curtis <kevin.curtis@farsite.co.uk> | 3062 | M: Kevin Curtis <kevin.curtis@farsite.co.uk> |
@@ -3074,6 +3080,7 @@ F: drivers/scsi/fcoe/ | |||
3074 | F: include/scsi/fc/ | 3080 | F: include/scsi/fc/ |
3075 | F: include/scsi/libfc.h | 3081 | F: include/scsi/libfc.h |
3076 | F: include/scsi/libfcoe.h | 3082 | F: include/scsi/libfcoe.h |
3083 | F: include/uapi/scsi/fc/ | ||
3077 | 3084 | ||
3078 | FILE LOCKING (flock() and fcntl()/lockf()) | 3085 | FILE LOCKING (flock() and fcntl()/lockf()) |
3079 | M: Matthew Wilcox <matthew@wil.cx> | 3086 | M: Matthew Wilcox <matthew@wil.cx> |
@@ -3081,6 +3088,8 @@ L: linux-fsdevel@vger.kernel.org | |||
3081 | S: Maintained | 3088 | S: Maintained |
3082 | F: include/linux/fcntl.h | 3089 | F: include/linux/fcntl.h |
3083 | F: include/linux/fs.h | 3090 | F: include/linux/fs.h |
3091 | F: include/uapi/linux/fcntl.h | ||
3092 | F: include/uapi/linux/fs.h | ||
3084 | F: fs/fcntl.c | 3093 | F: fs/fcntl.c |
3085 | F: fs/locks.c | 3094 | F: fs/locks.c |
3086 | 3095 | ||
@@ -3170,6 +3179,8 @@ F: Documentation/devicetree/bindings/fb/ | |||
3170 | F: drivers/video/ | 3179 | F: drivers/video/ |
3171 | F: include/video/ | 3180 | F: include/video/ |
3172 | F: include/linux/fb.h | 3181 | F: include/linux/fb.h |
3182 | F: include/uapi/video/ | ||
3183 | F: include/uapi/linux/fb.h | ||
3173 | 3184 | ||
3174 | FREESCALE DIU FRAMEBUFFER DRIVER | 3185 | FREESCALE DIU FRAMEBUFFER DRIVER |
3175 | M: Timur Tabi <timur@freescale.com> | 3186 | M: Timur Tabi <timur@freescale.com> |
@@ -3196,7 +3207,7 @@ M: Sascha Hauer <kernel@pengutronix.de> | |||
3196 | L: linux-fbdev@vger.kernel.org | 3207 | L: linux-fbdev@vger.kernel.org |
3197 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 3208 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
3198 | S: Maintained | 3209 | S: Maintained |
3199 | F: arch/arm/plat-mxc/include/mach/imxfb.h | 3210 | F: include/linux/platform_data/video-imxfb.h |
3200 | F: drivers/video/imxfb.c | 3211 | F: drivers/video/imxfb.c |
3201 | 3212 | ||
3202 | FREESCALE SOC FS_ENET DRIVER | 3213 | FREESCALE SOC FS_ENET DRIVER |
@@ -3314,7 +3325,7 @@ L: fuse-devel@lists.sourceforge.net | |||
3314 | W: http://fuse.sourceforge.net/ | 3325 | W: http://fuse.sourceforge.net/ |
3315 | S: Maintained | 3326 | S: Maintained |
3316 | F: fs/fuse/ | 3327 | F: fs/fuse/ |
3317 | F: include/linux/fuse.h | 3328 | F: include/uapi/linux/fuse.h |
3318 | 3329 | ||
3319 | FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit) | 3330 | FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit) |
3320 | M: Rik Faith <faith@cs.unc.edu> | 3331 | M: Rik Faith <faith@cs.unc.edu> |
@@ -3361,6 +3372,7 @@ L: linux-arch@vger.kernel.org | |||
3361 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic.git | 3372 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic.git |
3362 | S: Maintained | 3373 | S: Maintained |
3363 | F: include/asm-generic | 3374 | F: include/asm-generic |
3375 | F: include/uapi/asm-generic | ||
3364 | 3376 | ||
3365 | GENERIC UIO DRIVER FOR PCI DEVICES | 3377 | GENERIC UIO DRIVER FOR PCI DEVICES |
3366 | M: "Michael S. Tsirkin" <mst@redhat.com> | 3378 | M: "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 | |||
3377 | S: Supported | 3389 | S: Supported |
3378 | F: Documentation/filesystems/gfs2*.txt | 3390 | F: Documentation/filesystems/gfs2*.txt |
3379 | F: fs/gfs2/ | 3391 | F: fs/gfs2/ |
3380 | F: include/linux/gfs2_ondisk.h | 3392 | F: include/uapi/linux/gfs2_ondisk.h |
3381 | 3393 | ||
3382 | GIGASET ISDN DRIVERS | 3394 | GIGASET ISDN DRIVERS |
3383 | M: Hansjoerg Lipp <hjlipp@web.de> | 3395 | M: Hansjoerg Lipp <hjlipp@web.de> |
@@ -3387,7 +3399,7 @@ W: http://gigaset307x.sourceforge.net/ | |||
3387 | S: Maintained | 3399 | S: Maintained |
3388 | F: Documentation/isdn/README.gigaset | 3400 | F: Documentation/isdn/README.gigaset |
3389 | F: drivers/isdn/gigaset/ | 3401 | F: drivers/isdn/gigaset/ |
3390 | F: include/linux/gigaset_dev.h | 3402 | F: include/uapi/linux/gigaset_dev.h |
3391 | 3403 | ||
3392 | GPIO SUBSYSTEM | 3404 | GPIO SUBSYSTEM |
3393 | M: Grant Likely <grant.likely@secretlab.ca> | 3405 | M: Grant Likely <grant.likely@secretlab.ca> |
@@ -3544,6 +3556,7 @@ S: Supported | |||
3544 | F: Documentation/scsi/hpsa.txt | 3556 | F: Documentation/scsi/hpsa.txt |
3545 | F: drivers/scsi/hpsa*.[ch] | 3557 | F: drivers/scsi/hpsa*.[ch] |
3546 | F: include/linux/cciss*.h | 3558 | F: include/linux/cciss*.h |
3559 | F: include/uapi/linux/cciss*.h | ||
3547 | 3560 | ||
3548 | HEWLETT-PACKARD SMART CISS RAID DRIVER (cciss) | 3561 | HEWLETT-PACKARD SMART CISS RAID DRIVER (cciss) |
3549 | M: Mike Miller <mike.miller@hp.com> | 3562 | M: Mike Miller <mike.miller@hp.com> |
@@ -3552,6 +3565,7 @@ S: Supported | |||
3552 | F: Documentation/blockdev/cciss.txt | 3565 | F: Documentation/blockdev/cciss.txt |
3553 | F: drivers/block/cciss* | 3566 | F: drivers/block/cciss* |
3554 | F: include/linux/cciss_ioctl.h | 3567 | F: include/linux/cciss_ioctl.h |
3568 | F: include/uapi/linux/cciss_ioctl.h | ||
3555 | 3569 | ||
3556 | HFS FILESYSTEM | 3570 | HFS FILESYSTEM |
3557 | L: linux-fsdevel@vger.kernel.org | 3571 | L: linux-fsdevel@vger.kernel.org |
@@ -3586,6 +3600,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git | |||
3586 | S: Maintained | 3600 | S: Maintained |
3587 | F: drivers/hid/ | 3601 | F: drivers/hid/ |
3588 | F: include/linux/hid* | 3602 | F: include/linux/hid* |
3603 | F: include/uapi/linux/hid* | ||
3589 | 3604 | ||
3590 | HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS | 3605 | HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS |
3591 | M: Thomas Gleixner <tglx@linutronix.de> | 3606 | M: Thomas Gleixner <tglx@linutronix.de> |
@@ -3617,7 +3632,7 @@ M: Jes Sorensen <jes@trained-monkey.org> | |||
3617 | L: linux-hippi@sunsite.dk | 3632 | L: linux-hippi@sunsite.dk |
3618 | S: Maintained | 3633 | S: Maintained |
3619 | F: include/linux/hippidevice.h | 3634 | F: include/linux/hippidevice.h |
3620 | F: include/linux/if_hippi.h | 3635 | F: include/uapi/linux/if_hippi.h |
3621 | F: net/802/hippi.c | 3636 | F: net/802/hippi.c |
3622 | F: drivers/net/hippi/ | 3637 | F: drivers/net/hippi/ |
3623 | 3638 | ||
@@ -3645,6 +3660,7 @@ S: Maintained | |||
3645 | F: Documentation/timers/hpet.txt | 3660 | F: Documentation/timers/hpet.txt |
3646 | F: drivers/char/hpet.c | 3661 | F: drivers/char/hpet.c |
3647 | F: include/linux/hpet.h | 3662 | F: include/linux/hpet.h |
3663 | F: include/uapi/linux/hpet.h | ||
3648 | 3664 | ||
3649 | HPET: x86 | 3665 | HPET: x86 |
3650 | M: "Venkatesh Pallipadi (Venki)" <venki@google.com> | 3666 | M: "Venkatesh Pallipadi (Venki)" <venki@google.com> |
@@ -3745,6 +3761,8 @@ F: Documentation/i2c/ | |||
3745 | F: drivers/i2c/ | 3761 | F: drivers/i2c/ |
3746 | F: include/linux/i2c.h | 3762 | F: include/linux/i2c.h |
3747 | F: include/linux/i2c-*.h | 3763 | F: include/linux/i2c-*.h |
3764 | F: include/uapi/linux/i2c.h | ||
3765 | F: include/uapi/linux/i2c-*.h | ||
3748 | 3766 | ||
3749 | I2C-TAOS-EVM DRIVER | 3767 | I2C-TAOS-EVM DRIVER |
3750 | M: Jean Delvare <khali@linux-fr.org> | 3768 | M: Jean Delvare <khali@linux-fr.org> |
@@ -3860,7 +3878,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/lowpan/lowpan.git | |||
3860 | S: Maintained | 3878 | S: Maintained |
3861 | F: net/ieee802154/ | 3879 | F: net/ieee802154/ |
3862 | F: net/mac802154/ | 3880 | F: net/mac802154/ |
3863 | F: drivers/ieee802154/ | 3881 | F: drivers/net/ieee802154/ |
3864 | 3882 | ||
3865 | IGUANAWORKS USB IR TRANSCEIVER | 3883 | IGUANAWORKS USB IR TRANSCEIVER |
3866 | M: Sean Young <sean@mess.org> | 3884 | M: Sean Young <sean@mess.org> |
@@ -3911,7 +3929,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git | |||
3911 | S: Supported | 3929 | S: Supported |
3912 | F: Documentation/infiniband/ | 3930 | F: Documentation/infiniband/ |
3913 | F: drivers/infiniband/ | 3931 | F: drivers/infiniband/ |
3914 | F: include/linux/if_infiniband.h | 3932 | F: include/uapi/linux/if_infiniband.h |
3915 | 3933 | ||
3916 | INOTIFY | 3934 | INOTIFY |
3917 | M: John McCutchan <john@johnmccutchan.com> | 3935 | M: John McCutchan <john@johnmccutchan.com> |
@@ -3921,6 +3939,7 @@ S: Maintained | |||
3921 | F: Documentation/filesystems/inotify.txt | 3939 | F: Documentation/filesystems/inotify.txt |
3922 | F: fs/notify/inotify/ | 3940 | F: fs/notify/inotify/ |
3923 | F: include/linux/inotify.h | 3941 | F: include/linux/inotify.h |
3942 | F: include/uapi/linux/inotify.h | ||
3924 | 3943 | ||
3925 | INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN) DRIVERS | 3944 | INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN) DRIVERS |
3926 | M: Dmitry Torokhov <dmitry.torokhov@gmail.com> | 3945 | M: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
@@ -3931,6 +3950,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git | |||
3931 | S: Maintained | 3950 | S: Maintained |
3932 | F: drivers/input/ | 3951 | F: drivers/input/ |
3933 | F: include/linux/input.h | 3952 | F: include/linux/input.h |
3953 | F: include/uapi/linux/input.h | ||
3934 | F: include/linux/input/ | 3954 | F: include/linux/input/ |
3935 | 3955 | ||
3936 | INPUT MULTITOUCH (MT) PROTOCOL | 3956 | INPUT MULTITOUCH (MT) PROTOCOL |
@@ -3951,7 +3971,6 @@ L: linux-scsi@vger.kernel.org | |||
3951 | T: git git://git.code.sf.net/p/intel-sas/isci | 3971 | T: git git://git.code.sf.net/p/intel-sas/isci |
3952 | S: Supported | 3972 | S: Supported |
3953 | F: drivers/scsi/isci/ | 3973 | F: drivers/scsi/isci/ |
3954 | F: firmware/isci/ | ||
3955 | 3974 | ||
3956 | INTEL IDLE DRIVER | 3975 | INTEL IDLE DRIVER |
3957 | M: Len Brown <lenb@kernel.org> | 3976 | M: Len Brown <lenb@kernel.org> |
@@ -4046,12 +4065,6 @@ F: Documentation/networking/ixgbe.txt | |||
4046 | F: Documentation/networking/ixgbevf.txt | 4065 | F: Documentation/networking/ixgbevf.txt |
4047 | F: drivers/net/ethernet/intel/ | 4066 | F: drivers/net/ethernet/intel/ |
4048 | 4067 | ||
4049 | INTEL MRST PMU DRIVER | ||
4050 | M: Len Brown <len.brown@intel.com> | ||
4051 | L: linux-pm@vger.kernel.org | ||
4052 | S: Supported | ||
4053 | F: arch/x86/platform/mrst/pmu.* | ||
4054 | |||
4055 | INTEL PRO/WIRELESS 2100, 2200BG, 2915ABG NETWORK CONNECTION SUPPORT | 4068 | INTEL PRO/WIRELESS 2100, 2200BG, 2915ABG NETWORK CONNECTION SUPPORT |
4056 | M: Stanislav Yakovlev <stas.yakovlev@gmail.com> | 4069 | M: Stanislav Yakovlev <stas.yakovlev@gmail.com> |
4057 | L: linux-wireless@vger.kernel.org | 4070 | L: linux-wireless@vger.kernel.org |
@@ -4080,7 +4093,7 @@ S: Supported | |||
4080 | W: http://linuxwimax.org | 4093 | W: http://linuxwimax.org |
4081 | F: Documentation/wimax/README.i2400m | 4094 | F: Documentation/wimax/README.i2400m |
4082 | F: drivers/net/wimax/i2400m/ | 4095 | F: drivers/net/wimax/i2400m/ |
4083 | F: include/linux/wimax/i2400m.h | 4096 | F: include/uapi/linux/wimax/i2400m.h |
4084 | 4097 | ||
4085 | INTEL WIRELESS 3945ABG/BG, 4965AGN (iwlegacy) | 4098 | INTEL WIRELESS 3945ABG/BG, 4965AGN (iwlegacy) |
4086 | M: Stanislaw Gruszka <sgruszka@redhat.com> | 4099 | M: Stanislaw Gruszka <sgruszka@redhat.com> |
@@ -4102,9 +4115,9 @@ INTEL MANAGEMENT ENGINE (mei) | |||
4102 | M: Tomas Winkler <tomas.winkler@intel.com> | 4115 | M: Tomas Winkler <tomas.winkler@intel.com> |
4103 | L: linux-kernel@vger.kernel.org | 4116 | L: linux-kernel@vger.kernel.org |
4104 | S: Supported | 4117 | S: Supported |
4105 | F: include/linux/mei.h | 4118 | F: include/uapi/linux/mei.h |
4106 | F: drivers/misc/mei/* | 4119 | F: drivers/misc/mei/* |
4107 | F: Documentation/mei/* | 4120 | F: Documentation/misc-devices/mei/* |
4108 | 4121 | ||
4109 | IOC3 ETHERNET DRIVER | 4122 | IOC3 ETHERNET DRIVER |
4110 | M: Ralf Baechle <ralf@linux-mips.org> | 4123 | M: Ralf Baechle <ralf@linux-mips.org> |
@@ -4144,6 +4157,7 @@ S: Supported | |||
4144 | F: Documentation/IPMI.txt | 4157 | F: Documentation/IPMI.txt |
4145 | F: drivers/char/ipmi/ | 4158 | F: drivers/char/ipmi/ |
4146 | F: include/linux/ipmi* | 4159 | F: include/linux/ipmi* |
4160 | F: include/uapi/linux/ipmi* | ||
4147 | 4161 | ||
4148 | IPS SCSI RAID DRIVER | 4162 | IPS SCSI RAID DRIVER |
4149 | M: Adaptec OEM Raid Solutions <aacraid@adaptec.com> | 4163 | M: Adaptec OEM Raid Solutions <aacraid@adaptec.com> |
@@ -4161,7 +4175,7 @@ L: lvs-devel@vger.kernel.org | |||
4161 | S: Maintained | 4175 | S: Maintained |
4162 | F: Documentation/networking/ipvs-sysctl.txt | 4176 | F: Documentation/networking/ipvs-sysctl.txt |
4163 | F: include/net/ip_vs.h | 4177 | F: include/net/ip_vs.h |
4164 | F: include/linux/ip_vs.h | 4178 | F: include/uapi/linux/ip_vs.h |
4165 | F: net/netfilter/ipvs/ | 4179 | F: net/netfilter/ipvs/ |
4166 | 4180 | ||
4167 | IPWIRELESS DRIVER | 4181 | IPWIRELESS DRIVER |
@@ -4174,8 +4188,8 @@ IPX NETWORK LAYER | |||
4174 | M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> | 4188 | M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> |
4175 | L: netdev@vger.kernel.org | 4189 | L: netdev@vger.kernel.org |
4176 | S: Maintained | 4190 | S: Maintained |
4177 | F: include/linux/ipx.h | ||
4178 | F: include/net/ipx.h | 4191 | F: include/net/ipx.h |
4192 | F: include/uapi/linux/ipx.h | ||
4179 | F: net/ipx/ | 4193 | F: net/ipx/ |
4180 | 4194 | ||
4181 | IRDA SUBSYSTEM | 4195 | IRDA SUBSYSTEM |
@@ -4238,6 +4252,8 @@ F: Documentation/isdn/ | |||
4238 | F: drivers/isdn/ | 4252 | F: drivers/isdn/ |
4239 | F: include/linux/isdn.h | 4253 | F: include/linux/isdn.h |
4240 | F: include/linux/isdn/ | 4254 | F: include/linux/isdn/ |
4255 | F: include/uapi/linux/isdn.h | ||
4256 | F: include/uapi/linux/isdn/ | ||
4241 | 4257 | ||
4242 | ISDN SUBSYSTEM (Eicon active card driver) | 4258 | ISDN SUBSYSTEM (Eicon active card driver) |
4243 | M: Armin Schindler <mac@melware.de> | 4259 | M: Armin Schindler <mac@melware.de> |
@@ -4278,7 +4294,7 @@ W: http://www.ivtvdriver.org | |||
4278 | S: Maintained | 4294 | S: Maintained |
4279 | F: Documentation/video4linux/*.ivtv | 4295 | F: Documentation/video4linux/*.ivtv |
4280 | F: drivers/media/pci/ivtv/ | 4296 | F: drivers/media/pci/ivtv/ |
4281 | F: include/linux/ivtv* | 4297 | F: include/uapi/linux/ivtv* |
4282 | 4298 | ||
4283 | IX2505V MEDIA DRIVER | 4299 | IX2505V MEDIA DRIVER |
4284 | M: Malcolm Priestley <tvboxspy@gmail.com> | 4300 | M: Malcolm Priestley <tvboxspy@gmail.com> |
@@ -4316,7 +4332,7 @@ L: linux-mtd@lists.infradead.org | |||
4316 | W: http://www.linux-mtd.infradead.org/doc/jffs2.html | 4332 | W: http://www.linux-mtd.infradead.org/doc/jffs2.html |
4317 | S: Maintained | 4333 | S: Maintained |
4318 | F: fs/jffs2/ | 4334 | F: fs/jffs2/ |
4319 | F: include/linux/jffs2.h | 4335 | F: include/uapi/linux/jffs2.h |
4320 | 4336 | ||
4321 | JOURNALLING LAYER FOR BLOCK DEVICES (JBD) | 4337 | JOURNALLING LAYER FOR BLOCK DEVICES (JBD) |
4322 | M: Andrew Morton <akpm@linux-foundation.org> | 4338 | M: Andrew Morton <akpm@linux-foundation.org> |
@@ -4399,11 +4415,13 @@ W: http://nfs.sourceforge.net/ | |||
4399 | S: Supported | 4415 | S: Supported |
4400 | F: fs/nfsd/ | 4416 | F: fs/nfsd/ |
4401 | F: include/linux/nfsd/ | 4417 | F: include/linux/nfsd/ |
4418 | F: include/uapi/linux/nfsd/ | ||
4402 | F: fs/lockd/ | 4419 | F: fs/lockd/ |
4403 | F: fs/nfs_common/ | 4420 | F: fs/nfs_common/ |
4404 | F: net/sunrpc/ | 4421 | F: net/sunrpc/ |
4405 | F: include/linux/lockd/ | 4422 | F: include/linux/lockd/ |
4406 | F: include/linux/sunrpc/ | 4423 | F: include/linux/sunrpc/ |
4424 | F: include/uapi/linux/sunrpc/ | ||
4407 | 4425 | ||
4408 | KERNEL VIRTUAL MACHINE (KVM) | 4426 | KERNEL VIRTUAL MACHINE (KVM) |
4409 | M: Marcelo Tosatti <mtosatti@redhat.com> | 4427 | M: Marcelo Tosatti <mtosatti@redhat.com> |
@@ -4415,6 +4433,7 @@ F: Documentation/*/kvm.txt | |||
4415 | F: arch/*/kvm/ | 4433 | F: arch/*/kvm/ |
4416 | F: arch/*/include/asm/kvm* | 4434 | F: arch/*/include/asm/kvm* |
4417 | F: include/linux/kvm* | 4435 | F: include/linux/kvm* |
4436 | F: include/uapi/linux/kvm* | ||
4418 | F: virt/kvm/ | 4437 | F: virt/kvm/ |
4419 | 4438 | ||
4420 | KERNEL VIRTUAL MACHINE (KVM) FOR AMD-V | 4439 | KERNEL VIRTUAL MACHINE (KVM) FOR AMD-V |
@@ -4461,6 +4480,7 @@ W: http://kernel.org/pub/linux/utils/kernel/kexec/ | |||
4461 | L: kexec@lists.infradead.org | 4480 | L: kexec@lists.infradead.org |
4462 | S: Maintained | 4481 | S: Maintained |
4463 | F: include/linux/kexec.h | 4482 | F: include/linux/kexec.h |
4483 | F: include/uapi/linux/kexec.h | ||
4464 | F: kernel/kexec.c | 4484 | F: kernel/kexec.c |
4465 | 4485 | ||
4466 | KEYS/KEYRINGS: | 4486 | KEYS/KEYRINGS: |
@@ -4702,6 +4722,7 @@ LLC (802.2) | |||
4702 | M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> | 4722 | M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> |
4703 | S: Maintained | 4723 | S: Maintained |
4704 | F: include/linux/llc.h | 4724 | F: include/linux/llc.h |
4725 | F: include/uapi/linux/llc.h | ||
4705 | F: include/net/llc* | 4726 | F: include/net/llc* |
4706 | F: net/llc/ | 4727 | F: net/llc/ |
4707 | 4728 | ||
@@ -4922,7 +4943,7 @@ MATROX FRAMEBUFFER DRIVER | |||
4922 | L: linux-fbdev@vger.kernel.org | 4943 | L: linux-fbdev@vger.kernel.org |
4923 | S: Orphan | 4944 | S: Orphan |
4924 | F: drivers/video/matrox/matroxfb_* | 4945 | F: drivers/video/matrox/matroxfb_* |
4925 | F: include/linux/matroxfb.h | 4946 | F: include/uapi/linux/matroxfb.h |
4926 | 4947 | ||
4927 | MAX16065 HARDWARE MONITOR DRIVER | 4948 | MAX16065 HARDWARE MONITOR DRIVER |
4928 | M: Guenter Roeck <linux@roeck-us.net> | 4949 | M: Guenter Roeck <linux@roeck-us.net> |
@@ -5004,7 +5025,7 @@ T: git git://git.infradead.org/mtd-2.6.git | |||
5004 | S: Maintained | 5025 | S: Maintained |
5005 | F: drivers/mtd/ | 5026 | F: drivers/mtd/ |
5006 | F: include/linux/mtd/ | 5027 | F: include/linux/mtd/ |
5007 | F: include/mtd/ | 5028 | F: include/uapi/mtd/ |
5008 | 5029 | ||
5009 | MICROBLAZE ARCHITECTURE | 5030 | MICROBLAZE ARCHITECTURE |
5010 | M: Michal Simek <monstr@monstr.eu> | 5031 | M: Michal Simek <monstr@monstr.eu> |
@@ -5042,12 +5063,6 @@ F: Documentation/video4linux/meye.txt | |||
5042 | F: drivers/media/pci/meye/ | 5063 | F: drivers/media/pci/meye/ |
5043 | F: include/uapi/linux/meye.h | 5064 | F: include/uapi/linux/meye.h |
5044 | 5065 | ||
5045 | MOTOROLA IMX MMC/SD HOST CONTROLLER INTERFACE DRIVER | ||
5046 | M: Pavel Pisa <ppisa@pikron.com> | ||
5047 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||
5048 | S: Maintained | ||
5049 | F: drivers/mmc/host/imxmmc.* | ||
5050 | |||
5051 | MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD | 5066 | MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD |
5052 | M: Jiri Slaby <jirislaby@gmail.com> | 5067 | M: Jiri Slaby <jirislaby@gmail.com> |
5053 | S: Maintained | 5068 | S: Maintained |
@@ -5086,6 +5101,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git | |||
5086 | S: Maintained | 5101 | S: Maintained |
5087 | F: drivers/mmc/ | 5102 | F: drivers/mmc/ |
5088 | F: include/linux/mmc/ | 5103 | F: include/linux/mmc/ |
5104 | F: include/uapi/linux/mmc/ | ||
5089 | 5105 | ||
5090 | MULTIMEDIA CARD (MMC) ETC. OVER SPI | 5106 | MULTIMEDIA CARD (MMC) ETC. OVER SPI |
5091 | S: Orphan | 5107 | S: Orphan |
@@ -5186,6 +5202,8 @@ S: Supported | |||
5186 | F: include/linux/netfilter* | 5202 | F: include/linux/netfilter* |
5187 | F: include/linux/netfilter/ | 5203 | F: include/linux/netfilter/ |
5188 | F: include/net/netfilter/ | 5204 | F: include/net/netfilter/ |
5205 | F: include/uapi/linux/netfilter* | ||
5206 | F: include/uapi/linux/netfilter/ | ||
5189 | F: net/*/netfilter.c | 5207 | F: net/*/netfilter.c |
5190 | F: net/*/netfilter/ | 5208 | F: net/*/netfilter/ |
5191 | F: net/netfilter/ | 5209 | F: net/netfilter/ |
@@ -5204,8 +5222,8 @@ M: Ralf Baechle <ralf@linux-mips.org> | |||
5204 | L: linux-hams@vger.kernel.org | 5222 | L: linux-hams@vger.kernel.org |
5205 | W: http://www.linux-ax25.org/ | 5223 | W: http://www.linux-ax25.org/ |
5206 | S: Maintained | 5224 | S: Maintained |
5207 | F: include/linux/netrom.h | ||
5208 | F: include/net/netrom.h | 5225 | F: include/net/netrom.h |
5226 | F: include/uapi/linux/netrom.h | ||
5209 | F: net/netrom/ | 5227 | F: net/netrom/ |
5210 | 5228 | ||
5211 | NETWORK BLOCK DEVICE (NBD) | 5229 | NETWORK BLOCK DEVICE (NBD) |
@@ -5214,6 +5232,7 @@ S: Maintained | |||
5214 | F: Documentation/blockdev/nbd.txt | 5232 | F: Documentation/blockdev/nbd.txt |
5215 | F: drivers/block/nbd.c | 5233 | F: drivers/block/nbd.c |
5216 | F: include/linux/nbd.h | 5234 | F: include/linux/nbd.h |
5235 | F: include/uapi/linux/nbd.h | ||
5217 | 5236 | ||
5218 | NETWORK DROP MONITOR | 5237 | NETWORK DROP MONITOR |
5219 | M: Neil Horman <nhorman@tuxdriver.com> | 5238 | M: Neil Horman <nhorman@tuxdriver.com> |
@@ -5235,6 +5254,9 @@ F: include/net/ | |||
5235 | F: include/linux/in.h | 5254 | F: include/linux/in.h |
5236 | F: include/linux/net.h | 5255 | F: include/linux/net.h |
5237 | F: include/linux/netdevice.h | 5256 | F: include/linux/netdevice.h |
5257 | F: include/uapi/linux/in.h | ||
5258 | F: include/uapi/linux/net.h | ||
5259 | F: include/uapi/linux/netdevice.h | ||
5238 | 5260 | ||
5239 | NETWORKING [IPv4/IPv6] | 5261 | NETWORKING [IPv4/IPv6] |
5240 | M: "David S. Miller" <davem@davemloft.net> | 5262 | M: "David S. Miller" <davem@davemloft.net> |
@@ -5280,6 +5302,7 @@ F: net/rfkill/ | |||
5280 | F: net/wireless/ | 5302 | F: net/wireless/ |
5281 | F: include/net/ieee80211* | 5303 | F: include/net/ieee80211* |
5282 | F: include/linux/wireless.h | 5304 | F: include/linux/wireless.h |
5305 | F: include/uapi/linux/wireless.h | ||
5283 | F: include/net/iw_handler.h | 5306 | F: include/net/iw_handler.h |
5284 | F: drivers/net/wireless/ | 5307 | F: drivers/net/wireless/ |
5285 | 5308 | ||
@@ -5299,6 +5322,8 @@ F: include/linux/fcdevice.h | |||
5299 | F: include/linux/fddidevice.h | 5322 | F: include/linux/fddidevice.h |
5300 | F: include/linux/hippidevice.h | 5323 | F: include/linux/hippidevice.h |
5301 | F: include/linux/inetdevice.h | 5324 | F: include/linux/inetdevice.h |
5325 | F: include/uapi/linux/if_* | ||
5326 | F: include/uapi/linux/netdevice.h | ||
5302 | 5327 | ||
5303 | NETXEN (1/10) GbE SUPPORT | 5328 | NETXEN (1/10) GbE SUPPORT |
5304 | M: Sony Chacko <sony.chacko@qlogic.com> | 5329 | M: Sony Chacko <sony.chacko@qlogic.com> |
@@ -5316,8 +5341,8 @@ L: linux-wireless@vger.kernel.org | |||
5316 | L: linux-nfc@lists.01.org (moderated for non-subscribers) | 5341 | L: linux-nfc@lists.01.org (moderated for non-subscribers) |
5317 | S: Maintained | 5342 | S: Maintained |
5318 | F: net/nfc/ | 5343 | F: net/nfc/ |
5319 | F: include/linux/nfc.h | ||
5320 | F: include/net/nfc/ | 5344 | F: include/net/nfc/ |
5345 | F: include/uapi/linux/nfc.h | ||
5321 | F: drivers/nfc/ | 5346 | F: drivers/nfc/ |
5322 | F: include/linux/platform_data/pn544.h | 5347 | F: include/linux/platform_data/pn544.h |
5323 | 5348 | ||
@@ -5334,6 +5359,8 @@ F: net/sunrpc/ | |||
5334 | F: include/linux/lockd/ | 5359 | F: include/linux/lockd/ |
5335 | F: include/linux/nfs* | 5360 | F: include/linux/nfs* |
5336 | F: include/linux/sunrpc/ | 5361 | F: include/linux/sunrpc/ |
5362 | F: include/uapi/linux/nfs* | ||
5363 | F: include/uapi/linux/sunrpc/ | ||
5337 | 5364 | ||
5338 | NI5010 NETWORK DRIVER | 5365 | NI5010 NETWORK DRIVER |
5339 | M: Jan-Pascal van Best <janpascal@vanbest.org> | 5366 | M: Jan-Pascal van Best <janpascal@vanbest.org> |
@@ -5523,6 +5550,7 @@ M: Harald Welte <laforge@gnumonks.org> | |||
5523 | S: Maintained | 5550 | S: Maintained |
5524 | F: drivers/char/pcmcia/cm4000_cs.c | 5551 | F: drivers/char/pcmcia/cm4000_cs.c |
5525 | F: include/linux/cm4000_cs.h | 5552 | F: include/linux/cm4000_cs.h |
5553 | F: include/uapi/linux/cm4000_cs.h | ||
5526 | 5554 | ||
5527 | OMNIKEY CARDMAN 4040 DRIVER | 5555 | OMNIKEY CARDMAN 4040 DRIVER |
5528 | M: Harald Welte <laforge@gnumonks.org> | 5556 | M: Harald Welte <laforge@gnumonks.org> |
@@ -5681,7 +5709,7 @@ S: Orphan | |||
5681 | F: drivers/parport/ | 5709 | F: drivers/parport/ |
5682 | F: include/linux/parport*.h | 5710 | F: include/linux/parport*.h |
5683 | F: drivers/char/ppdev.c | 5711 | F: drivers/char/ppdev.c |
5684 | F: include/linux/ppdev.h | 5712 | F: include/uapi/linux/ppdev.h |
5685 | 5713 | ||
5686 | PARAVIRT_OPS INTERFACE | 5714 | PARAVIRT_OPS INTERFACE |
5687 | M: Jeremy Fitzhardinge <jeremy@goop.org> | 5715 | M: 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 | |||
5822 | S: Supported | 5850 | S: Supported |
5823 | F: kernel/events/* | 5851 | F: kernel/events/* |
5824 | F: include/linux/perf_event.h | 5852 | F: include/linux/perf_event.h |
5853 | F: include/uapi/linux/perf_event.h | ||
5825 | F: arch/*/kernel/perf_event*.c | 5854 | F: arch/*/kernel/perf_event*.c |
5826 | F: arch/*/kernel/*/perf_event*.c | 5855 | F: arch/*/kernel/*/perf_event*.c |
5827 | F: arch/*/kernel/*/*/perf_event*.c | 5856 | F: arch/*/kernel/*/*/perf_event*.c |
5828 | F: arch/*/include/asm/perf_event.h | 5857 | F: arch/*/include/asm/perf_event.h |
5829 | F: arch/*/lib/perf_event*.c | ||
5830 | F: arch/*/kernel/perf_callchain.c | 5858 | F: arch/*/kernel/perf_callchain.c |
5831 | F: tools/perf/ | 5859 | F: tools/perf/ |
5832 | 5860 | ||
@@ -5835,6 +5863,7 @@ M: Christoph Hellwig <hch@infradead.org> | |||
5835 | L: linux-abi-devel@lists.sourceforge.net | 5863 | L: linux-abi-devel@lists.sourceforge.net |
5836 | S: Maintained | 5864 | S: Maintained |
5837 | F: include/linux/personality.h | 5865 | F: include/linux/personality.h |
5866 | F: include/uapi/linux/personality.h | ||
5838 | 5867 | ||
5839 | PHONET PROTOCOL | 5868 | PHONET PROTOCOL |
5840 | M: Remi Denis-Courmont <courmisch@gmail.com> | 5869 | M: Remi Denis-Courmont <courmisch@gmail.com> |
@@ -5842,6 +5871,7 @@ S: Supported | |||
5842 | F: Documentation/networking/phonet.txt | 5871 | F: Documentation/networking/phonet.txt |
5843 | F: include/linux/phonet.h | 5872 | F: include/linux/phonet.h |
5844 | F: include/net/phonet/ | 5873 | F: include/net/phonet/ |
5874 | F: include/uapi/linux/phonet.h | ||
5845 | F: net/phonet/ | 5875 | F: net/phonet/ |
5846 | 5876 | ||
5847 | PHRAM MTD DRIVER | 5877 | PHRAM MTD DRIVER |
@@ -5890,6 +5920,7 @@ M: Jiri Kosina <jkosina@suse.cz> | |||
5890 | S: Maintained | 5920 | S: Maintained |
5891 | F: drivers/block/pktcdvd.c | 5921 | F: drivers/block/pktcdvd.c |
5892 | F: include/linux/pktcdvd.h | 5922 | F: include/linux/pktcdvd.h |
5923 | F: include/uapi/linux/pktcdvd.h | ||
5893 | 5924 | ||
5894 | PKUNITY SOC DRIVERS | 5925 | PKUNITY SOC DRIVERS |
5895 | M: Guan Xuetao <gxt@mprc.pku.edu.cn> | 5926 | M: Guan Xuetao <gxt@mprc.pku.edu.cn> |
@@ -5964,7 +5995,7 @@ PPP OVER ATM (RFC 2364) | |||
5964 | M: Mitchell Blank Jr <mitch@sfgoth.com> | 5995 | M: Mitchell Blank Jr <mitch@sfgoth.com> |
5965 | S: Maintained | 5996 | S: Maintained |
5966 | F: net/atm/pppoatm.c | 5997 | F: net/atm/pppoatm.c |
5967 | F: include/linux/atmppp.h | 5998 | F: include/uapi/linux/atmppp.h |
5968 | 5999 | ||
5969 | PPP OVER ETHERNET | 6000 | PPP OVER ETHERNET |
5970 | M: Michal Ostrowski <mostrows@earthlink.net> | 6001 | M: Michal Ostrowski <mostrows@earthlink.net> |
@@ -5977,6 +6008,7 @@ M: James Chapman <jchapman@katalix.com> | |||
5977 | S: Maintained | 6008 | S: Maintained |
5978 | F: net/l2tp/l2tp_ppp.c | 6009 | F: net/l2tp/l2tp_ppp.c |
5979 | F: include/linux/if_pppol2tp.h | 6010 | F: include/linux/if_pppol2tp.h |
6011 | F: include/uapi/linux/if_pppol2tp.h | ||
5980 | 6012 | ||
5981 | PPS SUPPORT | 6013 | PPS SUPPORT |
5982 | M: Rodolfo Giometti <giometti@enneenne.com> | 6014 | M: Rodolfo Giometti <giometti@enneenne.com> |
@@ -6074,6 +6106,7 @@ F: include/asm-generic/syscall.h | |||
6074 | F: include/linux/ptrace.h | 6106 | F: include/linux/ptrace.h |
6075 | F: include/linux/regset.h | 6107 | F: include/linux/regset.h |
6076 | F: include/linux/tracehook.h | 6108 | F: include/linux/tracehook.h |
6109 | F: include/uapi/linux/ptrace.h | ||
6077 | F: kernel/ptrace.c | 6110 | F: kernel/ptrace.c |
6078 | 6111 | ||
6079 | PVRUSB2 VIDEO4LINUX DRIVER | 6112 | PVRUSB2 VIDEO4LINUX DRIVER |
@@ -6102,7 +6135,6 @@ T: git git://gitorious.org/linux-pwm/linux-pwm.git | |||
6102 | F: Documentation/pwm.txt | 6135 | F: Documentation/pwm.txt |
6103 | F: Documentation/devicetree/bindings/pwm/ | 6136 | F: Documentation/devicetree/bindings/pwm/ |
6104 | F: include/linux/pwm.h | 6137 | F: include/linux/pwm.h |
6105 | F: include/linux/of_pwm.h | ||
6106 | F: drivers/pwm/ | 6138 | F: drivers/pwm/ |
6107 | F: drivers/video/backlight/pwm_bl.c | 6139 | F: drivers/video/backlight/pwm_bl.c |
6108 | F: include/linux/pwm_backlight.h | 6140 | F: include/linux/pwm_backlight.h |
@@ -6198,8 +6230,8 @@ M: Anders Larsen <al@alarsen.net> | |||
6198 | W: http://www.alarsen.net/linux/qnx4fs/ | 6230 | W: http://www.alarsen.net/linux/qnx4fs/ |
6199 | S: Maintained | 6231 | S: Maintained |
6200 | F: fs/qnx4/ | 6232 | F: fs/qnx4/ |
6201 | F: include/linux/qnx4_fs.h | 6233 | F: include/uapi/linux/qnx4_fs.h |
6202 | F: include/linux/qnxtypes.h | 6234 | F: include/uapi/linux/qnxtypes.h |
6203 | 6235 | ||
6204 | QT1010 MEDIA DRIVER | 6236 | QT1010 MEDIA DRIVER |
6205 | M: Antti Palosaari <crope@iki.fi> | 6237 | M: Antti Palosaari <crope@iki.fi> |
@@ -6233,7 +6265,7 @@ M: Benjamin Herrenschmidt <benh@kernel.crashing.org> | |||
6233 | L: linux-fbdev@vger.kernel.org | 6265 | L: linux-fbdev@vger.kernel.org |
6234 | S: Maintained | 6266 | S: Maintained |
6235 | F: drivers/video/aty/radeon* | 6267 | F: drivers/video/aty/radeon* |
6236 | F: include/linux/radeonfb.h | 6268 | F: include/uapi/linux/radeonfb.h |
6237 | 6269 | ||
6238 | RADIOSHARK RADIO DRIVER | 6270 | RADIOSHARK RADIO DRIVER |
6239 | M: Hans de Goede <hdegoede@redhat.com> | 6271 | M: Hans de Goede <hdegoede@redhat.com> |
@@ -6334,6 +6366,7 @@ S: Maintained | |||
6334 | F: Documentation/rtc.txt | 6366 | F: Documentation/rtc.txt |
6335 | F: drivers/rtc/ | 6367 | F: drivers/rtc/ |
6336 | F: include/linux/rtc.h | 6368 | F: include/linux/rtc.h |
6369 | F: include/uapi/linux/rtc.h | ||
6337 | 6370 | ||
6338 | REISERFS FILE SYSTEM | 6371 | REISERFS FILE SYSTEM |
6339 | L: reiserfs-devel@vger.kernel.org | 6372 | L: reiserfs-devel@vger.kernel.org |
@@ -6388,8 +6421,8 @@ M: Ralf Baechle <ralf@linux-mips.org> | |||
6388 | L: linux-hams@vger.kernel.org | 6421 | L: linux-hams@vger.kernel.org |
6389 | W: http://www.linux-ax25.org/ | 6422 | W: http://www.linux-ax25.org/ |
6390 | S: Maintained | 6423 | S: Maintained |
6391 | F: include/linux/rose.h | ||
6392 | F: include/net/rose.h | 6424 | F: include/net/rose.h |
6425 | F: include/uapi/linux/rose.h | ||
6393 | F: net/rose/ | 6426 | F: net/rose/ |
6394 | 6427 | ||
6395 | RTL2830 MEDIA DRIVER | 6428 | RTL2830 MEDIA DRIVER |
@@ -6566,6 +6599,8 @@ S: Supported | |||
6566 | F: include/linux/clocksource.h | 6599 | F: include/linux/clocksource.h |
6567 | F: include/linux/time.h | 6600 | F: include/linux/time.h |
6568 | F: include/linux/timex.h | 6601 | F: include/linux/timex.h |
6602 | F: include/uapi/linux/time.h | ||
6603 | F: include/uapi/linux/timex.h | ||
6569 | F: kernel/time/clocksource.c | 6604 | F: kernel/time/clocksource.c |
6570 | F: kernel/time/time*.c | 6605 | F: kernel/time/time*.c |
6571 | F: kernel/time/ntp.c | 6606 | F: kernel/time/ntp.c |
@@ -6590,6 +6625,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core | |||
6590 | S: Maintained | 6625 | S: Maintained |
6591 | F: kernel/sched/ | 6626 | F: kernel/sched/ |
6592 | F: include/linux/sched.h | 6627 | F: include/linux/sched.h |
6628 | F: include/uapi/linux/sched.h | ||
6593 | 6629 | ||
6594 | SCORE ARCHITECTURE | 6630 | SCORE ARCHITECTURE |
6595 | M: Chen Liqin <liqin.chen@sunplusct.com> | 6631 | M: Chen Liqin <liqin.chen@sunplusct.com> |
@@ -6743,7 +6779,7 @@ SENSABLE PHANTOM | |||
6743 | M: Jiri Slaby <jirislaby@gmail.com> | 6779 | M: Jiri Slaby <jirislaby@gmail.com> |
6744 | S: Maintained | 6780 | S: Maintained |
6745 | F: drivers/misc/phantom.c | 6781 | F: drivers/misc/phantom.c |
6746 | F: include/linux/phantom.h | 6782 | F: include/uapi/linux/phantom.h |
6747 | 6783 | ||
6748 | SERIAL ATA (SATA) SUBSYSTEM | 6784 | SERIAL ATA (SATA) SUBSYSTEM |
6749 | M: Jeff Garzik <jgarzik@pobox.com> | 6785 | M: Jeff Garzik <jgarzik@pobox.com> |
@@ -7001,6 +7037,7 @@ L: linux-raid@vger.kernel.org | |||
7001 | S: Supported | 7037 | S: Supported |
7002 | F: drivers/md/ | 7038 | F: drivers/md/ |
7003 | F: include/linux/raid/ | 7039 | F: include/linux/raid/ |
7040 | F: include/uapi/linux/raid/ | ||
7004 | 7041 | ||
7005 | SONIC NETWORK DRIVER | 7042 | SONIC NETWORK DRIVER |
7006 | M: Thomas Bogendoerfer <tsbogend@alpha.franken.de> | 7043 | M: Thomas Bogendoerfer <tsbogend@alpha.franken.de> |
@@ -7041,6 +7078,7 @@ T: git git://git.alsa-project.org/alsa-kernel.git | |||
7041 | S: Maintained | 7078 | S: Maintained |
7042 | F: Documentation/sound/ | 7079 | F: Documentation/sound/ |
7043 | F: include/sound/ | 7080 | F: include/sound/ |
7081 | F: include/uapi/sound/ | ||
7044 | F: sound/ | 7082 | F: sound/ |
7045 | 7083 | ||
7046 | SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC) | 7084 | SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC) |
@@ -7141,6 +7179,7 @@ S: Maintained | |||
7141 | F: Documentation/spi/ | 7179 | F: Documentation/spi/ |
7142 | F: drivers/spi/ | 7180 | F: drivers/spi/ |
7143 | F: include/linux/spi/ | 7181 | F: include/linux/spi/ |
7182 | F: include/uapi/linux/spi/ | ||
7144 | 7183 | ||
7145 | SPIDERNET NETWORK DRIVER for CELL | 7184 | SPIDERNET NETWORK DRIVER for CELL |
7146 | M: Ishizaki Kou <kou.ishizaki@toshiba.co.jp> | 7185 | M: Ishizaki Kou <kou.ishizaki@toshiba.co.jp> |
@@ -7277,7 +7316,7 @@ F: drivers/staging/rtl8712/ | |||
7277 | STAGING - SILICON MOTION SM7XX FRAME BUFFER DRIVER | 7316 | STAGING - SILICON MOTION SM7XX FRAME BUFFER DRIVER |
7278 | M: Teddy Wang <teddy.wang@siliconmotion.com.cn> | 7317 | M: Teddy Wang <teddy.wang@siliconmotion.com.cn> |
7279 | S: Odd Fixes | 7318 | S: Odd Fixes |
7280 | F: drivers/staging/sm7xx/ | 7319 | F: drivers/staging/sm7xxfb/ |
7281 | 7320 | ||
7282 | STAGING - SOFTLOGIC 6x10 MPEG CODEC | 7321 | STAGING - SOFTLOGIC 6x10 MPEG CODEC |
7283 | M: Ben Collins <bcollins@bluecherry.net> | 7322 | M: Ben Collins <bcollins@bluecherry.net> |
@@ -7403,8 +7442,8 @@ TC CLASSIFIER | |||
7403 | M: Jamal Hadi Salim <jhs@mojatatu.com> | 7442 | M: Jamal Hadi Salim <jhs@mojatatu.com> |
7404 | L: netdev@vger.kernel.org | 7443 | L: netdev@vger.kernel.org |
7405 | S: Maintained | 7444 | S: Maintained |
7406 | F: include/linux/pkt_cls.h | ||
7407 | F: include/net/pkt_cls.h | 7445 | F: include/net/pkt_cls.h |
7446 | F: include/uapi/linux/pkt_cls.h | ||
7408 | F: net/sched/ | 7447 | F: net/sched/ |
7409 | 7448 | ||
7410 | TCP LOW PRIORITY MODULE | 7449 | TCP LOW PRIORITY MODULE |
@@ -7496,6 +7535,7 @@ L: netdev@vger.kernel.org | |||
7496 | S: Supported | 7535 | S: Supported |
7497 | F: drivers/net/team/ | 7536 | F: drivers/net/team/ |
7498 | F: include/linux/if_team.h | 7537 | F: include/linux/if_team.h |
7538 | F: include/uapi/linux/if_team.h | ||
7499 | 7539 | ||
7500 | TECHNOTREND USB IR RECEIVER | 7540 | TECHNOTREND USB IR RECEIVER |
7501 | M: Sean Young <sean@mess.org> | 7541 | M: Sean Young <sean@mess.org> |
@@ -7594,7 +7634,7 @@ L: netdev@vger.kernel.org (core kernel code) | |||
7594 | L: tipc-discussion@lists.sourceforge.net (user apps, general discussion) | 7634 | L: tipc-discussion@lists.sourceforge.net (user apps, general discussion) |
7595 | W: http://tipc.sourceforge.net/ | 7635 | W: http://tipc.sourceforge.net/ |
7596 | S: Maintained | 7636 | S: Maintained |
7597 | F: include/linux/tipc*.h | 7637 | F: include/uapi/linux/tipc*.h |
7598 | F: net/tipc/ | 7638 | F: net/tipc/ |
7599 | 7639 | ||
7600 | TILE ARCHITECTURE | 7640 | TILE ARCHITECTURE |
@@ -7644,6 +7684,7 @@ W: http://www.buzzard.org.uk/toshiba/ | |||
7644 | S: Maintained | 7684 | S: Maintained |
7645 | F: drivers/char/toshiba.c | 7685 | F: drivers/char/toshiba.c |
7646 | F: include/linux/toshiba.h | 7686 | F: include/linux/toshiba.h |
7687 | F: include/uapi/linux/toshiba.h | ||
7647 | 7688 | ||
7648 | TMIO MMC DRIVER | 7689 | TMIO MMC DRIVER |
7649 | M: Guennadi Liakhovetski <g.liakhovetski@gmx.de> | 7690 | M: Guennadi Liakhovetski <g.liakhovetski@gmx.de> |
@@ -7711,6 +7752,9 @@ F: drivers/tty/serial/serial_core.c | |||
7711 | F: include/linux/serial_core.h | 7752 | F: include/linux/serial_core.h |
7712 | F: include/linux/serial.h | 7753 | F: include/linux/serial.h |
7713 | F: include/linux/tty.h | 7754 | F: include/linux/tty.h |
7755 | F: include/uapi/linux/serial_core.h | ||
7756 | F: include/uapi/linux/serial.h | ||
7757 | F: include/uapi/linux/tty.h | ||
7714 | 7758 | ||
7715 | TUA9001 MEDIA DRIVER | 7759 | TUA9001 MEDIA DRIVER |
7716 | M: Antti Palosaari <crope@iki.fi> | 7760 | M: Antti Palosaari <crope@iki.fi> |
@@ -7790,7 +7834,7 @@ M: David Herrmann <dh.herrmann@googlemail.com> | |||
7790 | L: linux-input@vger.kernel.org | 7834 | L: linux-input@vger.kernel.org |
7791 | S: Maintained | 7835 | S: Maintained |
7792 | F: drivers/hid/uhid.c | 7836 | F: drivers/hid/uhid.c |
7793 | F: include/linux/uhid.h | 7837 | F: include/uapi/linux/uhid.h |
7794 | 7838 | ||
7795 | ULTRA-WIDEBAND (UWB) SUBSYSTEM: | 7839 | ULTRA-WIDEBAND (UWB) SUBSYSTEM: |
7796 | L: linux-usb@vger.kernel.org | 7840 | L: linux-usb@vger.kernel.org |
@@ -7819,6 +7863,7 @@ S: Maintained | |||
7819 | F: Documentation/cdrom/ | 7863 | F: Documentation/cdrom/ |
7820 | F: drivers/cdrom/cdrom.c | 7864 | F: drivers/cdrom/cdrom.c |
7821 | F: include/linux/cdrom.h | 7865 | F: include/linux/cdrom.h |
7866 | F: include/uapi/linux/cdrom.h | ||
7822 | 7867 | ||
7823 | UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER | 7868 | UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER |
7824 | M: Vinayak Holikatti <vinholikatti@gmail.com> | 7869 | M: Vinayak Holikatti <vinholikatti@gmail.com> |
@@ -7836,7 +7881,7 @@ T: git git://git.infradead.org/ubi-2.6.git | |||
7836 | S: Maintained | 7881 | S: Maintained |
7837 | F: drivers/mtd/ubi/ | 7882 | F: drivers/mtd/ubi/ |
7838 | F: include/linux/mtd/ubi.h | 7883 | F: include/linux/mtd/ubi.h |
7839 | F: include/mtd/ubi-user.h | 7884 | F: include/uapi/mtd/ubi-user.h |
7840 | 7885 | ||
7841 | UNSORTED BLOCK IMAGES (UBI) Fastmap | 7886 | UNSORTED BLOCK IMAGES (UBI) Fastmap |
7842 | M: Richard Weinberger <richard@nod.at> | 7887 | M: Richard Weinberger <richard@nod.at> |
@@ -7870,7 +7915,7 @@ M: Oliver Neukum <oliver@neukum.org> | |||
7870 | L: linux-usb@vger.kernel.org | 7915 | L: linux-usb@vger.kernel.org |
7871 | S: Maintained | 7916 | S: Maintained |
7872 | F: drivers/net/usb/cdc_*.c | 7917 | F: drivers/net/usb/cdc_*.c |
7873 | F: include/linux/usb/cdc.h | 7918 | F: include/uapi/linux/usb/cdc.h |
7874 | 7919 | ||
7875 | USB CYPRESS C67X00 DRIVER | 7920 | USB CYPRESS C67X00 DRIVER |
7876 | M: Peter Korsgaard <jacmet@sunsite.dk> | 7921 | M: Peter Korsgaard <jacmet@sunsite.dk> |
@@ -8191,6 +8236,7 @@ S: Maintained | |||
8191 | F: Documentation/vfio.txt | 8236 | F: Documentation/vfio.txt |
8192 | F: drivers/vfio/ | 8237 | F: drivers/vfio/ |
8193 | F: include/linux/vfio.h | 8238 | F: include/linux/vfio.h |
8239 | F: include/uapi/linux/vfio.h | ||
8194 | 8240 | ||
8195 | VIDEOBUF2 FRAMEWORK | 8241 | VIDEOBUF2 FRAMEWORK |
8196 | M: Pawel Osciak <pawel@osciak.com> | 8242 | M: Pawel Osciak <pawel@osciak.com> |
@@ -8207,6 +8253,7 @@ L: virtualization@lists.linux-foundation.org | |||
8207 | S: Maintained | 8253 | S: Maintained |
8208 | F: drivers/char/virtio_console.c | 8254 | F: drivers/char/virtio_console.c |
8209 | F: include/linux/virtio_console.h | 8255 | F: include/linux/virtio_console.h |
8256 | F: include/uapi/linux/virtio_console.h | ||
8210 | 8257 | ||
8211 | VIRTIO CORE, NET AND BLOCK DRIVERS | 8258 | VIRTIO CORE, NET AND BLOCK DRIVERS |
8212 | M: Rusty Russell <rusty@rustcorp.com.au> | 8259 | M: Rusty Russell <rusty@rustcorp.com.au> |
@@ -8225,7 +8272,7 @@ L: virtualization@lists.linux-foundation.org | |||
8225 | L: netdev@vger.kernel.org | 8272 | L: netdev@vger.kernel.org |
8226 | S: Maintained | 8273 | S: Maintained |
8227 | F: drivers/vhost/ | 8274 | F: drivers/vhost/ |
8228 | F: include/linux/vhost.h | 8275 | F: include/uapi/linux/vhost.h |
8229 | 8276 | ||
8230 | VIA RHINE NETWORK DRIVER | 8277 | VIA RHINE NETWORK DRIVER |
8231 | M: Roger Luethi <rl@hellgate.ch> | 8278 | M: Roger Luethi <rl@hellgate.ch> |
@@ -8365,6 +8412,7 @@ S: Maintained | |||
8365 | F: Documentation/watchdog/ | 8412 | F: Documentation/watchdog/ |
8366 | F: drivers/watchdog/ | 8413 | F: drivers/watchdog/ |
8367 | F: include/linux/watchdog.h | 8414 | F: include/linux/watchdog.h |
8415 | F: include/uapi/linux/watchdog.h | ||
8368 | 8416 | ||
8369 | WD7000 SCSI DRIVER | 8417 | WD7000 SCSI DRIVER |
8370 | M: Miroslav Zagorac <zaga@fly.cc.fer.hr> | 8418 | M: Miroslav Zagorac <zaga@fly.cc.fer.hr> |
@@ -8390,9 +8438,9 @@ L: wimax@linuxwimax.org | |||
8390 | S: Supported | 8438 | S: Supported |
8391 | W: http://linuxwimax.org | 8439 | W: http://linuxwimax.org |
8392 | F: Documentation/wimax/README.wimax | 8440 | F: Documentation/wimax/README.wimax |
8393 | F: include/linux/wimax.h | ||
8394 | F: include/linux/wimax/debug.h | 8441 | F: include/linux/wimax/debug.h |
8395 | F: include/net/wimax.h | 8442 | F: include/net/wimax.h |
8443 | F: include/uapi/linux/wimax.h | ||
8396 | F: net/wimax/ | 8444 | F: net/wimax/ |
8397 | 8445 | ||
8398 | WISTRON LAPTOP BUTTON DRIVER | 8446 | WISTRON LAPTOP BUTTON DRIVER |
@@ -8510,6 +8558,7 @@ F: drivers/*/xen-*front.c | |||
8510 | F: drivers/xen/ | 8558 | F: drivers/xen/ |
8511 | F: arch/x86/include/asm/xen/ | 8559 | F: arch/x86/include/asm/xen/ |
8512 | F: include/xen/ | 8560 | F: include/xen/ |
8561 | F: include/uapi/xen/ | ||
8513 | 8562 | ||
8514 | XEN HYPERVISOR ARM | 8563 | XEN HYPERVISOR ARM |
8515 | M: Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 8564 | M: 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 | ||
355 | config 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 | |||
355 | config RTC_DRV_TPS65910 | 363 | config 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 | |||
111 | obj-$(CONFIG_RTC_DRV_TEST) += rtc-test.o | 111 | obj-$(CONFIG_RTC_DRV_TEST) += rtc-test.o |
112 | obj-$(CONFIG_RTC_DRV_TILE) += rtc-tile.o | 112 | obj-$(CONFIG_RTC_DRV_TILE) += rtc-tile.o |
113 | obj-$(CONFIG_RTC_DRV_TWL4030) += rtc-twl.o | 113 | obj-$(CONFIG_RTC_DRV_TWL4030) += rtc-twl.o |
114 | obj-$(CONFIG_RTC_DRV_TPS6586X) += rtc-tps6586x.o | ||
114 | obj-$(CONFIG_RTC_DRV_TPS65910) += rtc-tps65910.o | 115 | obj-$(CONFIG_RTC_DRV_TPS65910) += rtc-tps65910.o |
115 | obj-$(CONFIG_RTC_DRV_TX4939) += rtc-tx4939.o | 116 | obj-$(CONFIG_RTC_DRV_TX4939) += rtc-tx4939.o |
116 | obj-$(CONFIG_RTC_DRV_V3020) += rtc-v3020.o | 117 | obj-$(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 | ||
306 | static const struct of_device_id tegra_rtc_dt_match[] = { | ||
307 | { .compatible = "nvidia,tegra20-rtc", }, | ||
308 | {} | ||
309 | }; | ||
310 | MODULE_DEVICE_TABLE(of, tegra_rtc_dt_match); | ||
311 | |||
306 | static int tegra_rtc_probe(struct platform_device *pdev) | 312 | static 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 | |||
56 | struct 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 | |||
64 | static inline struct device *to_tps6586x_dev(struct device *dev) | ||
65 | { | ||
66 | return dev->parent; | ||
67 | } | ||
68 | |||
69 | static 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 | |||
96 | static 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 | |||
141 | static 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 | |||
156 | static 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 | |||
211 | static 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 | |||
234 | static 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 | |||
242 | static 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 | |||
250 | static 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 | |||
297 | fail_req_irq: | ||
298 | rtc_device_unregister(rtc->rtc); | ||
299 | |||
300 | fail_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 | |||
306 | static 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 | ||
319 | static 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 | |||
328 | static 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 | |||
338 | static const struct dev_pm_ops tps6586x_pm_ops = { | ||
339 | SET_SYSTEM_SLEEP_PM_OPS(tps6586x_rtc_suspend, tps6586x_rtc_resume) | ||
340 | }; | ||
341 | |||
342 | static 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 | }; | ||
351 | module_platform_driver(tps6586x_rtc_driver); | ||
352 | |||
353 | MODULE_ALIAS("platform:rtc-tps6586x"); | ||
354 | MODULE_DESCRIPTION("TI TPS6586x RTC driver"); | ||
355 | MODULE_AUTHOR("Laxman dewangan <ldewangan@nvidia.com>"); | ||
356 | MODULE_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 | ||
29 | struct ipc_namespace { | 30 | struct 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 | ||
516 | typedef enum { | 508 | typedef 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 */ |
35 | extern long do_msgsnd(int msqid, long mtype, void __user *mtext, | 35 | extern long do_msgsnd(int msqid, long mtype, void __user *mtext, |
36 | size_t msgsz, int msgflg); | 36 | size_t msgsz, int msgflg); |
37 | extern long do_msgrcv(int msqid, long *pmtype, void __user *mtext, | 37 | extern 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 */ |
15 | struct msqid_ds { | 16 | struct 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 | ||
309 | long 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 |
310 | long compat_sys_semctl(int first, int second, int third, void __user *uptr) | 324 | long 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) | |||
337 | long compat_sys_msgrcv(int first, int second, int msgtyp, int third, | 351 | long 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; | ||
366 | out: | ||
367 | return err; | ||
368 | } | 370 | } |
369 | #else | 371 | #else |
370 | long compat_sys_semctl(int semid, int semnum, int cmd, int arg) | 372 | long 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, | |||
385 | long compat_sys_msgrcv(int msqid, struct compat_msgbuf __user *msgp, | 387 | long 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 | ||
159 | static int zero; | 159 | static int zero; |
160 | static int one = 1; | 160 | static int one = 1; |
161 | #ifdef CONFIG_CHECKPOINT_RESTORE | ||
162 | static int int_max = INT_MAX; | ||
163 | #endif | ||
161 | 164 | ||
162 | static struct ctl_table ipc_kern_table[] = { | 165 | static 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 | ||
@@ -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 | ||
758 | long do_msgrcv(int msqid, long *pmtype, void __user *mtext, | 758 | static 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 | */ | ||
777 | static 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 | |||
794 | static inline void free_copy(struct msg_msg *copy) | ||
795 | { | ||
796 | if (copy) | ||
797 | free_msg(copy); | ||
798 | } | ||
799 | #else | ||
800 | static 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 | |||
807 | static inline void free_copy(struct msg_msg *copy) | ||
808 | { | ||
809 | } | ||
810 | #endif | ||
811 | |||
812 | long 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, ©_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 | ||
910 | SYSCALL_DEFINE5(msgrcv, int, msqid, struct msgbuf __user *, msgp, size_t, msgsz, | 988 | SYSCALL_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; | ||
921 | out: | ||
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 | ||
106 | struct 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 | ||
144 | struct msg_msg *copy_msg(struct msg_msg *src, struct msg_msg *dst) | ||
145 | { | ||
146 | return ERR_PTR(-ENOSYS); | ||
147 | } | ||
148 | #endif | ||
106 | int store_msg(void __user *dest, struct msg_msg *msg, int len) | 149 | int 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 */ |
97 | int ipc_addid(struct ipc_ids *, struct kern_ipc_perm *, int); | 98 | int ipc_addid(struct ipc_ids *, struct kern_ipc_perm *, int); |
@@ -139,6 +140,7 @@ int ipc_parse_version (int *cmd); | |||
139 | 140 | ||
140 | extern void free_msg(struct msg_msg *msg); | 141 | extern void free_msg(struct msg_msg *msg); |
141 | extern struct msg_msg *load_msg(const void __user *src, int len); | 142 | extern struct msg_msg *load_msg(const void __user *src, int len); |
143 | extern struct msg_msg *copy_msg(struct msg_msg *src, struct msg_msg *dst); | ||
142 | extern int store_msg(void __user *dest, struct msg_msg *msg, int len); | 144 | extern int store_msg(void __user *dest, struct msg_msg *msg, int len); |
143 | 145 | ||
144 | extern void recompute_msgmni(struct ipc_namespace *); | 146 | extern 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 | ||
222 | int page_group_by_mobility_disabled __read_mostly; | 222 | int 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 | */ | ||
229 | void set_pageblock_migratetype(struct page *page, int migratetype) | 224 | void 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 | ||
1659 | static 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 | ||
1666 | static inline unsigned long nr_zone_isolate_freepages(struct zone *zone) | ||
1667 | { | ||
1668 | return 0; | ||
1669 | } | ||
1670 | #endif | ||
1671 | |||
1672 | bool zone_watermark_ok(struct zone *z, int order, unsigned long mark, | 1653 | bool 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 */ | ||
12 | static 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 */ | ||
22 | static 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 | |||
33 | int set_migratetype_isolate(struct page *page, bool skip_hwpoisoned_pages) | 11 | int 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); |
107 | out: | 85 | out: |
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 @@ | |||
1 | uname_M := $(shell uname -m 2>/dev/null || echo not) | ||
2 | ARCH ?= $(shell echo $(uname_M) | sed -e s/i.86/i386/) | ||
3 | ifeq ($(ARCH),i386) | ||
4 | ARCH := X86 | ||
5 | CFLAGS := -DCONFIG_X86_32 -D__i386__ | ||
6 | endif | ||
7 | ifeq ($(ARCH),x86_64) | ||
8 | ARCH := X86 | ||
9 | CFLAGS := -DCONFIG_X86_64 -D__x86_64__ | ||
10 | endif | ||
11 | |||
12 | CFLAGS += -I../../../../usr/include/ | ||
13 | |||
14 | all: | ||
15 | ifeq ($(ARCH),X86) | ||
16 | gcc $(CFLAGS) msgque.c -o msgque_test | ||
17 | else | ||
18 | echo "Not an x86 target, can't build msgque selftest" | ||
19 | endif | ||
20 | |||
21 | run_tests: all | ||
22 | ./msgque_test | ||
23 | |||
24 | clean: | ||
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 | |||
10 | struct 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 | |||
22 | struct 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 | |||
31 | int 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 | |||
72 | destroy: | ||
73 | if (msgctl(id, IPC_RMID, 0)) | ||
74 | printf("Failed to destroy queue: %d\n", -errno); | ||
75 | return ret; | ||
76 | } | ||
77 | |||
78 | int 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; | ||
119 | err: | ||
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 | |||
127 | int 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 | |||
169 | int 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 | |||
191 | int 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 | |||
239 | err_destroy: | ||
240 | if (msgctl(msgque.msq_id, IPC_RMID, 0)) { | ||
241 | printf("Failed to destroy queue: %d\n", -errno); | ||
242 | return -errno; | ||
243 | } | ||
244 | err_out: | ||
245 | return err; | ||
246 | } | ||