[linux-next] LinuxNextTracking branch, master, updated. next-20130219

batman at open-mesh.org batman at open-mesh.org
Wed Feb 20 00:19:13 CET 2013


The following commit has been merged in the master branch:
commit 09485915a84f368e72f3af33704f7d7ca8905a57
Merge: 1ef33859507a2df902c59e9194e274c4da8fa3b3 8064b3cf750e71fdaf306abb4433a93d0f45f4c9
Author: Stephen Rothwell <sfr at canb.auug.org.au>
Date:   Tue Feb 19 12:02:31 2013 +1100

    Merge remote-tracking branch 'net-next/master'
    
    Conflicts:
    	arch/mips/include/uapi/asm/socket.h

diff --combined MAINTAINERS
index 7a7c5d6,5abc10e..d7b530b
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@@ -465,14 -465,6 +465,14 @@@ S:	Maintaine
  F:	drivers/scsi/aic7xxx/
  F:	drivers/scsi/aic7xxx_old/
  
 +AIMSLAB FM RADIO RECEIVER DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Maintained
 +F:	drivers/media/radio/radio-aimslab*
 +
  AIO
  M:	Benjamin LaHaise <bcrl at kvack.org>
  L:	linux-aio at kvack.org
@@@ -567,18 -559,6 +567,18 @@@ L:	linux-rdma at vger.kernel.or
  S:	Maintained
  F:	drivers/infiniband/hw/amso1100/
  
 +ANALOG DEVICES INC AD9389B DRIVER
 +M:	Hans Verkuil <hans.verkuil at cisco.com>
 +L:	linux-media at vger.kernel.org
 +S:	Maintained
 +F:	drivers/media/i2c/ad9389b*
 +
 +ANALOG DEVICES INC ADV7604 DRIVER
 +M:	Hans Verkuil <hans.verkuil at cisco.com>
 +L:	linux-media at vger.kernel.org
 +S:	Maintained
 +F:	drivers/media/i2c/adv7604*
 +
  ANALOG DEVICES INC ASOC CODEC DRIVERS
  M:	Lars-Peter Clausen <lars at metafoo.de>
  L:	device-drivers-devel at blackfin.uclinux.org
@@@ -690,16 -670,8 +690,16 @@@ F:	drivers/input/serio/ambakmi.
  F:	include/linux/amba/kmi.h
  
  ARM PRIMECELL MMCI PL180/1 DRIVER
 -S:	Orphan
 +M:	Russell King <linux at arm.linux.org.uk>
 +S:	Maintained
  F:	drivers/mmc/host/mmci.*
 +F:	include/linux/amba/mmci.h
 +
 +ARM PRIMECELL UART PL010 AND PL011 DRIVERS
 +M:	Russell King <linux at arm.linux.org.uk>
 +S:	Maintained
 +F:	drivers/tty/serial/amba-pl01*.c
 +F:	include/linux/amba/serial.h
  
  ARM PRIMECELL BUS SUPPORT
  M:	Russell King <linux at arm.linux.org.uk>
@@@ -1146,14 -1118,6 +1146,14 @@@ F:	arch/arm/mach-s5pv210/mach-goni.
  F:	arch/arm/mach-exynos/mach-universal_c210.c
  F:	arch/arm/mach-exynos/mach-nuri.c
  
 +ARM/SAMSUNG S5P SERIES 2D GRAPHICS ACCELERATION (G2D) SUPPORT
 +M:	Kyungmin Park <kyungmin.park at samsung.com>
 +M:	Kamil Debski <k.debski at samsung.com>
 +L:	linux-arm-kernel at lists.infradead.org
 +L:	linux-media at vger.kernel.org
 +S:	Maintained
 +F:	drivers/media/platform/s5p-g2d/
 +
  ARM/SAMSUNG S5P SERIES FIMC SUPPORT
  M:	Kyungmin Park <kyungmin.park at samsung.com>
  M:	Sylwester Nawrocki <s.nawrocki at samsung.com>
@@@ -1306,14 -1270,6 +1306,14 @@@ S:	Maintaine
  F:	arch/arm64/
  F:	Documentation/arm64/
  
 +AS3645A LED FLASH CONTROLLER DRIVER
 +M:	Laurent Pinchart <laurent.pinchart at ideasonboard.com>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +S:	Maintained
 +F:	drivers/media/i2c/as3645a.c
 +F:	include/media/as3645a.h
 +
  ASC7621 HARDWARE MONITOR DRIVER
  M:	George Joseph <george.joseph at fairview5.com>
  L:	lm-sensors at lm-sensors.org
@@@ -1347,7 -1303,7 +1347,7 @@@ F:	include/linux/dmaengine.
  F:	include/linux/async_tx.h
  
  AT24 EEPROM DRIVER
 -M:	Wolfram Sang <w.sang at pengutronix.de>
 +M:	Wolfram Sang <wsa at the-dreams.de>
  L:	linux-i2c at vger.kernel.org
  S:	Maintained
  F:	drivers/misc/eeprom/at24.c
@@@ -1561,14 -1517,6 +1561,14 @@@ T:	git git://linuxtv.org/media_tree.gi
  S:	Maintained
  F:	drivers/media/usb/dvb-usb-v2/az6007.c
  
 +AZTECH FM RADIO RECEIVER DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Maintained
 +F:	drivers/media/radio/radio-aztech*
 +
  B43 WIRELESS DRIVER
  M:	Stefano Brivio <stefano.brivio at polimi.it>
  L:	linux-wireless at vger.kernel.org
@@@ -1668,15 -1616,6 +1668,15 @@@ W:	http://blackfin.uclinux.org
  S:	Supported
  F:	drivers/i2c/busses/i2c-bfin-twi.c
  
 +BLACKFIN MEDIA DRIVER
 +M:	Scott Jiang <scott.jiang.linux at gmail.com>
 +L:	uclinux-dist-devel at blackfin.uclinux.org
 +W:	http://blackfin.uclinux.org/
 +S:	Supported
 +F:	drivers/media/platform/blackfin/
 +F:	drivers/media/i2c/adv7183*
 +F:	drivers/media/i2c/vs6624*
 +
  BLINKM RGB LED DRIVER
  M:	Jan-Simon Moeller <jansimon.moeller at gmx.de>
  S:	Maintained
@@@ -1786,8 -1725,7 +1786,8 @@@ F:	drivers/bcma
  F:	include/linux/bcma/
  
  BROCADE BFA FC SCSI DRIVER
 -M:	Krishna C Gudipati <kgudipat at brocade.com>
 +M:	Anil Gurumurthy <agurumur at brocade.com>
 +M:	Vijaya Mohan Guvva <vmohan at brocade.com>
  L:	linux-scsi at vger.kernel.org
  S:	Supported
  F:	drivers/scsi/bfa/
@@@ -1861,14 -1799,6 +1861,14 @@@ S:	Supporte
  F:	Documentation/filesystems/caching/cachefiles.txt
  F:	fs/cachefiles/
  
 +CADET FM/AM RADIO RECEIVER DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Maintained
 +F:	drivers/media/radio/radio-cadet*
 +
  CAFE CMOS INTEGRATED CAMERA CONTROLLER DRIVER
  M:	Jonathan Corbet <corbet at lwn.net>
  L:	linux-media at vger.kernel.org
@@@ -2060,8 -1990,8 +2060,8 @@@ S:	Maintaine
  F:	include/linux/clk.h
  
  CISCO FCOE HBA DRIVER
 -M:	Abhijeet Joglekar <abjoglek at cisco.com>
 -M:	Venkata Siva Vijayendra Bhamidipati <vbhamidi at cisco.com>
 +M:	Hiral Patel <hiralpat at cisco.com>
 +M:	Suma Ramars <sramars at cisco.com>
  M:	Brian Uchino <buchino at cisco.com>
  L:	linux-scsi at vger.kernel.org
  S:	Supported
@@@ -2269,15 -2199,6 +2269,15 @@@ F:	Documentation/video4linux/cx18.tx
  F:	drivers/media/pci/cx18/
  F:	include/uapi/linux/ivtv*
  
 +CX2341X MPEG ENCODER HELPER MODULE
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Maintained
 +F:	drivers/media/i2c/cx2341x*
 +F:	include/media/cx2341x*
 +
  CX88 VIDEO4LINUX DRIVER
  M:	Mauro Carvalho Chehab <mchehab at redhat.com>
  L:	linux-media at vger.kernel.org
@@@ -2655,13 -2576,6 +2655,13 @@@ S:	Maintaine
  F:	drivers/gpu/drm/tegra/
  F:	Documentation/devicetree/bindings/gpu/nvidia,tegra20-host1x.txt
  
 +DSBR100 USB FM RADIO DRIVER
 +M:	Alexey Klimov <klimov.linux at gmail.com>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +S:	Maintained
 +F:	drivers/media/radio/dsbr100.c
 +
  DSCC4 DRIVER
  M:	Francois Romieu <romieu at fr.zoreil.com>
  L:	netdev at vger.kernel.org
@@@ -3060,11 -2974,6 +3060,6 @@@ S:	Maintaine
  F:	include/linux/netfilter_bridge/
  F:	net/bridge/
  
- ETHERTEAM 16I DRIVER
- M:	Mika Kuoppala <miku at iki.fi>
- S:	Maintained
- F:	drivers/net/ethernet/fujitsu/eth16i.c
- 
  EXT2 FILE SYSTEM
  M:	Jan Kara <jack at suse.cz>
  L:	linux-ext4 at vger.kernel.org
@@@ -3433,14 -3342,6 +3428,14 @@@ W:	http://www.icp-vortex.com
  S:	Supported
  F:	drivers/scsi/gdt*
  
 +GEMTEK FM RADIO RECEIVER DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Maintained
 +F:	drivers/media/radio/radio-gemtek*
 +
  GENERIC GPIO I2C DRIVER
  M:	Haavard Skinnemoen <hskinnemoen at gmail.com>
  S:	Supported
@@@ -3844,13 -3745,6 +3839,13 @@@ F:	drivers/i2c/busses/i2c-sis96x.
  F:	drivers/i2c/busses/i2c-via.c
  F:	drivers/i2c/busses/i2c-viapro.c
  
 +I2C/SMBUS ISMT DRIVER
 +M:	Seth Heasley <seth.heasley at intel.com>
 +M:	Neil Horman <nhorman at tuxdriver.com>
 +L:	linux-i2c at vger.kernel.org
 +F:	drivers/i2c/busses/i2c-ismt.c
 +F:	Documentation/i2c/busses/i2c-ismt
 +
  I2C/SMBUS STUB DRIVER
  M:	"Mark M. Hoffman" <mhoffman at lightlink.com>
  L:	linux-i2c at vger.kernel.org
