linux/drivers
Elad Kanfi e5df49d564 net: nps_enet: Tx handler synchronization
Below is a description of a possible problematic
sequence. CPU-A is sending a frame and CPU-B handles
the interrupt that indicates the frame was sent. CPU-B
reads an invalid value of tx_packet_sent.

	CPU-A				CPU-B
	-----				-----
	nps_enet_send_frame
	.
	.
	tx_skb = skb
	tx_packet_sent = true
	order HW to start tx
	.
	.
	HW complete tx
			    ------> 	get tx complete interrupt
					.
					.
					if(tx_packet_sent == true)
						handle tx_skb

	end memory transaction
	(tx_packet_sent actually
	 written)

Furthermore there is a dependency between tx_skb and tx_packet_sent.
There is no assurance that tx_skb contains a valid pointer at CPU B
when it sees tx_packet_sent == true.

Solution:

Initialize tx_skb to NULL and use it to indicate that packet was sent,
in this way tx_packet_sent can be removed.
Add a write memory barrier after setting tx_skb in order to make sure
that it is valid before HW is informed and IRQ is fired.

Fixed sequence will be:

       CPU-A                           CPU-B
       -----                           -----

	tx_skb = skb
	wmb()
	.
	.
	order HW to start tx
	.
	.
	HW complete tx
			------>		get tx complete interrupt
					.
					.
					if(tx_skb != NULL)
						handle tx_skb

					tx_skb = NULL

