The following commit has been merged in the master branch: commit 09485915a84f368e72f3af33704f7d7ca8905a57 Merge: 1ef33859507a2df902c59e9194e274c4da8fa3b3 8064b3cf750e71fdaf306abb4433a93d0f45f4c9 Author: Stephen Rothwell sfr@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@xs4all.nl +L: linux-media@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@kvack.org L: linux-aio@kvack.org @@@ -567,18 -559,6 +567,18 @@@ L: linux-rdma@vger.kernel.or S: Maintained F: drivers/infiniband/hw/amso1100/
+ANALOG DEVICES INC AD9389B DRIVER +M: Hans Verkuil hans.verkuil@cisco.com +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/i2c/ad9389b* + +ANALOG DEVICES INC ADV7604 DRIVER +M: Hans Verkuil hans.verkuil@cisco.com +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/i2c/adv7604* + ANALOG DEVICES INC ASOC CODEC DRIVERS M: Lars-Peter Clausen lars@metafoo.de L: device-drivers-devel@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@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@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@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@samsung.com +M: Kamil Debski k.debski@samsung.com +L: linux-arm-kernel@lists.infradead.org +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/platform/s5p-g2d/ + ARM/SAMSUNG S5P SERIES FIMC SUPPORT M: Kyungmin Park kyungmin.park@samsung.com M: Sylwester Nawrocki s.nawrocki@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@ideasonboard.com +L: linux-media@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@fairview5.com L: lm-sensors@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@pengutronix.de +M: Wolfram Sang wsa@the-dreams.de L: linux-i2c@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@xs4all.nl +L: linux-media@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@polimi.it L: linux-wireless@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@gmail.com +L: uclinux-dist-devel@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@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@brocade.com +M: Anil Gurumurthy agurumur@brocade.com +M: Vijaya Mohan Guvva vmohan@brocade.com L: linux-scsi@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@xs4all.nl +L: linux-media@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@lwn.net L: linux-media@vger.kernel.org @@@ -2060,8 -1990,8 +2060,8 @@@ S: Maintaine F: include/linux/clk.h
CISCO FCOE HBA DRIVER -M: Abhijeet Joglekar abjoglek@cisco.com -M: Venkata Siva Vijayendra Bhamidipati vbhamidi@cisco.com +M: Hiral Patel hiralpat@cisco.com +M: Suma Ramars sramars@cisco.com M: Brian Uchino buchino@cisco.com L: linux-scsi@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@xs4all.nl +L: linux-media@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@redhat.com L: linux-media@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@gmail.com +L: linux-media@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@fr.zoreil.com L: netdev@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@iki.fi - S: Maintained - F: drivers/net/ethernet/fujitsu/eth16i.c - EXT2 FILE SYSTEM M: Jan Kara jack@suse.cz L: linux-ext4@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@xs4all.nl +L: linux-media@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@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@intel.com +M: Neil Horman nhorman@tuxdriver.com +L: linux-i2c@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@lightlink.com L: linux-i2c@vger.kernel.org @@@ -3858,11 -3752,12 +3853,11 @@@ S: Maintaine F: drivers/i2c/i2c-stub.c
I2C SUBSYSTEM -M: Wolfram Sang w.sang@pengutronix.de +M: Wolfram Sang wsa@the-dreams.de M: "Ben Dooks (embedded platforms)" ben-linux@fluff.org L: linux-i2c@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@xs4all.nl +L: linux-media@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@redhat.com M: Konrad Rzeszutek Wilk konrad@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@xs4all.nl +L: linux-media@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@themaw.net L: autofs@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@cs.columbia.edu +L: kvmarm@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@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@gmail.com +L: linux-media@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@sipsolutions.net L: linux-wireless@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@xs4all.nl +L: linux-media@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@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@xs4all.nl +L: linux-media@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@lsi.com L: linux-scsi@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@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@monstr.eu L: microblaze-uclinux@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@xs4all.nl +L: linux-media@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@rustcorp.com.au S: Maintained @@@ -5263,38 -5090,6 +5258,38 @@@ L: platform-driver-x86@vger.kernel.or S: Supported F: drivers/platform/x86/msi-wmi.c
+MT9M032 SENSOR DRIVER +M: Laurent Pinchart laurent.pinchart@ideasonboard.com +L: linux-media@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@ideasonboard.com +L: linux-media@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@ideasonboard.com +L: linux-media@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@ideasonboard.com +L: linux-media@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@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@vanbest.org - M: Andreas Mohr andi@lisas.de - L: netdev@vger.kernel.org - S: Maintained - F: drivers/net/ethernet/racal/ni5010.* - NILFS2 FILESYSTEM M: KONISHI Ryusuke konishi.ryusuke@lab.ntt.co.jp L: linux-nilfs@vger.kernel.org @@@ -5978,6 -5766,15 +5966,6 @@@ L: linux-i2c@vger.kernel.or S: Maintained F: drivers/i2c/muxes/i2c-mux-pca9541.c
-PCA9564/PCA9665 I2C BUS DRIVER -M: Wolfram Sang w.sang@pengutronix.de -L: linux-i2c@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@gonehiking.org S: Maintained @@@ -6446,14 -6243,6 +6434,14 @@@ L: linux-hexagon@vger.kernel.or S: Supported F: arch/hexagon/
+QUICKCAM PARALLEL PORT WEBCAMS +M: Hans Verkuil hverkuil@xs4all.nl +L: linux-media@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@inktank.com M: Sage Weil sage@inktank.com @@@ -6697,7 -6486,7 +6685,7 @@@ S: Supporte F: drivers/s390/net/
S390 ZCRYPT DRIVER -M: Holger Dengler hd@linux.vnet.ibm.com +M: Ingo Tuchscherer ingo.tuchscherer@de.ibm.com M: linux390@de.ibm.com L: linux-s390@vger.kernel.org W: http://www.ibm.com/developerworks/linux/linux390/ @@@ -6728,14 -6517,6 +6716,14 @@@ L: linux-arm-kernel@lists.infradead.or S: Supported F: drivers/mmc/host/s3cmci.*
+SAA6588 RDS RECEIVER DRIVER +M: Hans Verkuil hverkuil@xs4all.nl +L: linux-media@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@redhat.com L: linux-media@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@mihu.de +M: Hans Verkuil hverkuil@xs4all.nl L: linux-media@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@samsung.com +M: Andrzej Hajda a.hajda@samsung.com +L: linux-media@vger.kernel.org +S: Supported +F: drivers/media/i2c/s5c73m3/* + SERIAL DRIVERS M: Greg Kroah-Hartman gregkh@linuxfoundation.org L: linux-serial@vger.kernel.org @@@ -7033,8 -6808,7 +7021,8 @@@ S: Supporte F: drivers/net/ethernet/sfc/
SGI GRU DRIVER -M: Jack Steiner steiner@sgi.com +M: Dimitri Sivanich sivanich@sgi.com +M: Robin Holt holt@sgi.com S: Maintained F: drivers/misc/sgi-gru/
@@@ -7058,38 -6832,6 +7046,38 @@@ M: Robin Holt <holt@sgi.com S: Maintained F: drivers/misc/sgi-xp/
+SI470X FM RADIO RECEIVER I2C DRIVER +M: Hans Verkuil hverkuil@xs4all.nl +L: linux-media@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@xs4all.nl +L: linux-media@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@gmx.de +L: linux-media@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@gmx.de +L: linux-media@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@kernel.org L: sfi-devel@simplefirmware.org @@@ -7261,6 -7003,14 +7249,6 @@@ L: linux-fbdev@vger.kernel.or S: Maintained F: drivers/video/smscufx.c
-SN-IA64 (Itanium) SUB-PLATFORM -M: Jes Sorensen jes@sgi.com -L: linux-altix@sgi.com -L: linux-ia64@vger.kernel.org -W: http://www.sgi.com/altix -S: Maintained -F: arch/ia64/sn/ - SOC-CAMERA V4L2 SUBSYSTEM M: Guennadi Liakhovetski g.liakhovetski@gmx.de L: linux-media@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@synopsys.com +L: linux-snps-arc@vger.kernel.org +S: Supported +F: arch/arc/ + SYSV FILESYSTEM M: Christoph Hellwig hch@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@xs4all.nl +L: linux-media@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@redhat.com L: linux-media@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@xs4all.nl +L: linux-media@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@xs4all.nl +L: linux-media@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@redhat.com +M: Jiri Pirko jiri@resnulli.us L: netdev@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@xs4all.nl +L: linux-media@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@ideasonboard.com L: linux-usb@vger.kernel.org @@@ -8582,14 -8294,6 +8570,14 @@@ L: netdev@vger.kernel.or S: Maintained F: drivers/net/ethernet/via/via-velocity.*
+VIVI VIRTUAL VIDEO DRIVER +M: Hans Verkuil hverkuil@xs4all.nl +L: linux-media@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@trash.net L: netdev@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]));