@@@ -3858,11 -3752,12 +3853,11 @@@ S:	Maintaine
  F:	drivers/i2c/i2c-stub.c
  
  I2C SUBSYSTEM
 -M:	Wolfram Sang <w.sang at pengutronix.de>
 +M:	Wolfram Sang <wsa at the-dreams.de>
  M:	"Ben Dooks (embedded platforms)" <ben-linux at fluff.org>
  L:	linux-i2c at vger.kernel.org
  W:	http://i2c.wiki.kernel.org/
 -T:	quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-i2c/
 -T:	git git://git.pengutronix.de/git/wsa/linux.git
 +T:	git git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git
  S:	Maintained
  F:	Documentation/i2c/
  F:	drivers/i2c/
@@@ -4333,14 -4228,6 +4328,14 @@@ F:	Documentation/isapnp.tx
  F:	drivers/pnp/isapnp/
  F:	include/linux/isapnp.h
  
 +ISA RADIO MODULE
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Maintained
 +F:	drivers/media/radio/radio-isa*
 +
  iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER
  M:	Peter Jones <pjones at redhat.com>
  M:	Konrad Rzeszutek Wilk <konrad at kernel.org>
@@@ -4499,14 -4386,6 +4494,14 @@@ W:	http://lse.sourceforge.net/kdump
  S:	Maintained
  F:	Documentation/kdump/
  
 +KEENE FM RADIO TRANSMITTER DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Maintained
 +F:	drivers/media/radio/radio-keene*
 +
  KERNEL AUTOMOUNTER v4 (AUTOFS4)
  M:	Ian Kent <raven at themaw.net>
  L:	autofs at vger.kernel.org
@@@ -4597,15 -4476,6 +4592,15 @@@ F:	arch/s390/include/asm/kvm
  F:	arch/s390/kvm/
  F:	drivers/s390/kvm/
  
 +KERNEL VIRTUAL MACHINE (KVM) FOR ARM
 +M:	Christoffer Dall <cdall at cs.columbia.edu>
 +L:	kvmarm at lists.cs.columbia.edu
 +W:	http://systems.cs.columbia.edu/projects/kvm-arm
 +S:	Maintained
 +F:	arch/arm/include/uapi/asm/kvm*
 +F:	arch/arm/include/asm/kvm*
 +F:	arch/arm/kvm/
 +
  KEXEC
  M:	Eric Biederman <ebiederm at xmission.com>
  W:	http://kernel.org/pub/linux/utils/kernel/kexec/
@@@ -4994,13 -4864,6 +4989,13 @@@ Q:	http://patchwork.linuxtv.org/project
  S:	Maintained
  F:	drivers/media/dvb-frontends/m88rs2000*
  
 +MA901 MASTERKIT USB FM RADIO DRIVER
 +M:      Alexey Klimov <klimov.linux at gmail.com>
 +L:      linux-media at vger.kernel.org
 +T:      git git://linuxtv.org/media_tree.git
 +S:      Maintained
 +F:      drivers/media/radio/radio-ma901.c
 +
  MAC80211
  M:	Johannes Berg <johannes at sipsolutions.net>
  L:	linux-wireless at vger.kernel.org
@@@ -5098,14 -4961,6 +5093,14 @@@ S:	Maintaine
  F:	Documentation/hwmon/max6650
  F:	drivers/hwmon/max6650.c
  
 +MAXIRADIO FM RADIO RECEIVER DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Maintained
 +F:	drivers/media/radio/radio-maxiradio*
 +
  MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
  M:	Mauro Carvalho Chehab <mchehab at redhat.com>
  P:	LinuxTV.org Project
@@@ -5128,14 -4983,6 +5123,14 @@@ F:	include/uapi/linux/meye.
  F:	include/uapi/linux/ivtv*
  F:	include/uapi/linux/uvcvideo.h
  
 +MEDIAVISION PRO MOVIE STUDIO DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Odd Fixes
 +F:	drivers/media/parport/pms*
 +
  MEGARAID SCSI DRIVERS
  M:	Neela Syam Kolli <megaraidlinux at lsi.com>
  L:	linux-scsi at vger.kernel.org
@@@ -5182,18 -5029,6 +5177,18 @@@ F:	drivers/mtd
  F:	include/linux/mtd/
  F:	include/uapi/mtd/
  
 +METAG ARCHITECTURE
 +M:	James Hogan <james.hogan at imgtec.com>
 +S:	Supported
 +F:	arch/metag/
 +F:	Documentation/metag/
 +F:	Documentation/devicetree/bindings/metag/
 +F:	drivers/clocksource/metag_generic.c
 +F:	drivers/irqchip/irq-metag.c
 +F:	drivers/irqchip/irq-metag-ext.c
 +F:	drivers/tty/metag_da.c
 +F:	fs/imgdafs/
 +
  MICROBLAZE ARCHITECTURE
  M:	Michal Simek <monstr at monstr.eu>
  L:	microblaze-uclinux at itee.uq.edu.au (moderated for non-subscribers)
@@@ -5217,14 -5052,6 +5212,14 @@@ S:	Supporte
  F:	Documentation/mips/
  F:	arch/mips/
  
 +MIROSOUND PCM20 FM RADIO RECEIVER DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Odd Fixes
 +F:	drivers/media/radio/radio-miropcm20*
 +
  MODULE SUPPORT
  M:	Rusty Russell <rusty at rustcorp.com.au>
  S:	Maintained
@@@ -5263,38 -5090,6 +5258,38 @@@ L:	platform-driver-x86 at vger.kernel.or
  S:	Supported
  F:	drivers/platform/x86/msi-wmi.c
  
 +MT9M032 SENSOR DRIVER
 +M:	Laurent Pinchart <laurent.pinchart at ideasonboard.com>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +S:	Maintained
 +F:	drivers/media/i2c/mt9m032.c
 +F:	include/media/mt9m032.h
 +
 +MT9P031 SENSOR DRIVER
 +M:	Laurent Pinchart <laurent.pinchart at ideasonboard.com>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +S:	Maintained
 +F:	drivers/media/i2c/mt9p031.c
 +F:	include/media/mt9p031.h
 +
 +MT9T001 SENSOR DRIVER
 +M:	Laurent Pinchart <laurent.pinchart at ideasonboard.com>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +S:	Maintained
 +F:	drivers/media/i2c/mt9t001.c
 +F:	include/media/mt9t001.h
 +
 +MT9V032 SENSOR DRIVER
 +M:	Laurent Pinchart <laurent.pinchart at ideasonboard.com>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +S:	Maintained
 +F:	drivers/media/i2c/mt9v032.c
 +F:	include/media/mt9v032.h
 +
  MULTIFUNCTION DEVICES (MFD)
  M:	Samuel Ortiz <sameo at linux.intel.com>
  T:	git git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6.git
@@@ -5569,13 -5364,6 +5564,6 @@@ F:	include/linux/sunrpc
  F:	include/uapi/linux/nfs*
  F:	include/uapi/linux/sunrpc/
  
- NI5010 NETWORK DRIVER
- M:	Jan-Pascal van Best <janpascal at vanbest.org>
- M:	Andreas Mohr <andi at lisas.de>
- L:	netdev at vger.kernel.org
- S:	Maintained
- F:	drivers/net/ethernet/racal/ni5010.*
- 
  NILFS2 FILESYSTEM
  M:	KONISHI Ryusuke <konishi.ryusuke at lab.ntt.co.jp>
  L:	linux-nilfs at vger.kernel.org
@@@ -5978,6 -5766,15 +5966,6 @@@ L:	linux-i2c at vger.kernel.or
  S:	Maintained
  F:	drivers/i2c/muxes/i2c-mux-pca9541.c
  
 -PCA9564/PCA9665 I2C BUS DRIVER
 -M:	Wolfram Sang <w.sang at pengutronix.de>
 -L:	linux-i2c at vger.kernel.org
 -S:	Maintained
 -F:	drivers/i2c/algos/i2c-algo-pca.c
 -F:	drivers/i2c/busses/i2c-pca-*
 -F:	include/linux/i2c-algo-pca.h
 -F:	include/linux/i2c-pca-platform.h
 -
  PCDP - PRIMARY CONSOLE AND DEBUG PORT
  M:	Khalid Aziz <khalid at gonehiking.org>
  S:	Maintained