Signed-off-by: Elad Kanfi <eladkan@mellanox.com>
Acked-by: Noam Camus <noamca@mellanox.com>
Acked-by: Gilad Ben-Yossef <giladby@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-05-10 15:04:49 -04:00
..
accessibility
acpi Power management and ACPI fixes for v4.6-rc7 2016-05-06 11:58:45 -07:00
amba
android
ata ata: add AMD Seattle platform driver 2016-04-13 15:14:24 -04:00
atm Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2016-03-17 21:38:27 -07:00
auxdisplay
base Merge branches 'pm-opp-fixes', 'pm-cpufreq-fixes' and 'pm-cpuidle-fixes' 2016-05-06 13:16:22 +02:00
bcma bcma: fix building without OF_IRQ 2016-03-23 17:52:10 +02:00
block rbd: report unsupported features to syslog 2016-04-28 10:07:43 +02:00
bluetooth
bus mvebu fixes for 4.6 (part 1) 2016-04-12 12:35:07 -07:00
cdrom
char hwrng: bcm63xx - fix device tree compilation 2016-04-05 20:23:11 +08:00
clk The i.MX clock fixes for 4.6: 2016-04-15 15:40:49 -07:00
clocksource Merge branches 'perf-urgent-for-linus', 'smp-urgent-for-linus' and 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2016-04-23 11:45:52 -07:00
connector
cpufreq Merge branches 'pm-opp-fixes', 'pm-cpufreq-fixes' and 'pm-cpuidle-fixes' 2016-05-06 13:16:22 +02:00
cpuidle ARM: cpuidle: Pass on arm_cpuidle_suspend()'s return value 2016-04-28 15:15:14 +02:00
crypto crypto: qat - fix adf_ctl_drv.c:undefined reference to adf_init_pf_wq 2016-05-03 15:53:48 +08:00
dca
devfreq PM / devfreq: Spelling s/frequnecy/frequency/ 2016-03-17 02:30:16 +01:00
dio
dma Merge branch 'fix/edma' into fixes 2016-04-16 22:52:03 +05:30
dma-buf dma-buf: Update docs for SYNC ioctl 2016-03-21 09:26:45 +01:00
edac EDAC: i7core, sb_edac: Don't return NOTIFY_BAD from mce_decoder callback 2016-04-29 15:43:10 +02:00
eisa
extcon extcon: palmas: Drop stray IRQF_EARLY_RESUME flag 2016-04-04 08:32:45 +09:00
firewire IEEE 1394 subsystem patch: 2016-03-25 08:52:25 -07:00
firmware virtio/qemu: fixes for 4.6 2016-05-05 08:26:54 -07:00
fmc
fpga
gpio gpiolib-acpi: Duplicate con_id string when adding it to the crs lookup list 2016-04-30 13:51:59 +02:00
gpu Merge tag 'drm-intel-fixes-2016-05-02' of git://anongit.freedesktop.org/drm-intel into drm-fixes 2016-05-05 12:12:09 +10:00
hid Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid 2016-05-03 11:06:01 -07:00
hsi
hv Drivers: hv: vmbus: Fix signaling logic in hv_need_to_signal_on_read() 2016-04-30 14:05:44 -07:00
hwmon hwmon: (max1111) Return -ENODEV from max1111_read_channel if not instantiated 2016-03-27 10:37:48 -07:00
hwspinlock
hwtracing
i2c i2c: exynos5: Fix possible ABBA deadlock by keeping I2C clock prepared 2016-04-22 15:31:54 +02:00
ide ide: palm_bk3710: test clock rate to avoid division by 0 2016-03-20 16:59:27 -04:00
idle intel_idle: Add KBL support 2016-04-07 22:11:08 +02:00
iio iio: imu: mpu6050: Fix name/chip_id when using ACPI 2016-05-04 08:44:27 +01:00
infiniband Late 4.6-rc fixes 2016-05-07 08:10:08 -07:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2016-05-04 16:07:50 -07:00
iommu iommu/arm-smmu: Don't allocate resources for bypass domains 2016-04-21 16:47:32 +02:00
ipack
irqchip irqchip/mips-gic: Don't overrun pcpu_masks array 2016-04-21 21:04:29 +02:00
isdn mISDN: Fixing missing validation in base_sock_bind() 2016-04-13 23:00:50 -04:00
leds platform-drivers-x86 for 4.6-1 2016-03-23 17:20:59 -07:00
lguest lguest, x86/entry/32: Fix handling of guest syscalls using interrupt gates 2016-04-01 08:58:13 +02:00
lightnvm lightnvm: do not load L2P table if not supported 2016-03-18 18:10:38 -07:00
macintosh
mailbox Merge branch 'mailbox-devel' of git://git.linaro.org/landing-teams/working/fujitsu/integration 2016-04-14 18:40:47 -07:00
mcb
md Merge tag 'md/4.6-rc6-fix' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md 2016-05-02 12:22:51 -07:00
media media fixes for v4.6-rc7 2016-05-07 08:17:45 -07:00
memory MTD updates for v4.6 2016-03-24 19:57:15 -07:00
memstick drivers/memstick/host/r592.c: avoid gcc-6 warning 2016-03-25 16:37:42 -07:00
message
mfd - New Drivers 2016-03-18 10:15:11 -07:00
misc Char/Misc driver fixes for 4.6-rc7 2016-05-07 10:53:32 -07:00
mmc mmc: sunxi: Disable eMMC HS-DDR (MMC_CAP_1_8V_DDR) for Allwinner A80 2016-04-28 11:43:54 +02:00
mtd One MTD fix for v4.6-rc4: 2016-04-15 15:25:09 -07:00
net net: nps_enet: Tx handler synchronization 2016-05-10 15:04:49 -04:00
nfc Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2016-03-19 10:05:34 -07:00
ntb NTB: Remove _addr functions from ntb_hw_amd 2016-03-26 11:44:33 -04:00
nubus
nvdimm libnvdimm, pfn: fix memmap reservation sizing 2016-04-30 13:07:06 -07:00
nvme NVMe: Always use MSI/MSI-x interrupts 2016-04-14 14:04:50 -06:00
nvmem nvmem: mxs-ocotp: fix buffer overflow in read 2016-05-02 08:18:01 -07:00
of DeviceTree updates for 4.6: 2016-03-19 15:15:07 -07:00
oprofile mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
parisc PCI changes for the v4.6 merge window: 2016-03-16 14:45:55 -07:00
parport
pci PCI updates for v4.6: 2016-04-18 19:52:47 -07:00
pcmcia pcmcia: db1xxx_ss: fix last irq_to_gpio user 2016-03-29 22:48:53 +02:00
perf drivers/perf: arm-pmu: fix RCU usage on pmu resume from low-power 2016-04-21 15:03:06 +01:00
phy phy: rockchip-emmc: should be a child device of the GRF 2016-04-13 18:33:05 +05:30
pinctrl pinctrl: single: Fix pcs_parse_bits_in_pinctrl_entry to use __ffs than ffs 2016-04-15 11:26:55 +02:00
platform platform-drivers-x86 for 4.6-3 2016-04-27 08:57:11 -07:00
pnp
power Power management and ACPI material for v4.6-rc1, part 2 2016-03-25 16:55:37 -07:00
powercap powercap: intel_rapl: Add missing Haswell model 2016-04-05 03:44:48 +02:00
pps
ps3
ptp Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2016-03-15 12:13:56 -07:00
pwm pwm: fsl-ftm: Use flat regmap cache 2016-04-14 16:54:00 +02:00
rapidio rapidio/mport_cdev: fix uapi type definitions 2016-05-05 17:38:53 -07:00
ras
regulator - New Drivers 2016-03-18 10:15:11 -07:00
remoteproc remoteproc: st: fix check of syscon_regmap_lookup_by_phandle() return value 2016-03-28 16:19:00 -07:00
reset
rpmsg
rtc rtc: ds1307: Use irq when available for wakeup-source device 2016-04-21 23:21:00 +02:00
s390 s390/sclp_ctl: fix potential information leak with /dev/sclp 2016-04-27 09:33:39 +02:00
sbus
scsi cxgbi: fix uninitialized flowi6 2016-04-25 16:20:49 -04:00
sfi
sh
sn
soc Revert "soc: mediatek: SCPSYS: Fix double enabling of regulators" 2016-04-13 11:55:08 +02:00
spi Merge remote-tracking branches 'spi/fix/omap2' and 'spi/fix/rockchip' into spi-linus 2016-04-04 10:05:49 -07:00
spmi
ssb
staging Final set of -rc fixes for 4.6 2016-04-29 17:07:54 -07:00
target target: add a new add_wwn_groups fabrics method 2016-03-30 20:06:44 -07:00
tc
thermal thermal: use %d to print S32 parameters 2016-04-27 15:54:51 -07:00
thunderbolt
tty devpts: more pty driver interface cleanups 2016-04-26 15:47:32 -07:00
uio
usb Revert "USB / PM: Allow USB devices to remain runtime-suspended when sleeping" 2016-05-02 08:44:31 -07:00
uwb
vfio VFIO updates for v4.6-rc1 2016-03-17 13:05:09 -07:00
vhost Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending 2016-03-22 12:41:14 -07:00
video omapfb: panel-sharp-ls037v7dw01: fix check of gpio_to_desc() return value 2016-04-18 12:18:37 +03:00
virt
virtio virtio: Silence uninitialized variable warning 2016-05-01 15:50:08 +03:00
vlynq
vme
w1
watchdog hpwdt: use nmi_panic() when kernel panics in NMI handler 2016-03-22 15:36:02 -07:00
xen xen/evtchn: fix ring resize when binding new events 2016-05-04 16:37:01 +01:00
zorro
Kconfig
Makefile