trust validation.
format: { id:<keyid> | builtin }
+ cca= [MIPS] Override the kernel pages' cache coherency
+ algorithm. Accepted values range from 0 to 7
+ inclusive. See arch/mips/include/asm/pgtable-bits.h
+ for platform specific values (SB1, Loongson3 and
+ others).
+
ccw_timeout_log [S390]
See Documentation/s390/CommonIO for details.
that can be changed at run time by the
set_graph_function file in the debugfs tracing directory.
+ ftrace_graph_notrace=[function-list]
+ [FTRACE] Do not trace from the functions specified in
+ function-list. This list is a comma separated list of
+ functions that can be changed at run time by the
+ set_graph_notrace file in the debugfs tracing directory.
+
gamecon.map[2|3]=
[HW,JOY] Multisystem joystick and NES/SNES/PSX pad
support via parallel port (up to 5 devices per port)
Set number of hash buckets for inode cache.
ima_appraise= [IMA] appraise integrity measurements
- Format: { "off" | "enforce" | "fix" }
+ Format: { "off" | "enforce" | "fix" | "log" }
default: "enforce"
ima_appraise_tcb [IMA]
ip= [IP_PNP]
See Documentation/filesystems/nfs/nfsroot.txt.
- ip2= [HW] Set IO/IRQ pairs for up to 4 IntelliPort boards
- See comment before ip2_setup() in
- drivers/char/ip2/ip2base.c.
-
irqfixup [HW]
When an interrupt is not handled search all handlers
for it. Intended to get systems with badly broken
7 (KERN_DEBUG) debug-level messages
log_buf_len=n[KMG] Sets the size of the printk ring buffer,
- in bytes. n must be a power of two. The default
- size is set in the kernel config file.
+ in bytes. n must be a power of two and greater
+ than the minimal size. The minimal size is defined
+ by LOG_BUF_SHIFT kernel config parameter. There is
+ also CONFIG_LOG_CPU_MAX_BUF_SHIFT config parameter
+ that allows to increase the default size depending on
+ the number of CPUs. See init/Kconfig for more details.
logo.nologo [FB] Disables display of the built-in Linux logo.
This may be used to provide more screen space for
and restore using xsave. The kernel will fallback to
enabling legacy floating-point and sse state.
+ noxsaveopt [X86] Disables xsaveopt used in saving x86 extended
+ register states. The kernel will fall back to use
+ xsave to save the states. By using this parameter,
+ performance of saving the states is degraded because
+ xsave doesn't support modified optimization while
+ xsaveopt supports it on xsaveopt enabled systems.
+
+ noxsaves [X86] Disables xsaves and xrstors used in saving and
+ restoring x86 extended register state in compacted
+ form of xsave area. The kernel will fall back to use
+ xsaveopt and xrstor to save and restore the states
+ in standard form of xsave area. By using this
+ parameter, xsave area per process might occupy more
+ memory on xsaves enabled systems.
+
eagerfpu= [X86]
on enable eager fpu restore
off disable eager fpu restore
quiescent states. Units are jiffies, minimum
value is one, and maximum value is HZ.
+ rcutree.rcu_nocb_leader_stride= [KNL]
+ Set the number of NOCB kthread groups, which
+ defaults to the square root of the number of
+ CPUs. Larger numbers reduces the wakeup overhead
+ on the per-CPU grace-period kthreads, but increases
+ that same overhead on each group's leader.
+
rcutree.qhimark= [KNL]
Set threshold of queued RCU callbacks beyond which
batch limiting is disabled.
S [KNL] Run init in single mode
+ s390_iommu= [HW,S390]
+ Set s390 IOTLB flushing mode
+ strict
+ With strict flushing every unmap operation will result in
+ an IOTLB flush. Default is lazy flushing before reuse,
+ which is faster.
+
sa1100ir [NET]
See drivers/net/irda/sa1100_ir.c.
bogus residue values);
s = SINGLE_LUN (the device has only one
Logical Unit);
+ u = IGNORE_UAS (don't bind to the uas driver);
w = NO_WP_DETECT (don't test whether the
medium is write-protected).
Example: quirks=0419:aaf5:rl,0421:0433:rc
Disables the ticketlock slowpath using Xen PV
optimizations.
+ xen_nopv [X86]
+ Disables the PV optimizations forcing the HVM guest to
+ run as generic HVM guest with no PV drivers.
+
xirc2ps_cs= [NET,PCMCIA]
Format:
<irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
P: Person (obsolete)
M: Mail patches to: FullName <address@domain>
+ R: Designated reviewer: FullName <address@domain>
+ These reviewers should be CCed on patches.
L: Mailing list that is relevant to this area
W: Web-page with status/info
Q: Patchwork web based patch tracking system site
S: Maintained
F: drivers/scsi/53c700*
+ 6LOWPAN GENERIC (BTLE/IEEE 802.15.4)
+ S: Maintained
+ F: net/6lowpan/
+ F: include/net/6lowpan.h
+
6PACK NETWORK DRIVER FOR AX.25
F: fs/aio.c
F: include/linux/*aio*.h
+ AIRSPY MEDIA DRIVER
+ W: http://linuxtv.org/
+ W: http://palosaari.fi/linux/
+ Q: http://patchwork.linuxtv.org/project/linux-media/list/
+ T: git git://linuxtv.org/anttip/media_tree.git
+ S: Maintained
+ F: drivers/media/usb/airspy/
+
ALCATEL SPEEDTOUCH USB DRIVER
S: Supported
- F: drivers/usb/gadget/amd5536udc.*
+ F: drivers/usb/gadget/udc/amd5536udc.*
AMD GEODE PROCESSOR/CHIPSET SUPPORT
S: Supported
F: drivers/char/hw_random/geode-rng.c
F: drivers/crypto/geode*
- F: drivers/video/geode/
+ F: drivers/video/fbdev/geode/
F: arch/x86/include/asm/geode.h
AMD IOMMU (AMD-VI)
S: Maintained
- F: arch/x86/kernel/microcode_amd.c
+ F: arch/x86/kernel/cpu/microcode/amd*
AMD XGBE DRIVER
F: drivers/net/appletalk/
F: net/appletalk/
+ APPLIED MICRO (APM) X-GENE SOC ETHERNET DRIVER
+ S: Supported
+ F: drivers/net/ethernet/apm/xgene/
+ F: Documentation/devicetree/bindings/net/apm-xgene-enet.txt
+
APTINA CAMERA SENSOR PLL
ARC FRAMEBUFFER DRIVER
S: Maintained
- F: drivers/video/arcfb.c
- F: drivers/video/fb_defio.c
+ F: drivers/video/fbdev/arcfb.c
+ F: drivers/video/fbdev/core/fb_defio.c
ARM MFM AND FLOPPY DRIVERS
ARM PRIMECELL CLCD PL110 DRIVER
S: Maintained
- F: drivers/video/amba-clcd.*
+ F: drivers/video/fbdev/amba-clcd.*
ARM PRIMECELL KMI PL050 DRIVER
T: git git://git.kernel.org/pub/scm/linux/kernel/git/baohua/linux.git
S: Maintained
F: arch/arm/mach-prima2/
- F: drivers/clk/clk-prima2.c
+ F: drivers/clk/sirf/
F: drivers/clocksource/timer-prima2.c
F: drivers/clocksource/timer-marco.c
N: [^a-z]sirf
F: arch/arm/mach-pxa/include/mach/hx4700.h
F: sound/soc/pxa/hx4700.c
+ ARM/HISILICON SOC SUPPORT
+ W: http://www.hisilicon.com
+ S: Supported
+ T: git git://github.com/hisilicon/linux-hisi.git
+ F: arch/arm/mach-hisi/
+
ARM/HP JORNADA 7XX MACHINE SUPPORT
W: www.jlime.com
S: Maintained
F: arch/arm/mach-berlin/
- ARM/Marvell Dove/Kirkwood/MV78xx0/Orion SOC support
+ ARM/Marvell Dove/MV78xx0/Orion SOC support
S: Maintained
F: arch/arm/mach-dove/
- F: arch/arm/mach-kirkwood/
F: arch/arm/mach-mv78xx0/
F: arch/arm/mach-orion5x/
F: arch/arm/plat-orion/
S: Maintained
F: arch/arm/mach-nomadik/
+ F: drivers/pinctrl/nomadik/
F: drivers/i2c/busses/i2c-nomadik.c
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-nomadik.git
F: arch/arm/mach-msm/
- F: drivers/video/msm/
+ F: drivers/video/fbdev/msm/
F: drivers/mmc/host/msm_sdcc.c
F: drivers/mmc/host/msm_sdcc.h
F: drivers/tty/serial/msm_serial.h
F: drivers/tty/serial/msm_serial.c
F: drivers/*/pm8???-*
- F: drivers/mfd/ssbi/
- F: include/linux/mfd/pm8xxx/
+ F: drivers/mfd/ssbi.c
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davidb/linux-msm.git
S: Maintained
ARM/Rockchip SoC support
S: Maintained
+ F: arch/arm/boot/dts/rk3*
F: arch/arm/mach-rockchip/
+ F: drivers/clk/rockchip/
+ F: drivers/i2c/busses/i2c-rk3x.c
F: drivers/*/*rockchip*
+ F: drivers/*/*/*rockchip*
+ F: sound/soc/rockchip/
ARM/SAMSUNG ARM ARCHITECTURES
F: drivers/media/rc/st_rc.c
F: drivers/i2c/busses/i2c-st.c
F: drivers/tty/serial/st-asc.c
+ F: drivers/mmc/host/sdhci-st.c
ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
F: drivers/rtc/rtc-nuc900.c
F: drivers/spi/spi-nuc900.c
F: drivers/usb/host/ehci-w90x900.c
- F: drivers/video/nuc900fb.c
+ F: drivers/video/fbdev/nuc900fb.c
ARM/U300 MACHINE SUPPORT
F: drivers/mfd/ab8500*
F: drivers/mfd/dbx500*
F: drivers/mfd/db8500*
- F: drivers/pinctrl/pinctrl-nomadik*
+ F: drivers/pinctrl/nomadik/pinctrl-ab*
+ F: drivers/pinctrl/nomadik/pinctrl-nomadik*
F: drivers/rtc/rtc-ab8500.c
F: drivers/rtc/rtc-pl031.c
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
F: drivers/tty/serial/vt8500_serial.c
F: drivers/usb/host/ehci-platform.c
F: drivers/usb/host/uhci-platform.c
- F: drivers/video/vt8500lcdfb.*
- F: drivers/video/wm8505fb*
- F: drivers/video/wmt_ge_rops.*
+ F: drivers/video/fbdev/vt8500lcdfb.*
+ F: drivers/video/fbdev/wm8505fb*
+ F: drivers/video/fbdev/wmt_ge_rops.*
ARM/ZIPIT Z2 SUPPORT
S: Supported
F: drivers/tty/serial/atmel_serial.c
+ ATMEL Audio ALSA driver
+ S: Supported
+ F: sound/soc/atmel
+
ATMEL DMA DRIVER
S: Maintained
- F: drivers/video/atmel_lcdfb.c
+ F: drivers/video/fbdev/atmel_lcdfb.c
F: include/video/atmel_lcdc.h
ATMEL MACB ETHERNET DRIVER
S: Supported
- F: drivers/usb/gadget/atmel_usba_udc.*
+ F: drivers/usb/gadget/udc/atmel_usba_udc.*
ATMEL WIRELESS DRIVER
S: Maintained:
F: drivers/md/bcache/
+ BECEEM BCS200/BCS220-3/BCSM250 WIMAX SUPPORT
+ S: Maintained
+ F: drivers/staging/bcm*
+
BEFS FILE SYSTEM
S: Orphan
F: Documentation/filesystems/befs.txt
F: fs/befs/
+ BECKHOFF CX5020 ETHERCAT MASTER DRIVER
+ S: Maintained
+ F: drivers/net/ethernet/ec_bhf.c
+
BFS FILE SYSTEM
S: Maintained
F: drivers/net/bonding/
F: include/uapi/linux/if_bonding.h
+ BPF (Safe dynamic programs and tools)
+ S: Supported
+ F: kernel/bpf/
+
BROADCOM B44 10/100 ETHERNET DRIVER
F: drivers/net/ethernet/broadcom/genet/
BROADCOM BNX2 GIGABIT ETHERNET DRIVER
S: Supported
F: drivers/net/ethernet/broadcom/bnx2.*
F: arch/arm/boot/dts/bcm216*
F: arch/arm/boot/dts/bcm281*
F: arch/arm/configs/bcm_defconfig
- F: drivers/mmc/host/sdhci_bcm_kona.c
+ F: drivers/mmc/host/sdhci-bcm-kona.c
F: drivers/clocksource/bcm_kona_timer.c
BROADCOM BCM2835 ARM ARCHICTURE
F: arch/arm/boot/dts/bcm5301x.dtsi
F: arch/arm/boot/dts/bcm470*
+ BROADCOM BCM7XXX ARM ARCHITECTURE
+ S: Maintained
+ F: arch/arm/mach-bcm/*brcmstb*
+ F: arch/arm/boot/dts/bcm7*.dts*
+
BROADCOM TG3 GIGABIT ETHERNET DRIVER
- M: Nithin Nayak Sujir <nsujir@broadcom.com>
+ M: Prashant Sreedharan <prashant@broadcom.com>
S: Supported
F: drivers/net/wireless/brcm80211/
BROADCOM BNX2FC 10 GIGABIT FCOE DRIVER
S: Supported
F: drivers/scsi/bnx2fc/
BROADCOM BNX2I 1/10 GIGABIT iSCSI DRIVER
S: Supported
F: drivers/scsi/bnx2i/
BROADCOM KONA GPIO DRIVER
S: Supported
F: drivers/gpio/gpio-bcm-kona.c
F: drivers/scsi/bfa/
BROCADE BNA 10 GIGABIT ETHERNET DRIVER
- M: Rasesh Mody <rmody@brocade.com>
+ M: Rasesh Mody <rasesh.mody@qlogic.com>
S: Supported
F: drivers/net/ethernet/brocade/bna/
S: Maintained
F: drivers/net/ethernet/cirrus/ep93xx_eth.c
- CIRRUS LOGIC EP93XX OHCI USB HOST DRIVER
- S: Maintained
- F: drivers/usb/host/ohci-ep93xx.c
-
CIRRUS LOGIC AUDIO CODEC DRIVERS
Q: http://patchwork.ozlabs.org/project/linux-cifs-client/list/
T: git git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6.git
S: Supported
- F: Documentation/filesystems/cifs.txt
+ F: Documentation/filesystems/cifs/
F: fs/cifs/
COMPACTPCI HOTPLUG CORE
F: arch/x86/kernel/msr.c
CPU POWER MONITORING SUBSYSTEM
S: Maintained
F: tools/power/cpupower/
W: http://www.arm.linux.org.uk/
S: Maintained
- F: drivers/video/cyber2000fb.*
+ F: drivers/video/fbdev/cyber2000fb.*
CYCLADES ASYNC MUX DRIVER
W: http://www.cyclades.com/
DIGI EPCA PCI PRODUCTS
S: Maintained
F: drivers/staging/dgap/
S: Maintained
W: http://plugable.com/category/projects/udlfb/
- F: drivers/video/udlfb.c
+ F: drivers/video/fbdev/udlfb.c
F: include/video/udlfb.h
F: Documentation/fb/udlfb.txt
- F: drivers/base/dma-buf*
+ F: drivers/dma-buf/
F: include/linux/dma-buf*
+ F: include/linux/reservation.h
+ F: include/linux/*fence.h
F: Documentation/dma-buf-sharing.txt
T: git git://git.linaro.org/people/sumitsemwal/linux-dma-buf.git
F: drivers/acpi/dock.c
DOCUMENTATION
- T: quilt http://www.infradead.org/~rdunlap/Doc/patches/
S: Maintained
F: Documentation/
X: Documentation/ABI/
T: git git://people.freedesktop.org/~agd5f/linux
S: Supported
F: drivers/gpu/drm/radeon/
- F: include/drm/radeon*
F: include/uapi/drm/radeon*
DRM PANEL DRIVERS
F: include/uapi/drm/tegra_drm.h
F: Documentation/devicetree/bindings/gpu/nvidia,tegra20-host1x.txt
+ DRM DRIVERS FOR RENESAS
+ T: git git://people.freedesktop.org/~airlied/linux
+ S: Supported
+ F: drivers/gpu/drm/rcar-du/
+ F: drivers/gpu/drm/shmobile/
+ F: include/linux/platform_data/rcar-du.h
+ F: include/linux/platform_data/shmob_drm.h
+
DSBR100 USB FM RADIO DRIVER
S: Maintained
F: drivers/media/tuners/e4000*
- EATA-DMA SCSI DRIVER
- S: Maintained
- F: drivers/scsi/eata*
-
EATA ISA/EISA/PCI SCSI DRIVER
S: Maintained
F: drivers/scsi/eata.c
- EATA-PIO SCSI DRIVER
- S: Maintained
- F: drivers/scsi/eata_pio.*
-
EC100 MEDIA DRIVER
S: Maintained
F: drivers/edac/i82975x_edac.c
+ EDAC-IE31200
+ W: bluesmoke.sourceforge.net
+ S: Maintained
+ F: drivers/edac/ie31200_edac.c
+
EDAC-MPC85XX
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mfleming/efi.git
S: Maintained
- F: Documentation/x86/efi-stub.txt
+ F: Documentation/efi-stub.txt
F: arch/ia64/kernel/efi.c
F: arch/x86/boot/compressed/eboot.[ch]
F: arch/x86/include/asm/efi.h
S: Maintained
- F: drivers/video/efifb.c
+ F: drivers/video/fbdev/efifb.c
EFS FILESYSTEM
W: http://aeschi.ch.eu.org/efs/
S: Maintained
T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git
- F: drivers/video/s1d13xxxfb.c
+ F: drivers/video/fbdev/s1d13xxxfb.c
F: include/video/s1d13xxxfb.h
ETHERNET BRIDGE
S: Maintained
- F: drivers/video/exynos/exynos_mipi*
+ F: drivers/video/fbdev/exynos/exynos_mipi*
F: include/video/exynos_mipi*
F71805F HARDWARE MONITORING DRIVER
S: Maintained
- F: drivers/video/fsl-diu-fb.*
+ F: drivers/video/fbdev/fsl-diu-fb.*
FREESCALE DMA DRIVER
S: Maintained
F: include/linux/platform_data/video-imxfb.h
- F: drivers/video/imxfb.c
+ F: drivers/video/fbdev/imxfb.c
FREESCALE SOC FS_ENET DRIVER
S: Maintained
- F: drivers/usb/gadget/fsl*
+ F: drivers/usb/gadget/udc/fsl*
FREESCALE QUICC ENGINE UCC ETHERNET DRIVER
FREESCALE SOC SOUND DRIVERS
S: Maintained
F: sound/soc/fsl/fsl*
+ F: sound/soc/fsl/imx*
F: sound/soc/fsl/mpc8610_hpcd.c
FREEVXFS FILESYSTEM
F: drivers/isdn/gigaset/
F: include/uapi/linux/gigaset_dev.h
+ GO7007 MPEG CODEC
+ S: Maintained
+ F: drivers/media/usb/go7007/
+
GPIO SUBSYSTEM
S: Maintained
F: Documentation/gpio/
F: drivers/gpio/
- F: include/linux/gpio*
+ F: include/linux/gpio/
+ F: include/linux/gpio.h
F: include/asm-generic/gpio.h
GRE DEMULTIPLEXER DRIVER
W: http://drama.obuda.kando.hu/~fero/cgi-bin/hgafb.shtml
S: Maintained
- F: drivers/video/hgafb.c
+ F: drivers/video/fbdev/hgafb.c
HIBERNATION (aka Software Suspend, aka swsusp)
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
S: Maintained
F: Documentation/timers/
- F: kernel/hrtimer.c
+ F: kernel/time/hrtimer.c
F: kernel/time/clockevents.c
F: kernel/time/tick*.*
F: kernel/time/timer_*.c
F: drivers/input/serio/hyperv-keyboard.c
F: drivers/net/hyperv/
F: drivers/scsi/storvsc_drv.c
- F: drivers/video/hyperv_fb.c
+ F: drivers/video/fbdev/hyperv_fb.c
F: include/linux/hyperv.h
F: tools/hv/
F: include/uapi/linux/i2c.h
F: include/uapi/linux/i2c-*.h
+ I2C ACPI SUPPORT
+ S: Maintained
+
I2C-TAOS-EVM DRIVER
F: drivers/scsi/ibmvscsi/ibmvfc*
IBM ServeRAID RAID DRIVER
- P: Jack Hammer
- W: http://www.developer.ibm.com/welcome/netfinity/serveraid.html
- S: Supported
+ S: Orphan
F: drivers/scsi/ips.*
ICH LPC AND GPIO DRIVER
IMS TWINTURBO FRAMEBUFFER DRIVER
S: Orphan
- F: drivers/video/imsttfb.c
+ F: drivers/video/fbdev/imsttfb.c
INFINIBAND SUBSYSTEM
S: Maintained
F: Documentation/fb/intelfb.txt
- F: drivers/video/intelfb/
+ F: drivers/video/fbdev/intelfb/
INTEL 810/815 FRAMEBUFFER DRIVER
S: Maintained
- F: drivers/video/i810/
+ F: drivers/video/fbdev/i810/
INTEL MENLOW THERMAL DRIVER
INTEL IA32 MICROCODE UPDATE SUPPORT
S: Maintained
- F: arch/x86/kernel/microcode_core.c
- F: arch/x86/kernel/microcode_intel.c
+ F: arch/x86/kernel/cpu/microcode/core*
+ F: arch/x86/kernel/cpu/microcode/intel*
INTEL I/OAT DMA DRIVER
F: Documentation/hwmon/k8temp
F: drivers/hwmon/k8temp.c
- KTAP
- W: http://www.ktap.org
- S: Maintained
- F: drivers/staging/ktap/
-
KCONFIG
W: http://nfs.sourceforge.net/
S: Supported
F: fs/nfsd/
- F: include/linux/nfsd/
F: include/uapi/linux/nfsd/
F: fs/lockd/
F: fs/nfs_common/
LINUX FOR POWERPC (32-BIT AND 64-BIT)
W: http://www.penguinppc.org/
Q: http://patchwork.ozlabs.org/project/linuxppc-dev/list/
LINUX FOR POWERPC EMBEDDED MPC5XXX
- T: git git://git.denx.de/linux-2.6-agust.git
+ T: git git://git.denx.de/linux-denx-agust.git
S: Maintained
F: arch/powerpc/platforms/512x/
F: arch/powerpc/platforms/52xx/
LINUX FOR POWERPC EMBEDDED PPC8XX
W: http://www.penguinppc.org/
S: Maintained
F: arch/powerpc/platforms/8xx/
LINUX FOR POWERPC EMBEDDED PPC83XX AND PPC85XX
W: http://www.penguinppc.org/
+ T: git git://git.kernel.org/pub/scm/linux/kernel/git/scottwood/linux.git
S: Maintained
F: arch/powerpc/platforms/83xx/
F: arch/powerpc/platforms/85xx/
F: include/net/mac80211.h
F: net/mac80211/
- MAC80211 PID RATE CONTROL
- W: http://wireless.kernel.org/en/developers/Documentation/mac80211/RateControl/PID
- T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
- T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
- S: Maintained
- F: net/mac80211/rc80211_pid*
-
MACVLAN DRIVER
F: drivers/net/ethernet/marvell/mvneta.*
MARVELL MWIFIEX WIRELESS DRIVER
S: Maintained
F: drivers/net/wireless/mwifiex/
MATROX FRAMEBUFFER DRIVER
S: Orphan
- F: drivers/video/matrox/matroxfb_*
+ F: drivers/video/fbdev/matrox/matroxfb_*
F: include/uapi/linux/matroxfb.h
MAX16065 HARDWARE MONITOR DRIVER
F: drivers/irqchip/irq-metag.c
F: drivers/irqchip/irq-metag-ext.c
F: drivers/tty/metag_da.c
- F: fs/imgdafs/
MICROBLAZE ARCHITECTURE
S: Maintained
F: drivers/media/radio/radio-mr800.c
+ MRF24J40 IEEE 802.15.4 RADIO DRIVER
+ S: Maintained
+ F: drivers/net/ieee802154/mrf24j40.c
+
MSI LAPTOP SUPPORT
Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git
S: Maintained
- F: drivers/staging/media/msi3101/msi001*
+ F: drivers/media/tuners/msi001*
- MSI3101 MEDIA DRIVER
+ MSI2500 MEDIA DRIVER
W: http://linuxtv.org/
Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git
S: Maintained
- F: drivers/staging/media/msi3101/sdr-msi3101*
+ F: drivers/media/usb/msi2500/
MT9M032 APTINA SENSOR DRIVER
MULTIFUNCTION DEVICES (MFD)
- T: git git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-next.git
- T: git git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-fixes.git
+ T: git git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git
S: Supported
F: drivers/mfd/
F: include/linux/mfd/
F: drivers/scsi/nsp32*
NTB DRIVER
S: Supported
W: https://github.com/jonmason/ntb/wiki
T: git git://github.com/jonmason/ntb.git
S: Maintained
- F: drivers/video/riva/
- F: drivers/video/nvidia/
+ F: drivers/video/fbdev/riva/
+ F: drivers/video/fbdev/nvidia/
NVM EXPRESS DRIVER
S: Maintained
- F: drivers/video/omap/
+ F: drivers/video/fbdev/omap/
OMAP DISPLAY SUBSYSTEM and FRAMEBUFFER SUPPORT (DSS2)
S: Maintained
- F: drivers/video/omap2/
+ F: drivers/video/fbdev/omap2/
F: Documentation/arm/OMAP/DSS
OMAP HARDWARE SPINLOCK SUPPORT
S: Maintained
F: arch/arm/mach-omap2/omap_hwmod_44xx_data.c
- OMAP IMAGE SIGNAL PROCESSOR (ISP)
+ OMAP IMAGING SUBSYSTEM (OMAP3 ISP and OMAP4 ISS)
S: Maintained
F: drivers/media/platform/omap3isp/
+ F: drivers/staging/media/omap4iss/
OMAP USB SUPPORT
F: drivers/input/serio/gscps2.c
F: drivers/parport/parport_gsc.*
F: drivers/tty/serial/8250/8250_gsc.c
- F: drivers/video/sti*
+ F: drivers/video/fbdev/sti*
F: drivers/video/console/sti*
F: drivers/video/logo/logo_parisc*
PCI DRIVER FOR IMX6
S: Maintained
F: Documentation/devicetree/bindings/pci/nvidia,tegra20-pcie.txt
F: drivers/pci/host/pci-tegra.c
+ PCI DRIVER FOR TI DRA7XX
+ S: Supported
+ F: Documentation/devicetree/bindings/pci/ti-pci.txt
+ F: drivers/pci/host/pci-dra7xx.c
+
PCI DRIVER FOR RENESAS R-CAR
F: Documentation/devicetree/bindings/pci/host-generic-pci.txt
F: drivers/pci/host/pci-host-generic.c
+ PCIE DRIVER FOR ST SPEAR13XX
+ S: Maintained
+ F: drivers/pci/host/*spear*
+
PCMCIA SUBSYSTEM
P: Linux PCMCIA Team
T: git git://github.com/jamieiles/linux-2.6-ji.git
S: Supported
+ F: arch/arm/boot/dts/picoxcell*
F: arch/arm/mach-picoxcell/
- F: drivers/*/picoxcell*
- F: drivers/*/*/picoxcell*
+ F: drivers/crypto/picoxcell*
PIN CONTROL SUBSYSTEM
F: drivers/pinctrl/sh-pfc/
PIN CONTROLLER - SAMSUNG
- M: Tomasz Figa <t.figa@samsung.com>
+ M: Tomasz Figa <tomasz.figa@gmail.com>
S: Maintained
- F: drivers/pinctrl/pinctrl-exynos.*
- F: drivers/pinctrl/pinctrl-s3c*
- F: drivers/pinctrl/pinctrl-samsung.*
+ F: drivers/pinctrl/samsung/
PIN CONTROLLER - ST SPEAR
T: git git://github.com/gxt/linux.git
F: drivers/input/serio/i8042-unicore32io.h
F: drivers/i2c/busses/i2c-puv3.c
- F: drivers/video/fb-puv3.c
+ F: drivers/video/fbdev/fb-puv3.c
F: drivers/rtc/rtc-puv3.c
PMBUS HARDWARE MONITORING DRIVERS
PMC SIERRA PM8001 DRIVER
S: Supported
F: drivers/scsi/pm8001/
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
- S: Supported
+ S: Maintained
F: fs/timerfd.c
F: include/linux/timer*
- F: kernel/*timer*
+ F: kernel/time/*timer*
POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS
T: git git://git.infradead.org/battery-2.6.git
S: Maintained
F: include/linux/power_supply.h
F: include/linux/ptp_cl*
PTRACE SUPPORT
- M: Roland McGrath <roland@redhat.com>
+ M: Roland McGrath <roland@hack.frob.com>
S: Maintained
F: include/asm-generic/syscall.h
F: arch/arm/mach-pxa/
F: drivers/pcmcia/pxa2xx*
F: drivers/spi/spi-pxa2xx*
- F: drivers/usb/gadget/pxa2*
+ F: drivers/usb/gadget/udc/pxa2*
F: include/sound/pxa2xx-lib.h
F: sound/arm/pxa*
F: sound/soc/pxa/
S: Maintained
- F: drivers/mtd/nand/pxa3xx-nand.c
+ F: drivers/mtd/nand/pxa3xx_nand.c
MMP SUPPORT
S: Maintained
+ QAT DRIVER
+ S: Supported
+ F: drivers/crypto/qat/
+
QIB DRIVER
S: Maintained
- F: drivers/video/aty/radeon*
+ F: drivers/video/fbdev/aty/radeon*
F: include/uapi/linux/radeonfb.h
RADIOSHARK RADIO DRIVER
S: Maintained
- F: drivers/video/aty/aty128fb.c
+ F: drivers/video/fbdev/aty/aty128fb.c
RALINK RT2X00 WIRELESS LAN DRIVER
P: rt2x00 project
S: Supported
T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
F: Documentation/RCU/torture.txt
- F: kernel/rcu/torture.c
+ F: kernel/rcu/rcutorture.c
RCUTORTURE TEST FRAMEWORK
S: Supported
T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
F: net/rds/
READ-COPY UPDATE (RCU)
W: http://www.rdrop.com/users/paulmck/RCU/
S: Supported
F: include/linux/rcu*
X: include/linux/srcu.h
F: kernel/rcu/
- X: kernel/rcu/torture.c
+ X: kernel/torture.c
REAL TIME CLOCK (RTC) SUBSYSTEM
F: include/linux/rtc.h
F: include/uapi/linux/rtc.h
+ REALTEK AUDIO CODECS
+ S: Maintained
+ F: sound/soc/codecs/rt*
+ F: include/sound/rt*.h
+
REISERFS FILE SYSTEM
S: Supported
Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git
S: Maintained
- F: drivers/staging/media/rtl2832u_sdr/rtl2832_sdr*
+ F: drivers/media/dvb-frontends/rtl2832_sdr*
RTL8180 WIRELESS DRIVER
S: Maintained
- F: drivers/video/savage/
+ F: drivers/video/fbdev/savage/
S390
S: Maintained
- F: drivers/video/s3c-fb.c
+ F: drivers/video/fbdev/s3c-fb.c
SAMSUNG MULTIFUNCTION DEVICE DRIVERS
F: drivers/media/i2c/s5k5baf.c
SAMSUNG SOC CLOCK DRIVERS
S: Supported
F: drivers/clk/samsung/
F: drivers/net/ethernet/samsung/sxgbe/
+ SAMSUNG USB2 PHY DRIVER
+ S: Supported
+ F: Documentation/devicetree/bindings/phy/samsung-phy.txt
+ F: Documentation/phy/samsung-usb2.txt
+ F: drivers/phy/phy-exynos4210-usb2.c
+ F: drivers/phy/phy-exynos4x12-usb2.c
+ F: drivers/phy/phy-exynos5250-usb2.c
+ F: drivers/phy/phy-s5pv210-usb2.c
+ F: drivers/phy/phy-samsung-usb2.c
+ F: drivers/phy/phy-samsung-usb2.h
+
SERIAL DRIVERS
F: include/linux/mmc/dw_mmc.h
F: drivers/mmc/host/dw_mmc*
+ THUNDERBOLT DRIVER
+ S: Maintained
+ F: drivers/thunderbolt/
+
TIMEKEEPING, CLOCKSOURCE CORE, NTP
SECURE COMPUTING
T: git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git seccomp
S: Supported
F: kernel/seccomp.c
W: http://www.winischhofer.net/linuxsisvga.shtml
S: Maintained
F: Documentation/fb/sisfb.txt
- F: drivers/video/sis/
+ F: drivers/video/fbdev/sis/
F: include/video/sisfb.h
SIS USB2VGA DRIVER
SLEEPABLE READ-COPY UPDATE (SRCU)
W: http://www.rdrop.com/users/paulmck/RCU/
S: Supported
S: Maintained
- F: drivers/video/smscufx.c
+ F: drivers/video/fbdev/smscufx.c
SOC-CAMERA V4L2 SUBSYSTEM
S: Maintained
F: drivers/leds/leds-net48xx.c
+ SOFTLOGIC 6x10 MPEG CODEC
+ S: Supported
+ F: drivers/media/pci/solo6x10/
+
SOFTWARE RAID (Multiple Disks) SUPPORT
S: Supported
F: drivers/staging/
- STAGING - AGERE HERMES II and II.5 WIRELESS DRIVERS
- S: Odd Fixes
- F: drivers/staging/wlags49_h2/
- F: drivers/staging/wlags49_h25/
-
- STAGING - ASUS OLED
- S: Odd Fixes
- F: drivers/staging/asus_oled/
-
STAGING - COMEDI
S: Odd Fixes
F: drivers/staging/comedi/
- STAGING - CRYSTAL HD VIDEO DECODER
- S: Odd Fixes
- F: drivers/staging/crystalhd/
-
- STAGING - ECHO CANCELLER
- S: Odd Fixes
- F: drivers/staging/echo/
-
STAGING - ET131X NETWORK DRIVER
S: Odd Fixes
S: Odd Fixes
F: drivers/staging/ft1000/
- STAGING - FRONTIER TRANZPORT AND ALPHATRACK
- S: Odd Fixes
- F: drivers/staging/frontier/
-
- STAGING - GO7007 MPEG CODEC
- S: Maintained
- F: drivers/staging/media/go7007/
-
STAGING - INDUSTRIAL IO
S: Maintained
F: drivers/staging/rtl8723au/
- STAGING - SILICON MOTION SM7XX FRAME BUFFER DRIVER
- S: Odd Fixes
- F: drivers/staging/sm7xxfb/
-
STAGING - SLICOSS
S: Odd Fixes
F: drivers/staging/slicoss/
- STAGING - SOFTLOGIC 6x10 MPEG CODEC
- S: Supported
- F: drivers/staging/media/solo6x10/
-
STAGING - SPEAKUP CONSOLE SPEECH DRIVER
- L: speakup@braille.uwo.ca
+ L: speakup@linux-speakup.org
W: http://www.linux-speakup.org/
S: Odd Fixes
F: drivers/staging/speakup/
- STAGING - TI DSP BRIDGE DRIVERS
- S: Odd Fixes
- F: drivers/staging/tidspbridge/
-
- STAGING - USB ENE SM/MS CARD READER DRIVER
- S: Odd Fixes
- F: drivers/staging/keucr/
-
STAGING - VIA VT665X DRIVERS
S: Odd Fixes
F: drivers/staging/vt665?/
- STAGING - WINBOND IS89C35 WLAN USB DRIVER
- S: Odd Fixes
- F: drivers/staging/winbond/
-
STAGING - XGI Z7,Z9,Z11 PCI DISPLAY DRIVER
S: Odd Fixes
S: Supported
F: drivers/thermal/ti-soc-thermal/
+ TI CLOCK DRIVER
+ S: Maintained
+ F: drivers/clk/ti/
+ F: include/linux/clk/ti.h
+
TI FLASH MEDIA INTERFACE DRIVER
S: Maintained
F: Documentation/usb/ohci.txt
F: drivers/usb/host/ohci*
+ USB OVER IP DRIVER
+ S: Maintained
+ F: drivers/usb/usbip/
+ F: tools/usb/usbip/
+
USB PEGASUS DRIVER
S: Maintained
F: drivers/net/usb/smsc95xx.*
- USB SN9C1xx DRIVER
- T: git git://linuxtv.org/media_tree.git
- W: http://www.linux-projects.org
- S: Maintained
- F: drivers/staging/media/sn9c102/
-
USB SUBSYSTEM
S: Maintained
- F: drivers/usb/gadget/*uvc*.c
- F: drivers/usb/gadget/webcam.c
+ F: drivers/usb/gadget/function/*uvc*.c
+ F: drivers/usb/gadget/legacy/webcam.c
USB WIRELESS RNDIS DRIVER (rndis_wlan)
W: http://dev.gentoo.org/~spock/projects/uvesafb/
S: Maintained
F: Documentation/fb/uvesafb.txt
- F: drivers/video/uvesafb.*
+ F: drivers/video/fbdev/uvesafb.*
VFAT/FAT/MSDOS FILESYSTEM
F: include/linux/via-core.h
F: include/linux/via-gpio.h
F: include/linux/via_i2c.h
- F: drivers/video/via/
+ F: drivers/video/fbdev/via/
VIA VELOCITY NETWORK DRIVER
S: Maintained
F: drivers/mmc/host/wbsd.*
+ WACOM PROTOCOL 4 SERIAL TABLETS
+ S: Maintained
+ F: drivers/input/tablet/wacom_serial4.c
+
WATCHDOG DEVICE DRIVERS
F: arch/x86/
X86 PLATFORM DRIVERS
- T: git git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platform-drivers-x86.git
+ T: git git://git.infradead.org/users/dvhart/linux-platform-drivers-x86.git
S: Maintained
F: drivers/platform/x86/
F: arch/x86/pci/*xen*
F: drivers/pci/*xen*
+ XEN BLOCK SUBSYSTEM
+ S: Supported
+ F: drivers/block/xen-blkback/*
+ F: drivers/block/xen*
+
XEN SWIOTLB SUBSYSTEM
#include <linux/device_cgroup.h>
#include <linux/fs_struct.h>
#include <linux/posix_acl.h>
+ #include <linux/hash.h>
#include <asm/uaccess.h>
#include "internal.h"
static __always_inline void set_root(struct nameidata *nd)
{
- if (!nd->root.mnt)
- get_fs_root(current->fs, &nd->root);
+ get_fs_root(current->fs, &nd->root);
}
static int link_path_walk(const char *, struct nameidata *);
- static __always_inline void set_root_rcu(struct nameidata *nd)
+ static __always_inline unsigned set_root_rcu(struct nameidata *nd)
{
- if (!nd->root.mnt) {
- struct fs_struct *fs = current->fs;
- unsigned seq;
+ struct fs_struct *fs = current->fs;
+ unsigned seq, res;
- do {
- seq = read_seqcount_begin(&fs->seq);
- nd->root = fs->root;
- nd->seq = __read_seqcount_begin(&nd->root.dentry->d_seq);
- } while (read_seqcount_retry(&fs->seq, seq));
- }
+ do {
+ seq = read_seqcount_begin(&fs->seq);
+ nd->root = fs->root;
+ res = __read_seqcount_begin(&nd->root.dentry->d_seq);
+ } while (read_seqcount_retry(&fs->seq, seq));
+ return res;
}
static void path_put_conditional(struct path *path, struct nameidata *nd)
return PTR_ERR(s);
}
if (*s == '/') {
- set_root(nd);
+ if (!nd->root.mnt)
+ set_root(nd);
path_put(&nd->path);
nd->path = nd->root;
path_get(&nd->root);
}
EXPORT_SYMBOL(follow_down_one);
- static inline bool managed_dentry_might_block(struct dentry *dentry)
+ static inline int managed_dentry_rcu(struct dentry *dentry)
{
- return (dentry->d_flags & DCACHE_MANAGE_TRANSIT &&
- dentry->d_op->d_manage(dentry, true) < 0);
+ return (dentry->d_flags & DCACHE_MANAGE_TRANSIT) ?
+ dentry->d_op->d_manage(dentry, true) : 0;
}
/*
* Don't forget we might have a non-mountpoint managed dentry
* that wants to block transit.
*/
- if (unlikely(managed_dentry_might_block(path->dentry)))
+ switch (managed_dentry_rcu(path->dentry)) {
+ case -ECHILD:
+ default:
return false;
+ case -EISDIR:
+ return true;
+ case 0:
+ break;
+ }
if (!d_mountpoint(path->dentry))
- return true;
+ return !(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT);
mounted = __lookup_mnt(path->mnt, path->dentry);
if (!mounted)
*/
*inode = path->dentry->d_inode;
}
- return read_seqretry(&mount_lock, nd->m_seq);
+ return !read_seqretry(&mount_lock, nd->m_seq) &&
+ !(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT);
}
static int follow_dotdot_rcu(struct nameidata *nd)
{
- set_root_rcu(nd);
+ struct inode *inode = nd->inode;
+ if (!nd->root.mnt)
+ set_root_rcu(nd);
while (1) {
if (nd->path.dentry == nd->root.dentry &&
struct dentry *parent = old->d_parent;
unsigned seq;
+ inode = parent->d_inode;
seq = read_seqcount_begin(&parent->d_seq);
if (read_seqcount_retry(&old->d_seq, nd->seq))
goto failed;
}
if (!follow_up_rcu(&nd->path))
break;
+ inode = nd->path.dentry->d_inode;
nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
}
while (d_mountpoint(nd->path.dentry)) {
break;
nd->path.mnt = &mounted->mnt;
nd->path.dentry = mounted->mnt.mnt_root;
+ inode = nd->path.dentry->d_inode;
nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
- if (!read_seqretry(&mount_lock, nd->m_seq))
+ if (read_seqretry(&mount_lock, nd->m_seq))
goto failed;
}
- nd->inode = nd->path.dentry->d_inode;
+ nd->inode = inode;
return 0;
failed:
static void follow_dotdot(struct nameidata *nd)
{
- set_root(nd);
+ if (!nd->root.mnt)
+ set_root(nd);
while(1) {
struct dentry *old = nd->path.dentry;
}
path->mnt = mnt;
path->dentry = dentry;
- if (unlikely(!__follow_mount_rcu(nd, path, inode)))
- goto unlazy;
- if (unlikely(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT))
- goto unlazy;
- return 0;
+ if (likely(__follow_mount_rcu(nd, path, inode)))
+ return 0;
unlazy:
if (unlazy_walk(nd, dentry))
return -ECHILD;
static inline unsigned int fold_hash(unsigned long hash)
{
- hash += hash >> (8*sizeof(int));
- return hash;
+ return hash_64(hash, 32);
}
#else /* 32-bit case */
/*
* Calculate the length and hash of the path component, and
- * return the length of the component;
+ * return the "hash_len" as the result.
*/
- static inline unsigned long hash_name(const char *name, unsigned int *hashp)
+ static inline u64 hash_name(const char *name)
{
unsigned long a, b, adata, bdata, mask, hash, len;
const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;
mask = create_zero_mask(adata | bdata);
hash += a & zero_bytemask(mask);
- *hashp = fold_hash(hash);
-
- return len + find_zero(mask);
+ len += find_zero(mask);
+ return hashlen_create(fold_hash(hash), len);
}
#else
* We know there's a real path component here of at least
* one character.
*/
- static inline unsigned long hash_name(const char *name, unsigned int *hashp)
+ static inline u64 hash_name(const char *name)
{
unsigned long hash = init_name_hash();
unsigned long len = 0, c;
hash = partial_name_hash(c, hash);
c = (unsigned char)name[len];
} while (c && c != '/');
- *hashp = end_name_hash(hash);
- return len;
+ return hashlen_create(end_name_hash(hash), len);
}
#endif
/* At this point we know we have a real path component. */
for(;;) {
- struct qstr this;
- long len;
+ u64 hash_len;
int type;
err = may_lookup(nd);
if (err)
break;
- len = hash_name(name, &this.hash);
- this.name = name;
- this.len = len;
+ hash_len = hash_name(name);
type = LAST_NORM;
- if (name[0] == '.') switch (len) {
+ if (name[0] == '.') switch (hashlen_len(hash_len)) {
case 2:
if (name[1] == '.') {
type = LAST_DOTDOT;
struct dentry *parent = nd->path.dentry;
nd->flags &= ~LOOKUP_JUMPED;
if (unlikely(parent->d_flags & DCACHE_OP_HASH)) {
+ struct qstr this = { { .hash_len = hash_len }, .name = name };
err = parent->d_op->d_hash(parent, &this);
if (err < 0)
break;
+ hash_len = this.hash_len;
+ name = this.name;
}
}
- nd->last = this;
+ nd->last.hash_len = hash_len;
+ nd->last.name = name;
nd->last_type = type;
- if (!name[len])
+ name += hashlen_len(hash_len);
+ if (!*name)
return 0;
/*
* If it wasn't NUL, we know it was '/'. Skip that
* slash, and continue until no more slashes.
*/
do {
- len++;
- } while (unlikely(name[len] == '/'));
- if (!name[len])
+ name++;
+ } while (unlikely(*name == '/'));
+ if (!*name)
return 0;
- name += len;
-
err = walk_component(nd, &next, LOOKUP_FOLLOW);
if (err < 0)
return err;
if (*name=='/') {
if (flags & LOOKUP_RCU) {
rcu_read_lock();
- set_root_rcu(nd);
+ nd->seq = set_root_rcu(nd);
} else {
set_root(nd);
path_get(&nd->root);
}
nd->inode = nd->path.dentry->d_inode;
- return 0;
+ if (!(flags & LOOKUP_RCU))
+ return 0;
+ if (likely(!read_seqcount_retry(&nd->path.dentry->d_seq, nd->seq)))
+ return 0;
+ if (!(nd->flags & LOOKUP_ROOT))
+ nd->root.mnt = NULL;
+ rcu_read_unlock();
+ return -ECHILD;
}
static inline int lookup_last(struct nameidata *nd, struct path *path)
error = open_check_o_direct(file);
if (error)
goto exit_fput;
- error = ima_file_check(file, op->acc_mode);
+ error = ima_file_check(file, op->acc_mode, *opened);
if (error)
goto exit_fput;
* The worst of all namespace operations - renaming directory. "Perverted"
* doesn't even start to describe it. Somebody in UCB had a heck of a trip...
* Problems:
- * a) we can get into loop creation. Check is done in is_subdir().
+ * a) we can get into loop creation.
* b) race potential - two innocent renames can create a loop together.
* That's where 4.4 screws up. Current fix: serialization on
* sb->s_vfs_rename_mutex. We might be more accurate, but that's another
if (error)
return error;
- if (!old_dir->i_op->rename)
+ if (!old_dir->i_op->rename && !old_dir->i_op->rename2)
return -EPERM;
if (flags && !old_dir->i_op->rename2)
if (error)
goto out;
}
- if (!flags) {
+ if (!old_dir->i_op->rename2) {
error = old_dir->i_op->rename(old_dir, old_dentry,
new_dir, new_dentry);
} else {
+ WARN_ON(old_dir->i_op->rename != NULL);
error = old_dir->i_op->rename2(old_dir, old_dentry,
new_dir, new_dentry, flags);
}
dprintk("nfsd: nfsd_lookup(fh %s, %.*s)\n", SVCFH_fmt(fhp), len,name);
dparent = fhp->fh_dentry;
- exp = fhp->fh_export;
- exp_get(exp);
+ exp = exp_get(fhp->fh_export);
/* Lookup the name, but don't follow links */
if (isdotent(name, len)) {
if (size_change)
put_write_access(inode);
if (!err)
- commit_metadata(fhp);
+ err = nfserrno(commit_metadata(fhp));
out:
return err;
}
host_err = PTR_ERR(*filp);
*filp = NULL;
} else {
- host_err = ima_file_check(*filp, may_flags);
+ host_err = ima_file_check(*filp, may_flags, 0);
if (may_flags & NFSD_MAY_64BIT_COOKIE)
(*filp)->f_mode |= FMODE_64BITHASH;
return __splice_from_pipe(pipe, sd, nfsd_splice_actor);
}
- __be32 nfsd_finish_read(struct file *file, unsigned long *count, int host_err)
+ static __be32
+ nfsd_finish_read(struct file *file, unsigned long *count, int host_err)
{
if (host_err >= 0) {
nfsdstats.io_read += host_err;
return nfserrno(host_err);
}
- int nfsd_splice_read(struct svc_rqst *rqstp,
+ __be32 nfsd_splice_read(struct svc_rqst *rqstp,
struct file *file, loff_t offset, unsigned long *count)
{
struct splice_desc sd = {
return nfsd_finish_read(file, count, host_err);
}
- int nfsd_readv(struct file *file, loff_t offset, struct kvec *vec, int vlen,
+ __be32 nfsd_readv(struct file *file, loff_t offset, struct kvec *vec, int vlen,
unsigned long *count)
{
mm_segment_t oldfs;
iap->ia_valid &= ~(ATTR_UID|ATTR_GID);
if (iap->ia_valid)
return nfsd_setattr(rqstp, resfhp, iap, 0, (time_t)0);
- return 0;
+ /* Callers expect file metadata to be committed here */
+ return nfserrno(commit_metadata(resfhp));
}
/* HPUX client sometimes creates a file in mode 000, and sets size to 0.
err = nfsd_create_setattr(rqstp, resfhp, iap);
/*
- * nfsd_setattr already committed the child. Transactional filesystems
- * had a chance to commit changes for both parent and child
- * simultaneously making the following commit_metadata a noop.
+ * nfsd_create_setattr already committed the child. Transactional
+ * filesystems had a chance to commit changes for both parent and
+ * child * simultaneously making the following commit_metadata a
+ * noop.
*/
err2 = nfserrno(commit_metadata(fhp));
if (err2)
err = nfsd_create_setattr(rqstp, resfhp, iap);
/*
- * nfsd_setattr already committed the child (and possibly also the parent).
+ * nfsd_create_setattr already committed the child
+ * (and possibly also the parent).
*/
if (!err)
err = nfserrno(commit_metadata(fhp));
__be32
nfsd_symlink(struct svc_rqst *rqstp, struct svc_fh *fhp,
char *fname, int flen,
- char *path, int plen,
- struct svc_fh *resfhp,
- struct iattr *iap)
+ char *path,
+ struct svc_fh *resfhp)
{
struct dentry *dentry, *dnew;
__be32 err, cerr;
int host_err;
err = nfserr_noent;
- if (!flen || !plen)
+ if (!flen || path[0] == '\0')
goto out;
err = nfserr_exist;
if (isdotent(fname, flen))
if (IS_ERR(dnew))
goto out_nfserr;
- if (unlikely(path[plen] != 0)) {
- char *path_alloced = kmalloc(plen+1, GFP_KERNEL);
- if (path_alloced == NULL)
- host_err = -ENOMEM;
- else {
- strncpy(path_alloced, path, plen);
- path_alloced[plen] = 0;
- host_err = vfs_symlink(dentry->d_inode, dnew, path_alloced);
- kfree(path_alloced);
- }
- } else
- host_err = vfs_symlink(dentry->d_inode, dnew, path);
+ host_err = vfs_symlink(dentry->d_inode, dnew, path);
err = nfserrno(host_err);
if (!err)
err = nfserrno(commit_metadata(fhp));
if (raparm_hash[0].pb_head)
return 0;
nperbucket = DIV_ROUND_UP(cache_size, RAPARM_HASH_SIZE);
- if (nperbucket < 2)
- nperbucket = 2;
+ nperbucket = max(2, nperbucket);
cache_size = nperbucket * RAPARM_HASH_SIZE;
dprintk("nfsd: allocating %d readahead buffers.\n", cache_size);
#define TAINT_FIRMWARE_WORKAROUND 11
#define TAINT_OOT_MODULE 12
#define TAINT_UNSIGNED_MODULE 13
+ #define TAINT_SOFTLOCKUP 14
extern const char hex_asc[];
#define hex_asc_lo(x) hex_asc[((x) & 0x0f)]
return buf;
}
- static inline char * __deprecated pack_hex_byte(char *buf, u8 byte)
- {
- return hex_byte_pack(buf, byte);
- }
-
extern int hex_to_bin(char ch);
extern int __must_check hex2bin(u8 *dst, const char *src, size_t count);
+extern char *bin2hex(char *dst, const void *src, size_t count);
- int mac_pton(const char *s, u8 *mac);
+ bool mac_pton(const char *s, u8 *mac);
/*
* General tracing related utility functions - trace_printk(),
/* User perms >= group perms >= other perms */ \
BUILD_BUG_ON_ZERO(((perms) >> 6) < (((perms) >> 3) & 7)) + \
BUILD_BUG_ON_ZERO((((perms) >> 3) & 7) < ((perms) & 7)) + \
+ /* Other writable? Generally considered a bad idea. */ \
+ BUILD_BUG_ON_ZERO((perms) & 2) + \
(perms))
#endif
.preparse = rxrpc_preparse,
.free_preparse = rxrpc_free_preparse,
.instantiate = generic_key_instantiate,
- .match = user_match,
.destroy = rxrpc_destroy,
.describe = rxrpc_describe,
.read = rxrpc_read,
.preparse = rxrpc_preparse_s,
.free_preparse = rxrpc_free_preparse_s,
.instantiate = generic_key_instantiate,
- .match = user_match,
.destroy = rxrpc_destroy_s,
.describe = rxrpc_describe,
};
n_elem = ntohl(*xdr++);
toklen -= 4;
- if (n_elem < 0 || n_elem > max_n_elem)
+ if (n_elem > max_n_elem)
return -EINVAL;
*_n_elem = n_elem;
if (n_elem > 0) {
if (copy_to_user(xdr, (s), _l) != 0) \
goto fault; \
if (_l & 3 && \
- copy_to_user((u8 *)xdr + _l, &zero, 4 - (_l & 3)) != 0) \
+ copy_to_user((u8 __user *)xdr + _l, &zero, 4 - (_l & 3)) != 0) \
goto fault; \
xdr += (_l + 3) >> 2; \
} while(0)
struct rb_root key_user_tree; /* tree of quota records indexed by UID */
DEFINE_SPINLOCK(key_user_lock);
- unsigned int key_quota_root_maxkeys = 200; /* root's key count quota */
- unsigned int key_quota_root_maxbytes = 20000; /* root's key space quota */
+ unsigned int key_quota_root_maxkeys = 1000000; /* root's key count quota */
+ unsigned int key_quota_root_maxbytes = 25000000; /* root's key space quota */
unsigned int key_quota_maxkeys = 200; /* general key count quota */
unsigned int key_quota_maxbytes = 20000; /* general key space quota */
}
key_ref = ERR_PTR(-EINVAL);
- if (!index_key.type->match || !index_key.type->instantiate ||
+ if (!index_key.type->instantiate ||
(!index_key.description && !index_key.type->preparse))
goto error_put_type;
#define key_negative_timeout 60 /* default timeout on a negative key's existence */
- /*
- * wait_on_bit() sleep function for uninterruptible waiting
- */
- static int key_wait_bit(void *flags)
- {
- schedule();
- return 0;
- }
-
- /*
- * wait_on_bit() sleep function for interruptible waiting
- */
- static int key_wait_bit_intr(void *flags)
- {
- schedule();
- return signal_pending(current) ? -ERESTARTSYS : 0;
- }
-
/**
* complete_request_key - Complete the construction of a key.
* @cons: The key construction record.
.index_key.type = type,
.index_key.description = description,
.cred = current_cred(),
- .match = type->match,
- .match_data = description,
- .flags = KEYRING_SEARCH_LOOKUP_DIRECT,
+ .match_data.cmp = key_default_cmp,
+ .match_data.raw_data = description,
+ .match_data.lookup_type = KEYRING_SEARCH_LOOKUP_DIRECT,
};
struct key *key;
key_ref_t key_ref;
ctx.index_key.type->name, ctx.index_key.description,
callout_info, callout_len, aux, dest_keyring, flags);
+ if (type->match_preparse) {
+ ret = type->match_preparse(&ctx.match_data);
+ if (ret < 0) {
+ key = ERR_PTR(ret);
+ goto error;
+ }
+ }
+
/* search all the process keyrings for a key */
key_ref = search_process_keyrings(&ctx);
if (ret < 0) {
key_put(key);
key = ERR_PTR(ret);
- goto error;
+ goto error_free;
}
}
} else if (PTR_ERR(key_ref) != -EAGAIN) {
* should consult userspace if we can */
key = ERR_PTR(-ENOKEY);
if (!callout_info)
- goto error;
+ goto error_free;
key = construct_key_and_link(&ctx, callout_info, callout_len,
aux, dest_keyring, flags);
}
+error_free:
+ if (type->match_free)
+ type->match_free(&ctx.match_data);
error:
kleave(" = %p", key);
return key;
int ret;
ret = wait_on_bit(&key->flags, KEY_FLAG_USER_CONSTRUCT,
- intr ? key_wait_bit_intr : key_wait_bit,
intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
- if (ret < 0)
- return ret;
+ if (ret)
+ return -ERESTARTSYS;
if (test_bit(KEY_FLAG_NEGATIVE, &key->flags)) {
smp_rmb();
return key->type_data.reject_error;
/**
* sel_netif_hashfn - Hashing function for the interface table
+ * @ns: the network namespace
* @ifindex: the network interface
*
* Description:
* bucket number for the given interface.
*
*/
-static inline u32 sel_netif_hashfn(int ifindex)
+static inline u32 sel_netif_hashfn(const struct net *ns, int ifindex)
{
- return (ifindex & (SEL_NETIF_HASH_SIZE - 1));
+ return (((uintptr_t)ns + ifindex) & (SEL_NETIF_HASH_SIZE - 1));
}
/**
* sel_netif_find - Search for an interface record
+ * @ns: the network namespace
* @ifindex: the network interface
*
* Description:
* If an entry can not be found in the table return NULL.
*
*/
-static inline struct sel_netif *sel_netif_find(int ifindex)
+static inline struct sel_netif *sel_netif_find(const struct net *ns,
+ int ifindex)
{
- int idx = sel_netif_hashfn(ifindex);
+ int idx = sel_netif_hashfn(ns, ifindex);
struct sel_netif *netif;
list_for_each_entry_rcu(netif, &sel_netif_hash[idx], list)
- /* all of the devices should normally fit in the hash, so we
- * optimize for that case */
- if (likely(netif->nsec.ifindex == ifindex))
+ if (net_eq(netif->nsec.ns, ns) &&
+ netif->nsec.ifindex == ifindex)
return netif;
return NULL;
if (sel_netif_total >= SEL_NETIF_HASH_MAX)
return -ENOSPC;
- idx = sel_netif_hashfn(netif->nsec.ifindex);
+ idx = sel_netif_hashfn(netif->nsec.ns, netif->nsec.ifindex);
list_add_rcu(&netif->list, &sel_netif_hash[idx]);
sel_netif_total++;
/**
* sel_netif_sid_slow - Lookup the SID of a network interface using the policy
+ * @ns: the network namespace
* @ifindex: the network interface
* @sid: interface SID
*
* failure.
*
*/
-static int sel_netif_sid_slow(int ifindex, u32 *sid)
+static int sel_netif_sid_slow(struct net *ns, int ifindex, u32 *sid)
{
int ret;
struct sel_netif *netif;
/* NOTE: we always use init's network namespace since we don't
* currently support containers */
- dev = dev_get_by_index(&init_net, ifindex);
+ dev = dev_get_by_index(ns, ifindex);
if (unlikely(dev == NULL)) {
printk(KERN_WARNING
"SELinux: failure in sel_netif_sid_slow(),"
}
spin_lock_bh(&sel_netif_lock);
- netif = sel_netif_find(ifindex);
+ netif = sel_netif_find(ns, ifindex);
if (netif != NULL) {
*sid = netif->nsec.sid;
ret = 0;
ret = security_netif_sid(dev->name, &new->nsec.sid);
if (ret != 0)
goto out;
+ new->nsec.ns = ns;
new->nsec.ifindex = ifindex;
ret = sel_netif_insert(new);
if (ret != 0)
/**
* sel_netif_sid - Lookup the SID of a network interface
+ * @ns: the network namespace
* @ifindex: the network interface
* @sid: interface SID
*
* on failure.
*
*/
-int sel_netif_sid(int ifindex, u32 *sid)
+int sel_netif_sid(struct net *ns, int ifindex, u32 *sid)
{
struct sel_netif *netif;
rcu_read_lock();
- netif = sel_netif_find(ifindex);
+ netif = sel_netif_find(ns, ifindex);
if (likely(netif != NULL)) {
*sid = netif->nsec.sid;
rcu_read_unlock();
}
rcu_read_unlock();
- return sel_netif_sid_slow(ifindex, sid);
+ return sel_netif_sid_slow(ns, ifindex, sid);
}
/**
* sel_netif_kill - Remove an entry from the network interface table
+ * @ns: the network namespace
* @ifindex: the network interface
*
* Description:
* table if it exists.
*
*/
-static void sel_netif_kill(int ifindex)
+static void sel_netif_kill(const struct net *ns, int ifindex)
{
struct sel_netif *netif;
rcu_read_lock();
spin_lock_bh(&sel_netif_lock);
- netif = sel_netif_find(ifindex);
+ netif = sel_netif_find(ns, ifindex);
if (netif)
sel_netif_destroy(netif);
spin_unlock_bh(&sel_netif_lock);
{
struct net_device *dev = netdev_notifier_info_to_dev(ptr);
- if (dev_net(dev) != &init_net)
- return NOTIFY_DONE;
-
if (event == NETDEV_DOWN)
- sel_netif_kill(dev->ifindex);
+ sel_netif_kill(dev_net(dev), dev->ifindex);
return NOTIFY_DONE;
}
static __init int sel_netif_init(void)
{
- int i, err;
+ int i;
if (!selinux_enabled)
return 0;
register_netdevice_notifier(&sel_netif_netdev_notifier);
- return err;
+ return 0;
}
__initcall(sel_netif_init);