@@@ -6446,14 -6243,6 +6434,14 @@@ L:	linux-hexagon at vger.kernel.or
  S:	Supported
  F:	arch/hexagon/
  
 +QUICKCAM PARALLEL PORT WEBCAMS
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Odd Fixes
 +F:	drivers/media/parport/*-qcam*
 +
  RADOS BLOCK DEVICE (RBD)
  M:	Yehuda Sadeh <yehuda at inktank.com>
  M:	Sage Weil <sage at inktank.com>
@@@ -6697,7 -6486,7 +6685,7 @@@ S:	Supporte
  F:	drivers/s390/net/
  
  S390 ZCRYPT DRIVER
 -M:	Holger Dengler <hd at linux.vnet.ibm.com>
 +M:	Ingo Tuchscherer <ingo.tuchscherer at de.ibm.com>
  M:	linux390 at de.ibm.com
  L:	linux-s390 at vger.kernel.org
  W:	http://www.ibm.com/developerworks/linux/linux390/
@@@ -6728,14 -6517,6 +6716,14 @@@ L:	linux-arm-kernel at lists.infradead.or
  S:	Supported
  F:	drivers/mmc/host/s3cmci.*
  
 +SAA6588 RDS RECEIVER DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Odd Fixes
 +F:	drivers/media/i2c/saa6588*
 +
  SAA7134 VIDEO4LINUX DRIVER
  M:	Mauro Carvalho Chehab <mchehab at redhat.com>
  L:	linux-media at vger.kernel.org
@@@ -6746,9 -6527,10 +6734,9 @@@ F:	Documentation/video4linux/saa7134
  F:	drivers/media/pci/saa7134/
  
  SAA7146 VIDEO4LINUX-2 DRIVER
 -M:	Michael Hunold <michael at mihu.de>
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
  L:	linux-media at vger.kernel.org
  T:	git git://linuxtv.org/media_tree.git
 -W:	http://www.mihu.de/linux/saa7146
  S:	Maintained
  F:	drivers/media/common/saa7146/
  F:	drivers/media/pci/saa7146/
@@@ -6790,13 -6572,6 +6778,13 @@@ S:	Maintaine
  F:	drivers/media/platform/s3c-camif/
  F:	include/media/s3c_camif.h
  
 +SAMSUNG S5C73M3 CAMERA DRIVER
 +M:	Kyungmin Park <kyungmin.park at samsung.com>
 +M:	Andrzej Hajda <a.hajda at samsung.com>
 +L:	linux-media at vger.kernel.org
 +S:	Supported
 +F:	drivers/media/i2c/s5c73m3/*
 +
  SERIAL DRIVERS
  M:	Greg Kroah-Hartman <gregkh at linuxfoundation.org>
  L:	linux-serial at vger.kernel.org
@@@ -7033,8 -6808,7 +7021,8 @@@ S:	Supporte
  F:	drivers/net/ethernet/sfc/
  
  SGI GRU DRIVER
 -M:	Jack Steiner <steiner at sgi.com>
 +M:	Dimitri Sivanich <sivanich at sgi.com>
 +M:	Robin Holt <holt at sgi.com>
  S:	Maintained
  F:	drivers/misc/sgi-gru/
  
@@@ -7058,38 -6832,6 +7046,38 @@@ M:	Robin Holt <holt at sgi.com
  S:	Maintained
  F:	drivers/misc/sgi-xp/
  
 +SI470X FM RADIO RECEIVER I2C DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Odd Fixes
 +F:	drivers/media/radio/si470x/radio-si470x-i2c.c
 +
 +SI470X FM RADIO RECEIVER USB DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Maintained
 +F:	drivers/media/radio/si470x/radio-si470x-common.c
 +F:	drivers/media/radio/si470x/radio-si470x.h
 +F:	drivers/media/radio/si470x/radio-si470x-usb.c
 +
 +SH_VEU V4L2 MEM2MEM DRIVER
 +M:	Guennadi Liakhovetski <g.liakhovetski at gmx.de>
 +L:	linux-media at vger.kernel.org
 +S:	Maintained
 +F:	drivers/media/platform/sh_veu.c
 +F:	include/media/sh_veu.h
 +
 +SH_VOU V4L2 OUTPUT DRIVER
 +M:	Guennadi Liakhovetski <g.liakhovetski at gmx.de>
 +L:	linux-media at vger.kernel.org
 +S:	Maintained
 +F:	drivers/media/platform/sh_vou.c
 +F:	include/media/sh_vou.h
 +
  SIMPLE FIRMWARE INTERFACE (SFI)
  M:	Len Brown <lenb at kernel.org>
  L:	sfi-devel at simplefirmware.org
@@@ -7261,6 -7003,14 +7249,6 @@@ L:	linux-fbdev at vger.kernel.or
  S:	Maintained
  F:	drivers/video/smscufx.c
  
 -SN-IA64 (Itanium) SUB-PLATFORM
 -M:	Jes Sorensen <jes at sgi.com>
 -L:	linux-altix at sgi.com
 -L:	linux-ia64 at vger.kernel.org
 -W:	http://www.sgi.com/altix
 -S:	Maintained
 -F:	arch/ia64/sn/
 -
  SOC-CAMERA V4L2 SUBSYSTEM
  M:	Guennadi Liakhovetski <g.liakhovetski at gmx.de>
  L:	linux-media at vger.kernel.org
@@@ -7656,12 -7406,6 +7644,12 @@@ F:	lib/swiotlb.
  F:	arch/*/kernel/pci-swiotlb.c
  F:	include/linux/swiotlb.h
  
 +SYNOPSYS ARC ARCHITECTURE
 +M:	Vineet Gupta <vgupta at synopsys.com>
 +L:	linux-snps-arc at vger.kernel.org
 +S:	Supported
 +F:	arch/arc/
 +
  SYSV FILESYSTEM
  M:	Christoph Hellwig <hch at infradead.org>
  S:	Maintained
@@@ -7763,14 -7507,6 +7751,14 @@@ T:	git git://linuxtv.org/mkrufky/tuners
  S:	Maintained
  F:	drivers/media/tuners/tda8290.*
  
 +TDA9840 MEDIA DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Maintained
 +F:	drivers/media/i2c/tda9840*
 +
  TEA5761 TUNER DRIVER
  M:	Mauro Carvalho Chehab <mchehab at redhat.com>
  L:	linux-media at vger.kernel.org
@@@ -7787,24 -7523,8 +7775,24 @@@ T:	git git://linuxtv.org/media_tree.gi
  S:	Maintained
  F:	drivers/media/tuners/tea5767.*
  
 +TEA6415C MEDIA DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Maintained
 +F:	drivers/media/i2c/tea6415c*
 +
 +TEA6420 MEDIA DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Maintained
 +F:	drivers/media/i2c/tea6420*
 +
  TEAM DRIVER
 -M:	Jiri Pirko <jpirko at redhat.com>
 +M:	Jiri Pirko <jiri at resnulli.us>
  L:	netdev at vger.kernel.org
  S:	Supported
  F:	drivers/net/team/
@@@ -8425,14 -8145,6 +8413,14 @@@ S:	Maintaine
  F:	drivers/media/usb/uvc/
  F:	include/uapi/linux/uvcvideo.h
  
 +USB VISION DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Odd Fixes
 +F:	drivers/media/usb/usbvision/
 +
  USB WEBCAM GADGET
  M:	Laurent Pinchart <laurent.pinchart at ideasonboard.com>
  L:	linux-usb at vger.kernel.org
@@@ -8582,14 -8294,6 +8570,14 @@@ L:	netdev at vger.kernel.or
  S:	Maintained
  F:	drivers/net/ethernet/via/via-velocity.*
  
 +VIVI VIRTUAL VIDEO DRIVER
 +M:	Hans Verkuil <hverkuil at xs4all.nl>
 +L:	linux-media at vger.kernel.org
 +T:	git git://linuxtv.org/media_tree.git
 +W:	http://linuxtv.org
 +S:	Maintained
 +F:	drivers/media/platform/vivi*
 +
  VLAN (802.1Q)
  M:	Patrick McHardy <kaber at trash.net>
  L:	netdev at vger.kernel.org
diff --combined arch/mips/include/uapi/asm/socket.h
index cc208f9,3e68bfb..47132f4
--- a/arch/mips/include/uapi/asm/socket.h
+++ b/arch/mips/include/uapi/asm/socket.h
@@@ -24,23 -24,21 +24,21 @@@
  				   SIGPIPE when they die.  */
  #define SO_DONTROUTE	0x0010	/* Don't do local routing.  */
  #define SO_BROADCAST	0x0020	/* Allow transmission of
 -				   broadcast messages.  */
 +				   broadcast messages.	*/
  #define SO_LINGER	0x0080	/* Block on close of a reliable
  				   socket to transmit pending data.  */
  #define SO_OOBINLINE 0x0100	/* Receive out-of-band data in-band.  */
- #if 0
- To add: #define SO_REUSEPORT 0x0200	/* Allow local address and port reuse.	*/
- #endif
+ #define SO_REUSEPORT 0x0200	/* Allow local address and port reuse.  */
  
  #define SO_TYPE		0x1008	/* Compatible name for SO_STYLE.  */
 -#define SO_STYLE	SO_TYPE	/* Synonym */
 +#define SO_STYLE	SO_TYPE /* Synonym */
  #define SO_ERROR	0x1007	/* get error status and clear */
  #define SO_SNDBUF	0x1001	/* Send buffer size. */
  #define SO_RCVBUF	0x1002	/* Receive buffer. */
  #define SO_SNDLOWAT	0x1003	/* send low-water mark */
  #define SO_RCVLOWAT	0x1004	/* receive low-water mark */
  #define SO_SNDTIMEO	0x1005	/* send timeout */
 -#define SO_RCVTIMEO 	0x1006	/* receive timeout */
 +#define SO_RCVTIMEO	0x1006	/* receive timeout */
  #define SO_ACCEPTCONN	0x1009
  #define SO_PROTOCOL	0x1028	/* protocol type */
  #define SO_DOMAIN	0x1029	/* domain/socket family */
@@@ -61,11 -59,11 +59,11 @@@
  #define SO_BINDTODEVICE		25
  
  /* Socket filtering */
 -#define SO_ATTACH_FILTER        26
 -#define SO_DETACH_FILTER        27
 +#define SO_ATTACH_FILTER	26
 +#define SO_DETACH_FILTER	27
  #define SO_GET_FILTER		SO_ATTACH_FILTER
  
 -#define SO_PEERNAME             28
 +#define SO_PEERNAME		28
  #define SO_TIMESTAMP		29
  #define SCM_TIMESTAMP		SO_TIMESTAMP
  
@@@ -81,7 -79,7 +79,7 @@@
  #define SO_TIMESTAMPING		37
  #define SCM_TIMESTAMPING	SO_TIMESTAMPING
  
 -#define SO_RXQ_OVFL             40
 +#define SO_RXQ_OVFL		40
  
  #define SO_WIFI_STATUS		41
  #define SCM_WIFI_STATUS		SO_WIFI_STATUS
@@@ -90,5 -88,6 +88,6 @@@
  /* Instruct lower device to use last 4-bytes of skb data as FCS */
  #define SO_NOFCS		43
  
+ #define SO_LOCK_FILTER		44
  
  #endif /* _UAPI_ASM_SOCKET_H */
diff --combined drivers/net/ethernet/atheros/atl1c/atl1c_main.c
index 0035c01,571b514..8f33315
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@@ -21,7 -21,7 +21,7 @@@
  
  #include "atl1c.h"
  
 -#define ATL1C_DRV_VERSION "1.0.1.0-NAPI"
 +#define ATL1C_DRV_VERSION "1.0.1.1-NAPI"
  char atl1c_driver_name[] = "atl1c";
  char atl1c_driver_version[] = ATL1C_DRV_VERSION;
  
@@@ -472,7 -472,6 +472,6 @@@ static int atl1c_set_mac_addr(struct ne
  
  	memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
  	memcpy(adapter->hw.mac_addr, addr->sa_data, netdev->addr_len);
- 	netdev->addr_assign_type &= ~NET_ADDR_RANDOM;
  
  	atl1c_hw_set_mac_addr(&adapter->hw, adapter->hw.mac_addr);
  
@@@ -983,11 -982,9 +982,9 @@@ static int atl1c_setup_ring_resources(s
  	size = sizeof(struct atl1c_buffer) * (tpd_ring->count * 2 +
  		rfd_ring->count);
  	tpd_ring->buffer_info = kzalloc(size, GFP_KERNEL);
- 	if (unlikely(!tpd_ring->buffer_info)) {
- 		dev_err(&pdev->dev, "kzalloc failed, size = %d\n",
- 			size);
+ 	if (unlikely(!tpd_ring->buffer_info))
  		goto err_nomem;
- 	}
+ 
  	for (i = 0; i < AT_MAX_TRANSMIT_QUEUE; i++) {
  		tpd_ring[i].buffer_info =
  			(tpd_ring->buffer_info + count);
@@@ -1652,7 -1649,6 +1649,7 @@@ static int atl1c_alloc_rx_buffer(struc
  	u16 num_alloc = 0;
  	u16 rfd_next_to_use, next_next;
  	struct atl1c_rx_free_desc *rfd_desc;
 +	dma_addr_t mapping;
  
  	next_next = rfd_next_to_use = rfd_ring->next_to_use;
  	if (++next_next == rfd_ring->count)
@@@ -1679,18 -1675,9 +1676,18 @@@
  		ATL1C_SET_BUFFER_STATE(buffer_info, ATL1C_BUFFER_BUSY);
  		buffer_info->skb = skb;
  		buffer_info->length = adapter->rx_buffer_len;
 -		buffer_info->dma = pci_map_single(pdev, vir_addr,
 +		mapping = pci_map_single(pdev, vir_addr,
  						buffer_info->length,
  						PCI_DMA_FROMDEVICE);
 +		if (unlikely(pci_dma_mapping_error(pdev, mapping))) {
 +			dev_kfree_skb(skb);
 +			buffer_info->skb = NULL;
 +			buffer_info->length = 0;
 +			ATL1C_SET_BUFFER_STATE(buffer_info, ATL1C_BUFFER_FREE);
 +			netif_warn(adapter, rx_err, adapter->netdev, "RX pci_map_single failed");
 +			break;
 +		}
 +		buffer_info->dma = mapping;
  		ATL1C_SET_PCIMAP_TYPE(buffer_info, ATL1C_PCIMAP_SINGLE,
  			ATL1C_PCIMAP_FROMDEVICE);
  		rfd_desc->buffer_addr = cpu_to_le64(buffer_info->dma);
@@@ -2025,29 -2012,7 +2022,29 @@@ check_sum
  	return 0;
  }
  
 -static void atl1c_tx_map(struct atl1c_adapter *adapter,
 +static void atl1c_tx_rollback(struct atl1c_adapter *adpt,
 +			      struct atl1c_tpd_desc *first_tpd,
 +			      enum atl1c_trans_queue type)
 +{
 +	struct atl1c_tpd_ring *tpd_ring = &adpt->tpd_ring[type];
 +	struct atl1c_buffer *buffer_info;
 +	struct atl1c_tpd_desc *tpd;
 +	u16 first_index, index;
 +
 +	first_index = first_tpd - (struct atl1c_tpd_desc *)tpd_ring->desc;
 +	index = first_index;
 +	while (index != tpd_ring->next_to_use) {
 +		tpd = ATL1C_TPD_DESC(tpd_ring, index);
 +		buffer_info = &tpd_ring->buffer_info[index];
 +		atl1c_clean_buffer(adpt->pdev, buffer_info, 0);
 +		memset(tpd, 0, sizeof(struct atl1c_tpd_desc));
 +		if (++index == tpd_ring->count)
 +			index = 0;
 +	}
 +	tpd_ring->next_to_use = first_index;
 +}
 +
 +static int atl1c_tx_map(struct atl1c_adapter *adapter,
  		      struct sk_buff *skb, struct atl1c_tpd_desc *tpd,
  			enum atl1c_trans_queue type)
  {
@@@ -2072,10 -2037,7 +2069,10 @@@
  		buffer_info->length = map_len;
  		buffer_info->dma = pci_map_single(adapter->pdev,
  					skb->data, hdr_len, PCI_DMA_TODEVICE);
 -		ATL1C_SET_BUFFER_STATE(buffer_info, ATL1C_BUFFER_BUSY);
 +		if (unlikely(pci_dma_mapping_error(adapter->pdev,
 +						   buffer_info->dma)))
 +			goto err_dma;
 +
  		ATL1C_SET_PCIMAP_TYPE(buffer_info, ATL1C_PCIMAP_SINGLE,
  			ATL1C_PCIMAP_TODEVICE);
  		mapped_len += map_len;
@@@ -2097,10 -2059,6 +2094,10 @@@
  		buffer_info->dma =
  			pci_map_single(adapter->pdev, skb->data + mapped_len,
  					buffer_info->length, PCI_DMA_TODEVICE);
 +		if (unlikely(pci_dma_mapping_error(adapter->pdev,
 +						   buffer_info->dma)))
 +			goto err_dma;
 +
  		ATL1C_SET_BUFFER_STATE(buffer_info, ATL1C_BUFFER_BUSY);
  		ATL1C_SET_PCIMAP_TYPE(buffer_info, ATL1C_PCIMAP_SINGLE,
  			ATL1C_PCIMAP_TODEVICE);
@@@ -2122,9 -2080,6 +2119,9 @@@
  						    frag, 0,
  						    buffer_info->length,
  						    DMA_TO_DEVICE);
 +		if (dma_mapping_error(&adapter->pdev->dev, buffer_info->dma))
 +			goto err_dma;
 +
  		ATL1C_SET_BUFFER_STATE(buffer_info, ATL1C_BUFFER_BUSY);
  		ATL1C_SET_PCIMAP_TYPE(buffer_info, ATL1C_PCIMAP_PAGE,
  			ATL1C_PCIMAP_TODEVICE);
@@@ -2137,13 -2092,6 +2134,13 @@@
  	/* The last buffer info contain the skb address,
  	   so it will be free after unmap */
  	buffer_info->skb = skb;
 +
 +	return 0;
 +
 +err_dma:
 +	buffer_info->dma = 0;
 +	buffer_info->length = 0;
 +	return -1;
  }
  
  static void atl1c_tx_queue(struct atl1c_adapter *adapter, struct sk_buff *skb,
@@@ -2206,18 -2154,10 +2203,18 @@@ static netdev_tx_t atl1c_xmit_frame(str
  	if (skb_network_offset(skb) != ETH_HLEN)
  		tpd->word1 |= 1 << TPD_ETH_TYPE_SHIFT; /* Ethernet frame */
  
 -	atl1c_tx_map(adapter, skb, tpd, type);
 -	atl1c_tx_queue(adapter, skb, tpd, type);
 +	if (atl1c_tx_map(adapter, skb, tpd, type) < 0) {
 +		netif_info(adapter, tx_done, adapter->netdev,
 +			   "tx-skb droppted due to dma error\n");
 +		/* roll back tpd/buffer */
 +		atl1c_tx_rollback(adapter, tpd, type);
 +		spin_unlock_irqrestore(&adapter->tx_lock, flags);
 +		dev_kfree_skb(skb);
 +	} else {
 +		atl1c_tx_queue(adapter, skb, tpd, type);
 +		spin_unlock_irqrestore(&adapter->tx_lock, flags);
 +	}
  
 -	spin_unlock_irqrestore(&adapter->tx_lock, flags);
  	return NETDEV_TX_OK;
  }
  
@@@ -2597,10 -2537,9 +2594,9 @@@ static int atl1c_probe(struct pci_dev *
  	}
  	if (atl1c_read_mac_addr(&adapter->hw)) {
  		/* got a random MAC address, set NET_ADDR_RANDOM to netdev */
- 		netdev->addr_assign_type |= NET_ADDR_RANDOM;
+ 		netdev->addr_assign_type = NET_ADDR_RANDOM;
  	}
  	memcpy(netdev->dev_addr, adapter->hw.mac_addr, netdev->addr_len);
- 	memcpy(netdev->perm_addr, adapter->hw.mac_addr, netdev->addr_len);
  	if (netif_msg_probe(adapter))
  		dev_dbg(&pdev->dev, "mac address : %pM\n",
  			adapter->hw.mac_addr);
diff --combined drivers/net/ethernet/cadence/macb.c
index b9d4bb9,352190b..7903943
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
@@@ -287,7 -287,7 +287,7 @@@ static int macb_mii_probe(struct net_de
  	}
  
  	/* attach the mac to the phy */
- 	ret = phy_connect_direct(dev, phydev, &macb_handle_link_change, 0,
+ 	ret = phy_connect_direct(dev, phydev, &macb_handle_link_change,
  				 bp->phy_interface);
  	if (ret) {
  		netdev_err(dev, "Could not attach to PHY\n");
@@@ -693,11 -693,6 +693,11 @@@ static int macb_poll(struct napi_struc
  		 * get notified when new packets arrive.
  		 */
  		macb_writel(bp, IER, MACB_RX_INT_FLAGS);
 +
 +		/* Packets received while interrupts were disabled */
 +		status = macb_readl(bp, RSR);
 +		if (unlikely(status))
 +			napi_reschedule(napi);
  	}
  
  	/* TODO: Handle errors */
diff --combined drivers/net/ethernet/freescale/fec_mpc52xx.c
index 85e776d,7f91b0c..77943a6
--- a/drivers/net/ethernet/freescale/fec_mpc52xx.c
+++ b/drivers/net/ethernet/freescale/fec_mpc52xx.c
@@@ -29,6 -29,7 +29,7 @@@
  #include <linux/delay.h>
  #include <linux/of_device.h>
  #include <linux/of_mdio.h>
+ #include <linux/of_net.h>
  #include <linux/of_platform.h>
  
  #include <linux/netdevice.h>
@@@ -40,8 -41,8 +41,8 @@@
  #include <asm/delay.h>
  #include <asm/mpc52xx.h>
  
 -#include <sysdev/bestcomm/bestcomm.h>
 -#include <sysdev/bestcomm/fec.h>
 +#include <linux/fsl/bestcomm/bestcomm.h>
 +#include <linux/fsl/bestcomm/fec.h>
  
  #include "fec_mpc52xx.h"
  
@@@ -76,10 -77,6 +77,6 @@@ static void mpc52xx_fec_stop(struct net
  static void mpc52xx_fec_start(struct net_device *dev);
  static void mpc52xx_fec_reset(struct net_device *dev);
  
- static u8 mpc52xx_fec_mac_addr[6];
- module_param_array_named(mac, mpc52xx_fec_mac_addr, byte, NULL, 0);
- MODULE_PARM_DESC(mac, "six hex digits, ie. 0x1,0x2,0xc0,0x01,0xba,0xbe");
- 
  #define MPC52xx_MESSAGES_DEFAULT ( NETIF_MSG_DRV | NETIF_MSG_PROBE | \
  		NETIF_MSG_LINK | NETIF_MSG_IFDOWN | NETIF_MSG_IFUP)
  static int debug = -1;	/* the above default */
@@@ -110,15 -107,6 +107,6 @@@ static void mpc52xx_fec_set_paddr(struc
  	out_be32(&fec->paddr2, (*(u16 *)(&mac[4]) << 16) | FEC_PADDR2_TYPE);
  }
  
- static void mpc52xx_fec_get_paddr(struct net_device *dev, u8 *mac)
- {
- 	struct mpc52xx_fec_priv *priv = netdev_priv(dev);
- 	struct mpc52xx_fec __iomem *fec = priv->fec;
- 
- 	*(u32 *)(&mac[0]) = in_be32(&fec->paddr1);
- 	*(u16 *)(&mac[4]) = in_be32(&fec->paddr2) >> 16;
- }
- 
  static int mpc52xx_fec_set_mac_address(struct net_device *dev, void *addr)
  {
  	struct sockaddr *sock = addr;
@@@ -853,6 -841,8 +841,8 @@@ static int mpc52xx_fec_probe(struct pla
  	struct resource mem;
  	const u32 *prop;
  	int prop_size;
+ 	struct device_node *np = op->dev.of_node;
+ 	const char *mac_addr;
  
  	phys_addr_t rx_fifo;
  	phys_addr_t tx_fifo;
@@@ -866,7 -856,7 +856,7 @@@
  	priv->ndev = ndev;
  
  	/* Reserve FEC control zone */
- 	rv = of_address_to_resource(op->dev.of_node, 0, &mem);
+ 	rv = of_address_to_resource(np, 0, &mem);
  	if (rv) {
  		printk(KERN_ERR DRIVER_NAME ": "
  				"Error while parsing device node resource\n" );
@@@ -919,7 -909,7 +909,7 @@@
  
  	/* Get the IRQ we need one by one */
  		/* Control */
- 	ndev->irq = irq_of_parse_and_map(op->dev.of_node, 0);
+ 	ndev->irq = irq_of_parse_and_map(np, 0);
  
  		/* RX */
  	priv->r_irq = bcom_get_task_irq(priv->rx_dmatsk);
@@@ -927,11 -917,33 +917,33 @@@
  		/* TX */
  	priv->t_irq = bcom_get_task_irq(priv->tx_dmatsk);
  
- 	/* MAC address init */
- 	if (!is_zero_ether_addr(mpc52xx_fec_mac_addr))
- 		memcpy(ndev->dev_addr, mpc52xx_fec_mac_addr, 6);
- 	else
- 		mpc52xx_fec_get_paddr(ndev, ndev->dev_addr);
+ 	/*
+ 	 * MAC address init:
+ 	 *
+ 	 * First try to read MAC address from DT
+ 	 */
+ 	mac_addr = of_get_mac_address(np);
+ 	if (mac_addr) {
+ 		memcpy(ndev->dev_addr, mac_addr, ETH_ALEN);
+ 	} else {
+ 		struct mpc52xx_fec __iomem *fec = priv->fec;
+ 
+ 		/*
+ 		 * If the MAC addresse is not provided via DT then read
+ 		 * it back from the controller regs
+ 		 */
+ 		*(u32 *)(&ndev->dev_addr[0]) = in_be32(&fec->paddr1);
+ 		*(u16 *)(&ndev->dev_addr[4]) = in_be32(&fec->paddr2) >> 16;
+ 	}
+ 
+ 	/*
+ 	 * Check if the MAC address is valid, if not get a random one
+ 	 */
+ 	if (!is_valid_ether_addr(ndev->dev_addr)) {
+ 		eth_hw_addr_random(ndev);
+ 		dev_warn(&ndev->dev, "using random MAC address %pM\n",
+ 			 ndev->dev_addr);
+ 	}
  
  	priv->msg_enable = netif_msg_init(debug, MPC52xx_MESSAGES_DEFAULT);
  
@@@ -942,20 -954,20 +954,20 @@@
  	/* Start with safe defaults for link connection */
  	priv->speed = 100;
  	priv->duplex = DUPLEX_HALF;
- 	priv->mdio_speed = ((mpc5xxx_get_bus_frequency(op->dev.of_node) >> 20) / 5) << 1;
+ 	priv->mdio_speed = ((mpc5xxx_get_bus_frequency(np) >> 20) / 5) << 1;
  
  	/* The current speed preconfigures the speed of the MII link */
- 	prop = of_get_property(op->dev.of_node, "current-speed", &prop_size);
+ 	prop = of_get_property(np, "current-speed", &prop_size);
  	if (prop && (prop_size >= sizeof(u32) * 2)) {
  		priv->speed = prop[0];
  		priv->duplex = prop[1] ? DUPLEX_FULL : DUPLEX_HALF;
  	}
  
  	/* If there is a phy handle, then get the PHY node */
- 	priv->phy_node = of_parse_phandle(op->dev.of_node, "phy-handle", 0);
+ 	priv->phy_node = of_parse_phandle(np, "phy-handle", 0);
  
  	/* the 7-wire property means don't use MII mode */
- 	if (of_find_property(op->dev.of_node, "fsl,7-wire-mode", NULL)) {
+ 	if (of_find_property(np, "fsl,7-wire-mode", NULL)) {
  		priv->seven_wire_mode = 1;
  		dev_info(&ndev->dev, "using 7-wire PHY mode\n");
  	}
@@@ -970,6 -982,8 +982,8 @@@
  
  	/* We're done ! */
  	dev_set_drvdata(&op->dev, ndev);
+ 	printk(KERN_INFO "%s: %s MAC %pM\n",
+ 	       ndev->name, op->dev.of_node->full_name, ndev->dev_addr);
  
  	return 0;
  
diff --combined drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 601dd84,d185a50..39c6c55
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@@ -428,8 -428,7 +428,7 @@@ static int stmmac_init_phy(struct net_d
  		 priv->plat->phy_addr);
  	pr_debug("stmmac_init_phy:  trying to attach to %s\n", phy_id_fmt);
  
- 	phydev = phy_connect(dev, phy_id_fmt, &stmmac_adjust_link, 0,
- 			     interface);
+ 	phydev = phy_connect(dev, phy_id_fmt, &stmmac_adjust_link, interface);
  
  	if (IS_ERR(phydev)) {
  		pr_err("%s: Could not attach to PHY\n", dev->name);
@@@ -531,17 -530,18 +530,18 @@@ static void init_dma_desc_rings(struct 
  	DBG(probe, INFO, "stmmac: txsize %d, rxsize %d, bfsize %d\n",
  	    txsize, rxsize, bfsize);
  
- 	priv->rx_skbuff_dma = kmalloc(rxsize * sizeof(dma_addr_t), GFP_KERNEL);
- 	priv->rx_skbuff =
- 	    kmalloc(sizeof(struct sk_buff *) * rxsize, GFP_KERNEL);
+ 	priv->rx_skbuff_dma = kmalloc_array(rxsize, sizeof(dma_addr_t),
+ 					    GFP_KERNEL);
+ 	priv->rx_skbuff = kmalloc_array(rxsize, sizeof(struct sk_buff *),
+ 					GFP_KERNEL);
  	priv->dma_rx =
  	    (struct dma_desc *)dma_alloc_coherent(priv->device,
  						  rxsize *
  						  sizeof(struct dma_desc),
  						  &priv->dma_rx_phy,
  						  GFP_KERNEL);
- 	priv->tx_skbuff = kmalloc(sizeof(struct sk_buff *) * txsize,
- 				       GFP_KERNEL);
+ 	priv->tx_skbuff = kmalloc_array(txsize, sizeof(struct sk_buff *),
+ 					GFP_KERNEL);
  	priv->dma_tx =
  	    (struct dma_desc *)dma_alloc_coherent(priv->device,
  						  txsize *
@@@ -2254,7 -2254,7 +2254,7 @@@ static int __init stmmac_cmdline_opt(ch
  		} else if (!strncmp(opt, "pause:", 6)) {
  			if (kstrtoint(opt + 6, 0, &pause))
  				goto err;
 -		} else if (!strncmp(opt, "eee_timer:", 6)) {
 +		} else if (!strncmp(opt, "eee_timer:", 10)) {
  			if (kstrtoint(opt + 10, 0, &eee_timer))
  				goto err;
  		}
diff --combined drivers/net/usb/cdc_ncm.c
index 6d25439,d7115ec..4a8c25a
--- a/drivers/net/usb/cdc_ncm.c
+++ b/drivers/net/usb/cdc_ncm.c
@@@ -65,9 -65,9 +65,9 @@@ cdc_ncm_get_drvinfo(struct net_device *
  {
  	struct usbnet *dev = netdev_priv(net);
  
- 	strncpy(info->driver, dev->driver_name, sizeof(info->driver));
- 	strncpy(info->version, DRIVER_VERSION, sizeof(info->version));
- 	strncpy(info->fw_version, dev->driver_info->description,
+ 	strlcpy(info->driver, dev->driver_name, sizeof(info->driver));
+ 	strlcpy(info->version, DRIVER_VERSION, sizeof(info->version));
+ 	strlcpy(info->fw_version, dev->driver_info->description,
  		sizeof(info->fw_version));
  	usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info));
  }
@@@ -576,14 -576,9 +576,14 @@@ static int cdc_ncm_bind(struct usbnet *
  	if ((intf->num_altsetting == 2) &&
  	    !usb_set_interface(dev->udev,
  			       intf->cur_altsetting->desc.bInterfaceNumber,
 -			       CDC_NCM_COMM_ALTSETTING_MBIM) &&
 -	    cdc_ncm_comm_intf_is_mbim(intf->cur_altsetting))
 -		return -ENODEV;
 +			       CDC_NCM_COMM_ALTSETTING_MBIM)) {
 +		if (cdc_ncm_comm_intf_is_mbim(intf->cur_altsetting))
 +			return -ENODEV;
 +		else
 +			usb_set_interface(dev->udev,
 +					  intf->cur_altsetting->desc.bInterfaceNumber,
 +					  CDC_NCM_COMM_ALTSETTING_NCM);
 +	}
  #endif
  
  	/* NCM data altsetting is always 1 */
diff --combined drivers/net/xen-netback/interface.c
index 221f426,fc1b8d78..d984141
--- a/drivers/net/xen-netback/interface.c
+++ b/drivers/net/xen-netback/interface.c
@@@ -132,7 -132,6 +132,7 @@@ static void xenvif_up(struct xenvif *vi
  static void xenvif_down(struct xenvif *vif)
  {
  	disable_irq(vif->irq);
 +	del_timer_sync(&vif->credit_timeout);
  	xen_netbk_deschedule_xenvif(vif);
  	xen_netbk_remove_xenvif(vif);
  }
@@@ -239,6 -238,8 +239,8 @@@ static const struct net_device_ops xenv
  	.ndo_stop	= xenvif_close,
  	.ndo_change_mtu	= xenvif_change_mtu,
  	.ndo_fix_features = xenvif_fix_features,
+ 	.ndo_set_mac_address = eth_mac_addr,
+ 	.ndo_validate_addr   = eth_validate_addr,
  };
  
  struct xenvif *xenvif_alloc(struct device *parent, domid_t domid,
@@@ -364,6 -365,8 +366,6 @@@ void xenvif_disconnect(struct xenvif *v
  	atomic_dec(&vif->refcnt);
  	wait_event(vif->waiting_to_free, atomic_read(&vif->refcnt) == 0);
  
 -	del_timer_sync(&vif->credit_timeout);
 -
  	if (vif->irq)
  		unbind_from_irqhandler(vif->irq, vif);
  
diff --combined drivers/s390/net/qeth_core.h
index b4796a4,d690b33..d87961d
--- a/drivers/s390/net/qeth_core.h
+++ b/drivers/s390/net/qeth_core.h
@@@ -678,6 -678,7 +678,7 @@@ struct qeth_card_options 
  	int performance_stats;
  	int rx_sg_cb;
  	enum qeth_ipa_isolation_modes isolation;
+ 	enum qeth_ipa_isolation_modes prev_isolation;
  	int sniffer;
  	enum qeth_cq cq;
  	char hsuid[9];
@@@ -789,6 -790,7 +790,7 @@@ struct qeth_card 
  	struct qeth_rx rx;
  	struct delayed_work buffer_reclaim_work;
  	int reclaim_index;
+ 	struct work_struct close_dev_work;
  };
  
  struct qeth_card_list_struct {
@@@ -816,7 -818,7 +818,7 @@@ static inline struct qeth_card *CARD_FR
  
  static inline int qeth_get_micros(void)
  {
 -	return (int) (get_clock() >> 12);
 +	return (int) (get_tod_clock() >> 12);
  }
  
  static inline int qeth_get_ip_version(struct sk_buff *skb)
@@@ -909,9 -911,6 +911,6 @@@ struct qeth_cmd_buffer *qeth_wait_for_b
  int qeth_mdio_read(struct net_device *, int, int);
  int qeth_snmp_command(struct qeth_card *, char __user *);
  int qeth_query_oat_command(struct qeth_card *, char __user *);
- struct qeth_cmd_buffer *qeth_get_adapter_cmd(struct qeth_card *, __u32, __u32);
- int qeth_default_setadapterparms_cb(struct qeth_card *, struct qeth_reply *,
- 					unsigned long);
  int qeth_send_control_data(struct qeth_card *, int, struct qeth_cmd_buffer *,
  	int (*reply_cb)(struct qeth_card *, struct qeth_reply*, unsigned long),
  	void *reply_param);
@@@ -928,12 -927,13 +927,13 @@@ void qeth_core_get_strings(struct net_d
  void qeth_core_get_drvinfo(struct net_device *, struct ethtool_drvinfo *);
  void qeth_dbf_longtext(debug_info_t *id, int level, char *text, ...);
  int qeth_core_ethtool_get_settings(struct net_device *, struct ethtool_cmd *);
- int qeth_set_access_ctrl_online(struct qeth_card *card);
+ int qeth_set_access_ctrl_online(struct qeth_card *card, int fallback);
  int qeth_hdr_chk_and_bounce(struct sk_buff *, int);
  int qeth_configure_cq(struct qeth_card *, enum qeth_cq);
  int qeth_hw_trap(struct qeth_card *, enum qeth_diags_trap_action);
  int qeth_query_ipassists(struct qeth_card *, enum qeth_prot_versions prot);
  void qeth_trace_features(struct qeth_card *);
+ void qeth_close_dev(struct qeth_card *);
  
  /* exports for OSN */
  int qeth_osn_assist(struct net_device *, void *, int);
diff --combined include/net/sock.h
index 25afaa0,a340ab4..a66caa2
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@@ -140,6 -140,7 +140,7 @@@ typedef __u64 __bitwise __addrpair
   *	@skc_family: network address family
   *	@skc_state: Connection state
   *	@skc_reuse: %SO_REUSEADDR setting
+  *	@skc_reuseport: %SO_REUSEPORT setting
   *	@skc_bound_dev_if: bound device index if != 0
   *	@skc_bind_node: bind hash linkage for various protocol lookup tables
   *	@skc_portaddr_node: second hash linkage for UDP/UDP-Lite protocol
@@@ -179,7 -180,8 +180,8 @@@ struct sock_common 
  
  	unsigned short		skc_family;
  	volatile unsigned char	skc_state;
- 	unsigned char		skc_reuse;
+ 	unsigned char		skc_reuse:4;
+ 	unsigned char		skc_reuseport:4;
  	int			skc_bound_dev_if;
  	union {
  		struct hlist_node	skc_bind_node;
@@@ -297,6 -299,7 +299,7 @@@ struct sock 
  #define sk_family		__sk_common.skc_family
  #define sk_state		__sk_common.skc_state
  #define sk_reuse		__sk_common.skc_reuse
+ #define sk_reuseport		__sk_common.skc_reuseport
  #define sk_bound_dev_if		__sk_common.skc_bound_dev_if
  #define sk_bind_node		__sk_common.skc_bind_node
  #define sk_prot			__sk_common.skc_prot
@@@ -337,7 -340,7 +340,7 @@@
  #endif
  	unsigned long 		sk_flags;
  	struct dst_entry	*sk_rx_dst;
- 	struct dst_entry	*sk_dst_cache;
+ 	struct dst_entry __rcu	*sk_dst_cache;
  	spinlock_t		sk_dst_lock;
  	atomic_t		sk_wmem_alloc;
  	atomic_t		sk_omem_alloc;
@@@ -664,6 -667,7 +667,7 @@@ enum sock_flags 
  		     * Will use last 4 bytes of packet sent from
  		     * user-space instead.
  		     */
+ 	SOCK_FILTER_LOCKED, /* Filter cannot be changed anymore */
  };
  
  static inline void sock_copy_flags(struct sock *nsk, struct sock *osk)
@@@ -1037,7 -1041,7 +1041,7 @@@ static inline void sk_refcnt_debug_dec(
  	       sk->sk_prot->name, sk, atomic_read(&sk->sk_prot->socks));
  }
  
 -inline void sk_refcnt_debug_release(const struct sock *sk)
 +static inline void sk_refcnt_debug_release(const struct sock *sk)
  {
  	if (atomic_read(&sk->sk_refcnt) != 1)
  		printk(KERN_DEBUG "Destruction of the %s socket %p delayed, refcnt=%d\n",
diff --combined net/batman-adv/distributed-arp-table.c
index 5539215,ea0bd31..761a590
--- a/net/batman-adv/distributed-arp-table.c
+++ b/net/batman-adv/distributed-arp-table.c
@@@ -1,4 -1,4 +1,4 @@@
- /* Copyright (C) 2011-2012 B.A.T.M.A.N. contributors:
+ /* Copyright (C) 2011-2013 B.A.T.M.A.N. contributors:
   *
   * Antonio Quartulli
   *
@@@ -440,7 -440,7 +440,7 @@@ static bool batadv_is_orig_node_eligibl
  	/* this is an hash collision with the temporary selected node. Choose
  	 * the one with the lowest address
  	 */
 -	if ((tmp_max == max) &&
 +	if ((tmp_max == max) && max_orig_node &&
  	    (batadv_compare_eth(candidate->orig, max_orig_node->orig) > 0))
  		goto out;
  
diff --combined net/ipv4/tcp.c
index 035663d,7a5ba48..47e854f
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@@ -400,6 -400,8 +400,8 @@@ void tcp_init_sock(struct sock *sk
  	tcp_enable_early_retrans(tp);
  	icsk->icsk_ca_ops = &tcp_init_congestion_ops;
  
+ 	tp->tsoffset = 0;
+ 
  	sk->sk_state = TCP_CLOSE;
  
  	sk->sk_write_space = sk_stream_write_space;
@@@ -895,6 -897,7 +897,7 @@@ new_segment
  			get_page(page);
  			skb_fill_page_desc(skb, i, page, offset, copy);
  		}
+ 		skb_shinfo(skb)->tx_flags |= SKBTX_SHARED_FRAG;
  
  		skb->len += copy;
  		skb->data_len += copy;
@@@ -1406,10 -1409,10 +1409,10 @@@ static void tcp_service_net_dma(struct 
  		return;
  
  	last_issued = tp->ucopy.dma_cookie;
 -	dma_async_memcpy_issue_pending(tp->ucopy.dma_chan);
 +	dma_async_issue_pending(tp->ucopy.dma_chan);
  
  	do {
 -		if (dma_async_memcpy_complete(tp->ucopy.dma_chan,
 +		if (dma_async_is_tx_complete(tp->ucopy.dma_chan,
  					      last_issued, &done,
  					      &used) == DMA_SUCCESS) {
  			/* Safe to free early-copied skbs now */
@@@ -1751,7 -1754,7 +1754,7 @@@ int tcp_recvmsg(struct kiocb *iocb, str
  				tcp_service_net_dma(sk, true);
  				tcp_cleanup_rbuf(sk, copied);
  			} else
 -				dma_async_memcpy_issue_pending(tp->ucopy.dma_chan);
 +				dma_async_issue_pending(tp->ucopy.dma_chan);
  		}
  #endif
  		if (copied >= target) {
@@@ -1844,7 -1847,7 +1847,7 @@@ do_prequeue
  					break;
  				}
  
 -				dma_async_memcpy_issue_pending(tp->ucopy.dma_chan);
 +				dma_async_issue_pending(tp->ucopy.dma_chan);
  
  				if ((offset + used) == skb->len)
  					copied_early = true;
@@@ -2287,7 -2290,6 +2290,6 @@@ int tcp_disconnect(struct sock *sk, in
  	tp->packets_out = 0;
  	tp->snd_ssthresh = TCP_INFINITE_SSTHRESH;
  	tp->snd_cwnd_cnt = 0;
- 	tp->bytes_acked = 0;
  	tp->window_clamp = 0;
  	tcp_set_ca_state(sk, TCP_CA_Open);
  	tcp_clear_retrans(tp);
@@@ -2711,6 -2713,12 +2713,12 @@@ static int do_tcp_setsockopt(struct soc
  		else
  			err = -EINVAL;
  		break;
+ 	case TCP_TIMESTAMP:
+ 		if (!tp->repair)
+ 			err = -EPERM;
+ 		else
+ 			tp->tsoffset = val - tcp_time_stamp;
+ 		break;
  	default:
  		err = -ENOPROTOOPT;
  		break;
@@@ -2959,6 -2967,9 +2967,9 @@@ static int do_tcp_getsockopt(struct soc
  	case TCP_USER_TIMEOUT:
  		val = jiffies_to_msecs(icsk->icsk_user_timeout);
  		break;
+ 	case TCP_TIMESTAMP:
+ 		val = tcp_time_stamp + tp->tsoffset;
+ 		break;
  	default:
  		return -ENOPROTOOPT;
  	}
@@@ -3032,6 -3043,7 +3043,7 @@@ struct sk_buff *tcp_tso_segment(struct 
  			       SKB_GSO_DODGY |
  			       SKB_GSO_TCP_ECN |
  			       SKB_GSO_TCPV6 |
+ 			       SKB_GSO_GRE |
  			       0) ||
  			     !(type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))))
  			goto out;
@@@ -3243,7 -3255,7 +3255,7 @@@ __tcp_alloc_md5sig_pool(struct sock *sk
  		struct crypto_hash *hash;
  
  		hash = crypto_alloc_hash("md5", 0, CRYPTO_ALG_ASYNC);
- 		if (!hash || IS_ERR(hash))
+ 		if (IS_ERR_OR_NULL(hash))
  			goto out_free;
  
  		per_cpu_ptr(pool, cpu)->md5_desc.tfm = hash;
diff --combined net/ipv6/netfilter/nf_conntrack_reasm.c
index 0156d07,b89a8c3..54087e9
--- a/net/ipv6/netfilter/nf_conntrack_reasm.c
+++ b/net/ipv6/netfilter/nf_conntrack_reasm.c
@@@ -97,9 -97,9 +97,9 @@@ static int nf_ct_frag6_sysctl_register(
  		if (table == NULL)
  			goto err_alloc;
  
 -		table[0].data = &net->ipv6.frags.high_thresh;
 -		table[1].data = &net->ipv6.frags.low_thresh;
 -		table[2].data = &net->ipv6.frags.timeout;
 +		table[0].data = &net->nf_frag.frags.timeout;
 +		table[1].data = &net->nf_frag.frags.low_thresh;
 +		table[2].data = &net->nf_frag.frags.high_thresh;
  	}
  
  	hdr = register_net_sysctl(net, "net/netfilter", table);
@@@ -319,7 -319,7 +319,7 @@@ found
  	fq->q.meat += skb->len;
  	if (payload_len > fq->q.max_size)
  		fq->q.max_size = payload_len;
- 	atomic_add(skb->truesize, &fq->q.net->mem);
+ 	add_frag_mem_limit(&fq->q, skb->truesize);
  
  	/* The first fragment.
  	 * nhoffset is obtained from the first fragment, of course.
@@@ -328,9 -328,8 +328,8 @@@
  		fq->nhoffset = nhoff;
  		fq->q.last_in |= INET_FRAG_FIRST_IN;
  	}
- 	write_lock(&nf_frags.lock);
- 	list_move_tail(&fq->q.lru_list, &fq->q.net->lru_list);
- 	write_unlock(&nf_frags.lock);
+ 
+ 	inet_frag_lru_move(&fq->q);
  	return 0;
  
  discard_fq:
@@@ -369,7 -368,7 +368,7 @@@ nf_ct_frag6_reasm(struct frag_queue *fq
  	}
  
  	/* Head of list must not be cloned. */
- 	if (skb_cloned(head) && pskb_expand_head(head, 0, 0, GFP_ATOMIC)) {
+ 	if (skb_unclone(head, GFP_ATOMIC)) {
  		pr_debug("skb is cloned but can't expand head");
  		goto out_oom;
  	}
@@@ -398,7 -397,7 +397,7 @@@
  		clone->ip_summed = head->ip_summed;
  
  		NFCT_FRAG6_CB(clone)->orig = NULL;
- 		atomic_add(clone->truesize, &fq->q.net->mem);
+ 		add_frag_mem_limit(&fq->q, clone->truesize);
  	}
  
  	/* We have to remove fragment header from datagram and to relocate
@@@ -422,7 -421,7 +421,7 @@@
  			head->csum = csum_add(head->csum, fp->csum);
  		head->truesize += fp->truesize;
  	}
- 	atomic_sub(head->truesize, &fq->q.net->mem);
+ 	sub_frag_mem_limit(&fq->q, head->truesize);
  
  	head->local_df = 1;
  	head->next = NULL;
diff --combined net/ipv6/xfrm6_policy.c
index 8f32718,4ef7bdb..453a42f
--- a/net/ipv6/xfrm6_policy.c
+++ b/net/ipv6/xfrm6_policy.c
@@@ -110,7 -110,6 +110,6 @@@ static int xfrm6_fill_dst(struct xfrm_d
  
  	/* Sheit... I remember I did this right. Apparently,
  	 * it was magically lost, so this code needs audit */
- 	xdst->u.rt6.n = neigh_clone(rt->n);
  	xdst->u.rt6.rt6i_flags = rt->rt6i_flags & (RTF_ANYCAST |
  						   RTF_LOCAL);
  	xdst->u.rt6.rt6i_metric = rt->rt6i_metric;
@@@ -236,8 -235,6 +235,8 @@@ static void xfrm6_dst_destroy(struct ds
  {
  	struct xfrm_dst *xdst = (struct xfrm_dst *)dst;
  
 +	if (likely(xdst->u.rt6.n))
 +		neigh_release(xdst->u.rt6.n);
  	if (likely(xdst->u.rt6.rt6i_idev))
  		in6_dev_put(xdst->u.rt6.rt6i_idev);
  	dst_destroy_metrics_generic(dst);
@@@ -323,7 -320,51 +322,51 @@@ static struct ctl_table xfrm6_policy_ta
  	{ }
  };
  
- static struct ctl_table_header *sysctl_hdr;
+ static int __net_init xfrm6_net_init(struct net *net)
+ {
+ 	struct ctl_table *table;
+ 	struct ctl_table_header *hdr;
+ 
+ 	table = xfrm6_policy_table;
+ 	if (!net_eq(net, &init_net)) {
+ 		table = kmemdup(table, sizeof(xfrm6_policy_table), GFP_KERNEL);
+ 		if (!table)
+ 			goto err_alloc;
+ 
+ 		table[0].data = &net->xfrm.xfrm6_dst_ops.gc_thresh;
+ 	}
+ 
+ 	hdr = register_net_sysctl(net, "net/ipv6", table);
+ 	if (!hdr)
+ 		goto err_reg;
+ 
+ 	net->ipv6.sysctl.xfrm6_hdr = hdr;
+ 	return 0;
+ 
+ err_reg:
+ 	if (!net_eq(net, &init_net))
+ 		kfree(table);
+ err_alloc:
+ 	return -ENOMEM;
+ }
+ 
+ static void __net_exit xfrm6_net_exit(struct net *net)
+ {
+ 	struct ctl_table *table;
+ 
+ 	if (net->ipv6.sysctl.xfrm6_hdr == NULL)
+ 		return;
+ 
+ 	table = net->ipv6.sysctl.xfrm6_hdr->ctl_table_arg;
+ 	unregister_net_sysctl_table(net->ipv6.sysctl.xfrm6_hdr);
+ 	if (!net_eq(net, &init_net))
+ 		kfree(table);
+ }
+ 
+ static struct pernet_operations xfrm6_net_ops = {
+ 	.init	= xfrm6_net_init,
+ 	.exit	= xfrm6_net_exit,
+ };
  #endif
  
  int __init xfrm6_init(void)
@@@ -342,8 -383,7 +385,7 @@@
  		goto out_policy;
  
  #ifdef CONFIG_SYSCTL
- 	sysctl_hdr = register_net_sysctl(&init_net, "net/ipv6",
- 					 xfrm6_policy_table);
+ 	register_pernet_subsys(&xfrm6_net_ops);
  #endif
  out:
  	return ret;
@@@ -355,8 -395,7 +397,7 @@@ out_policy
  void xfrm6_fini(void)
  {
  #ifdef CONFIG_SYSCTL
- 	if (sysctl_hdr)
- 		unregister_net_sysctl_table(sysctl_hdr);
+ 	unregister_pernet_subsys(&xfrm6_net_ops);
  #endif
  	xfrm6_policy_fini();
  	xfrm6_state_fini();
diff --combined net/netfilter/nf_conntrack_helper.c
index 91527d5,2f380f7..1343a4b
--- a/net/netfilter/nf_conntrack_helper.c
+++ b/net/netfilter/nf_conntrack_helper.c
@@@ -236,9 -236,7 +236,9 @@@ int __nf_ct_try_assign_helper(struct nf
  		/* We only allow helper re-assignment of the same sort since
  		 * we cannot reallocate the helper extension area.
  		 */
 -		if (help->helper != helper) {
 +		struct nf_conntrack_helper *tmp = rcu_dereference(help->helper);
 +
 +		if (tmp && tmp->help != helper->help) {
  			RCU_INIT_POINTER(help->helper, NULL);
  			goto out;
  		}
@@@ -425,44 -423,41 +425,41 @@@ static struct nf_ct_ext_type helper_ext
  	.id	= NF_CT_EXT_HELPER,
  };
  
- int nf_conntrack_helper_init(struct net *net)
+ int nf_conntrack_helper_pernet_init(struct net *net)
  {
- 	int err;
- 
  	net->ct.auto_assign_helper_warned = false;
  	net->ct.sysctl_auto_assign_helper = nf_ct_auto_assign_helper;
+ 	return nf_conntrack_helper_init_sysctl(net);
+ }
  
- 	if (net_eq(net, &init_net)) {
- 		nf_ct_helper_hsize = 1; /* gets rounded up to use one page */
- 		nf_ct_helper_hash =
- 			nf_ct_alloc_hashtable(&nf_ct_helper_hsize, 0);
- 		if (!nf_ct_helper_hash)
- 			return -ENOMEM;
+ void nf_conntrack_helper_pernet_fini(struct net *net)
+ {
+ 	nf_conntrack_helper_fini_sysctl(net);
+ }
  
- 		err = nf_ct_extend_register(&helper_extend);
- 		if (err < 0)
- 			goto err1;
+ int nf_conntrack_helper_init(void)
+ {
+ 	int ret;
+ 	nf_ct_helper_hsize = 1; /* gets rounded up to use one page */
+ 	nf_ct_helper_hash =
+ 		nf_ct_alloc_hashtable(&nf_ct_helper_hsize, 0);
+ 	if (!nf_ct_helper_hash)
+ 		return -ENOMEM;
+ 
+ 	ret = nf_ct_extend_register(&helper_extend);
+ 	if (ret < 0) {
+ 		pr_err("nf_ct_helper: Unable to register helper extension.\n");
+ 		goto out_extend;
  	}
  
- 	err = nf_conntrack_helper_init_sysctl(net);
- 	if (err < 0)
- 		goto out_sysctl;
- 
  	return 0;
- 
- out_sysctl:
- 	if (net_eq(net, &init_net))
- 		nf_ct_extend_unregister(&helper_extend);
- err1:
+ out_extend:
  	nf_ct_free_hashtable(nf_ct_helper_hash, nf_ct_helper_hsize);
- 	return err;
+ 	return ret;
  }
  
- void nf_conntrack_helper_fini(struct net *net)
+ void nf_conntrack_helper_fini(void)
  {
- 	nf_conntrack_helper_fini_sysctl(net);
- 	if (net_eq(net, &init_net)) {
- 		nf_ct_extend_unregister(&helper_extend);
- 		nf_ct_free_hashtable(nf_ct_helper_hash, nf_ct_helper_hsize);
- 	}
+ 	nf_ct_extend_unregister(&helper_extend);
+ 	nf_ct_free_hashtable(nf_ct_helper_hash, nf_ct_helper_hsize);
  }
diff --combined net/netfilter/nf_conntrack_netlink.c
index a081915,2334cc5..79c2d50
--- a/net/netfilter/nf_conntrack_netlink.c
+++ b/net/netfilter/nf_conntrack_netlink.c
@@@ -43,6 -43,7 +43,7 @@@
  #include <net/netfilter/nf_conntrack_acct.h>
  #include <net/netfilter/nf_conntrack_zones.h>
  #include <net/netfilter/nf_conntrack_timestamp.h>
+ #include <net/netfilter/nf_conntrack_labels.h>
  #ifdef CONFIG_NF_NAT_NEEDED
  #include <net/netfilter/nf_nat_core.h>
  #include <net/netfilter/nf_nat_l4proto.h>
@@@ -323,6 -324,40 +324,40 @@@ nla_put_failure
  #define ctnetlink_dump_secctx(a, b) (0)
  #endif
  
+ #ifdef CONFIG_NF_CONNTRACK_LABELS
+ static int ctnetlink_label_size(const struct nf_conn *ct)
+ {
+ 	struct nf_conn_labels *labels = nf_ct_labels_find(ct);
+ 
+ 	if (!labels)
+ 		return 0;
+ 	return nla_total_size(labels->words * sizeof(long));
+ }
+ 
+ static int
+ ctnetlink_dump_labels(struct sk_buff *skb, const struct nf_conn *ct)
+ {
+ 	struct nf_conn_labels *labels = nf_ct_labels_find(ct);
+ 	unsigned int len, i;
+ 
+ 	if (!labels)
+ 		return 0;
+ 
+ 	len = labels->words * sizeof(long);
+ 	i = 0;
+ 	do {
+ 		if (labels->bits[i] != 0)
+ 			return nla_put(skb, CTA_LABELS, len, labels->bits);
+ 		i++;
+ 	} while (i < labels->words);
+ 
+ 	return 0;
+ }
+ #else
+ #define ctnetlink_dump_labels(a, b) (0)
+ #define ctnetlink_label_size(a)	(0)
+ #endif
+ 
  #define master_tuple(ct) &(ct->master->tuplehash[IP_CT_DIR_ORIGINAL].tuple)
  
  static inline int
@@@ -463,6 -498,7 +498,7 @@@ ctnetlink_fill_info(struct sk_buff *skb
  	    ctnetlink_dump_helpinfo(skb, ct) < 0 ||
  	    ctnetlink_dump_mark(skb, ct) < 0 ||
  	    ctnetlink_dump_secctx(skb, ct) < 0 ||
+ 	    ctnetlink_dump_labels(skb, ct) < 0 ||
  	    ctnetlink_dump_id(skb, ct) < 0 ||
  	    ctnetlink_dump_use(skb, ct) < 0 ||
  	    ctnetlink_dump_master(skb, ct) < 0 ||
@@@ -561,6 -597,7 +597,7 @@@ ctnetlink_nlmsg_size(const struct nf_co
  	       + nla_total_size(sizeof(u_int32_t)) /* CTA_MARK */
  #endif
  	       + ctnetlink_proto_size(ct)
+ 	       + ctnetlink_label_size(ct)
  	       ;
  }
  
@@@ -662,6 -699,9 +699,9 @@@ ctnetlink_conntrack_event(unsigned int 
  		    && ctnetlink_dump_secctx(skb, ct) < 0)
  			goto nla_put_failure;
  #endif
+ 		if (events & (1 << IPCT_LABEL) &&
+ 		     ctnetlink_dump_labels(skb, ct) < 0)
+ 			goto nla_put_failure;
  
  		if (events & (1 << IPCT_RELATED) &&
  		    ctnetlink_dump_master(skb, ct) < 0)
@@@ -921,6 -961,7 +961,7 @@@ ctnetlink_parse_help(const struct nlatt
  	return 0;
  }
  
+ #define __CTA_LABELS_MAX_LENGTH ((XT_CONNLABEL_MAXBIT + 1) / BITS_PER_BYTE)
  static const struct nla_policy ct_nla_policy[CTA_MAX+1] = {
  	[CTA_TUPLE_ORIG]	= { .type = NLA_NESTED },
  	[CTA_TUPLE_REPLY]	= { .type = NLA_NESTED },
@@@ -937,6 -978,10 +978,10 @@@
  	[CTA_NAT_SEQ_ADJ_REPLY] = { .type = NLA_NESTED },
  	[CTA_ZONE]		= { .type = NLA_U16 },
  	[CTA_MARK_MASK]		= { .type = NLA_U32 },
+ 	[CTA_LABELS]		= { .type = NLA_BINARY,
+ 				    .len = __CTA_LABELS_MAX_LENGTH },
+ 	[CTA_LABELS_MASK]	= { .type = NLA_BINARY,
+ 				    .len = __CTA_LABELS_MAX_LENGTH },
  };
  
  static int
@@@ -1465,6 -1510,31 +1510,31 @@@ ctnetlink_change_nat_seq_adj(struct nf_
  #endif
  
  static int
+ ctnetlink_attach_labels(struct nf_conn *ct, const struct nlattr * const cda[])
+ {
+ #ifdef CONFIG_NF_CONNTRACK_LABELS
+ 	size_t len = nla_len(cda[CTA_LABELS]);
+ 	const void *mask = cda[CTA_LABELS_MASK];
+ 
+ 	if (len & (sizeof(u32)-1)) /* must be multiple of u32 */
+ 		return -EINVAL;
+ 
+ 	if (mask) {
+ 		if (nla_len(cda[CTA_LABELS_MASK]) == 0 ||
+ 		    nla_len(cda[CTA_LABELS_MASK]) != len)
+ 			return -EINVAL;
+ 		mask = nla_data(cda[CTA_LABELS_MASK]);
+ 	}
+ 
+ 	len /= sizeof(u32);
+ 
+ 	return nf_connlabels_replace(ct, nla_data(cda[CTA_LABELS]), mask, len);
+ #else
+ 	return -EOPNOTSUPP;
+ #endif
+ }
+ 
+ static int
  ctnetlink_change_conntrack(struct nf_conn *ct,
  			   const struct nlattr * const cda[])
  {
@@@ -1510,6 -1580,11 +1580,11 @@@
  			return err;
  	}
  #endif
+ 	if (cda[CTA_LABELS]) {
+ 		err = ctnetlink_attach_labels(ct, cda);
+ 		if (err < 0)
+ 			return err;
+ 	}
  
  	return 0;
  }
@@@ -1598,6 -1673,8 +1673,8 @@@ ctnetlink_create_conntrack(struct net *
  	nf_ct_acct_ext_add(ct, GFP_ATOMIC);
  	nf_ct_tstamp_ext_add(ct, GFP_ATOMIC);
  	nf_ct_ecache_ext_add(ct, 0, 0, GFP_ATOMIC);
+ 	nf_ct_labels_ext_add(ct);
+ 
  	/* we must add conntrack extensions before confirmation. */
  	ct->status |= IPS_CONFIRMED;
  
@@@ -1705,9 -1782,6 +1782,9 @@@ ctnetlink_new_conntrack(struct sock *ct
  		if (nlh->nlmsg_flags & NLM_F_CREATE) {
  			enum ip_conntrack_events events;
  
 +			if (!cda[CTA_TUPLE_ORIG] || !cda[CTA_TUPLE_REPLY])
 +				return -EINVAL;
 +
  			ct = ctnetlink_create_conntrack(net, zone, cda, &otuple,
  							&rtuple, u3);
  			if (IS_ERR(ct))
@@@ -1719,6 -1793,10 +1796,10 @@@
  			else
  				events = IPCT_NEW;
  
+ 			if (cda[CTA_LABELS] &&
+ 			    ctnetlink_attach_labels(ct, cda) == 0)
+ 				events |= (1 << IPCT_LABEL);
+ 
  			nf_conntrack_eventmask_report((1 << IPCT_REPLY) |
  						      (1 << IPCT_ASSURED) |
  						      (1 << IPCT_HELPER) |
@@@ -1986,6 -2064,8 +2067,8 @@@ ctnetlink_nfqueue_build(struct sk_buff 
  	if (ct->mark && ctnetlink_dump_mark(skb, ct) < 0)
  		goto nla_put_failure;
  #endif
+ 	if (ctnetlink_dump_labels(skb, ct) < 0)
+ 		goto nla_put_failure;
  	rcu_read_unlock();
  	return 0;
  
@@@ -2014,6 -2094,11 +2097,11 @@@ ctnetlink_nfqueue_parse_ct(const struc
  		if (err < 0)
  			return err;
  	}
+ 	if (cda[CTA_LABELS]) {
+ 		err = ctnetlink_attach_labels(ct, cda);
+ 		if (err < 0)
+ 			return err;
+ 	}
  #if defined(CONFIG_NF_CONNTRACK_MARK)
  	if (cda[CTA_MARK])
  		ct->mark = ntohl(nla_get_be32(cda[CTA_MARK]));

-- 
LinuxNextTracking


More information about the linux-merge mailing list