linux/drivers
Jack Morgenstein 6bec514a1e IB/mlx4: Use correct subnet-prefix in QP1 mads under SR-IOV
commit 8ec07bf8a8 upstream.

When sending QP1 MAD packets which use a GRH, the source GID
(which consists of the 64-bit subnet prefix, and the 64 bit port GUID)
must be included in the packet GRH.

For SR-IOV, a GID cache is used, since the source GID needs to be the
slave's source GID, and not the Hypervisor's GID. This cache also
included a subnet_prefix. Unfortunately, the subnet_prefix field in
the cache was never initialized (to the default subnet prefix 0xfe80::0).
As a result, this field remained all zeroes.  Therefore, when SR-IOV
was active, all QP1 packets which included a GRH had a source GID
subnet prefix of all-zeroes.

However, the subnet-prefix should initially be 0xfe80::0 (the default
subnet prefix). In addition, if OpenSM modifies a port's subnet prefix,
the new subnet prefix must be used in the GRH when sending QP1 packets.
To fix this we now initialize the subnet prefix in the SR-IOV GID cache
to the default subnet prefix. We update the cached value if/when OpenSM
modifies the port's subnet prefix. We take this cached value when sending
QP1 packets when SR-IOV is active.

Note that the value is stored as an atomic64. This eliminates any need
for locking when the subnet prefix is being updated.

Note also that we depend on the FW generating the "port management change"
event for tracking subnet-prefix changes performed by OpenSM. If running
early FW (before 2.9.4630), subnet prefix changes will not be tracked (but
the default subnet prefix still will be stored in the cache; therefore
users who do not modify the subnet prefix will not have a problem).
IF there is a need for such tracking also for early FW, we will add that
capability in a subsequent patch.

Fixes: 1ffeb2eb8b ("IB/mlx4: SR-IOV IB context objects and proxy/tunnel SQP support")
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2016-10-07 15:23:47 +02:00
..
accessibility
acpi ACPI / SRAT: fix SRAT parsing order with both LAPIC and X2APIC present 2016-09-07 08:32:45 +02:00
amba
android drivers: android: correct the size of struct binder_uintptr_t for BC_DEAD_BINDER_DONE 2016-03-03 15:07:10 -08:00
ata libata: LITE-ON CX1-JB256-HP needs lower max_sectors 2016-08-10 11:49:29 +02:00
atm
auxdisplay
base base: make module_create_drivers_dir race-free 2016-07-27 09:47:32 -07:00
bcma x86/quirks: Add early quirk to reset Apple AirPort card 2016-08-10 11:49:24 +02:00
block nbd: ratelimit error msgs after socket close 2016-05-11 11:21:10 +02:00
bluetooth Bluetooth: Add support for Intel Bluetooth device 8265 [8087:0a2b] 2016-09-15 08:27:49 +02:00
bus bus: arm-ccn: Fix XP watchpoint settings bitmask 2016-09-24 10:07:40 +02:00
cdrom
char hwrng: omap - Fix assumption that runtime_get_sync will always succeed 2016-10-07 15:23:44 +02:00
clk clk: xgene: Fix divider with non-zero shift value 2016-09-15 08:27:39 +02:00
clocksource clocksource/drivers/sun4i: Clear interrupts after stopping timer in probe function 2016-09-24 10:07:35 +02:00
connector connector: bump skb->users before callback invocation 2016-01-04 21:46:45 -05:00
cpufreq cpufreq: Fix GOV_LIMITS handling for the userspace governor 2016-09-15 08:27:54 +02:00
cpuidle cpuidle: Fix cpuidle_state_is_coupled() argument in cpuidle_enter() 2016-06-07 18:14:34 -07:00
crypto crypto: caam - fix IV loading for authenc (giv)decryption 2016-09-15 08:27:53 +02:00
dca
devfreq
dio
dma dmaengine: at_xdmac: fix to pass correct device identity to free_irq() 2016-10-07 15:23:46 +02:00
dma-buf
edac EDAC: Increment correct counter in edac_inc_ue_error() 2016-09-07 08:32:41 +02:00
eisa
extcon extcon: max77843: Use correct size for reading the interrupt register 2016-05-04 14:48:54 -07:00
firewire
firmware efi: Expose non-blocking set_variable() wrapper to efivars 2016-05-04 14:48:49 -07:00
fmc
fpga
gpio gpio: sa1100: fix irq probing for ucb1x00 2016-10-07 15:23:42 +02:00
gpu drm/radeon/si/dpm: add workaround for for Jet parts 2016-10-07 15:23:40 +02:00
hid HID: core: prevent out-of-bound readings 2016-09-15 08:27:48 +02:00
hsi
hv drivers:hv: Lock access to hyperv_mmio resource tree 2016-09-15 08:27:50 +02:00
hwmon hwmon: (adt7411) set bit 3 in CFG1 register 2016-10-07 15:23:42 +02:00
hwspinlock drivers/hwspinlock: fix race between radix tree insertion and lookup 2016-02-25 12:01:23 -08:00
hwtracing intel_th: Fix a deadlock in modprobing 2016-08-10 11:49:30 +02:00
i2c i2c: qup: skip qup_i2c_suspend if the device is already runtime suspended 2016-09-30 10:18:38 +02:00
ide
idle intel_idle: Support for Intel Xeon Phi Processor x200 Product Family 2016-09-15 08:27:46 +02:00
iio include/linux/kernel.h: change abs() macro so it uses consistent return type 2016-09-30 10:18:33 +02:00
infiniband IB/mlx4: Use correct subnet-prefix in QP1 mads under SR-IOV 2016-10-07 15:23:47 +02:00
input Input: xpad - move pending clear to the correct location 2016-09-15 08:27:48 +02:00
iommu Add braces to avoid "ambiguous ‘else’" compiler warnings 2016-09-30 10:18:35 +02:00
ipack
irqchip irqchip/gicv3: Silence noisy DEBUG_PER_CPU_MAPS warning 2016-10-07 15:23:42 +02:00
isdn ser_gigaset: remove unnecessary kfree() calls from release method 2015-12-15 13:24:21 -05:00
leds
lguest
lightnvm lightnvm: put bio before return 2016-09-24 10:07:35 +02:00
macintosh
mailbox
mcb mcb: Fixed bar number assignment for the gdd 2016-06-01 12:15:53 -07:00
md md-cluster: make md-cluster also can work when compiled into kernel 2016-09-24 10:07:41 +02:00
media gspca: avoid unused variable warnings 2016-10-07 15:23:45 +02:00
memory memory: omap-gpmc: Fix omap gpmc EXTRADELAY timing 2016-07-27 09:47:35 -07:00
memstick
message
mfd mfd: qcom_rpm: Parametrize also ack selector size 2016-08-20 18:09:18 +02:00
misc cxl: Enable PCI device ID for future IBM CXL adapter 2016-09-15 08:27:41 +02:00
mmc mmc: pxamci: fix potential oops 2016-10-07 15:23:41 +02:00
mtd mtd: nand: davinci: Reinitialize the HW ECC engine in 4bit hwctl 2016-10-07 15:23:40 +02:00
net brcmsmac: Initialize power in brcms_c_stf_ss_algo_channel_get() 2016-10-07 15:23:46 +02:00
nfc NFC: fdp: Detect errors from fdp_nci_create_conn() 2016-10-07 15:23:44 +02:00
ntb
nubus
nvdimm libnvdimm, pfn: fix uuid validation 2016-04-20 15:41:54 +09:00
nvme nvme: Call pci_disable_device on the error path. 2016-09-15 08:27:51 +02:00
nvmem nvmem: mxs-ocotp: fix buffer overflow in read 2016-05-11 11:21:21 +02:00
of of: fix reference counting in of_graph_get_endpoint_by_regs 2016-09-07 08:32:41 +02:00
oprofile
parisc
parport
pci genirq/msi: Make sure PCI MSIs are activated early 2016-09-07 08:32:38 +02:00
pcmcia pcmcia: db1xxx_ss: fix last irq_to_gpio user 2016-04-20 15:42:09 +09:00
perf drivers/perf: arm_pmu: Fix leak in error path 2016-10-07 15:23:41 +02:00
phy phy: core: fix wrong err handle for phy_power_on 2016-03-03 15:07:28 -08:00
pinctrl pinctrl: uniphier: fix .pin_dbg_show() callback 2016-10-07 15:23:41 +02:00
platform mfd: cros_ec: Add cros_ec_cmd_xfer_status() helper 2016-09-07 08:32:43 +02:00
pnp PNP: Add Broadwell to Intel MCH size workaround 2016-08-16 09:30:48 +02:00
power power: supply: max17042_battery: fix model download bug. 2016-09-30 10:18:39 +02:00
powercap
pps pps: do not crash when failed to register 2016-08-10 11:49:25 +02:00
ps3
ptp
pwm pwm: Mark all devices as "might sleep" 2016-09-30 10:18:37 +02:00
rapidio
ras
regulator regulator: qcom_smd: Fix voltage ranges for pm8x41 2016-10-07 15:23:43 +02:00
remoteproc remoteproc: Fix potential race condition in rproc_add 2016-08-20 18:09:20 +02:00
reset
rpmsg
rtc rtc: s3c: Add s3c_rtc_{enable/disable}_clk in s3c_rtc_setfreq() 2016-08-20 18:09:27 +02:00
s390 s390/sclp_ctl: fix potential information leak with /dev/sclp 2016-09-15 08:27:51 +02:00
sbus
scsi fnic: pci_dma_mapping_error() doesn't return an error code 2016-10-07 15:23:45 +02:00
sfi
sh drivers: sh: Restore legacy clock domain on SuperH platforms 2016-03-09 15:34:49 -08:00
sn
soc soc: qcom/spm: shut up uninitialized variable warning 2016-09-24 10:07:42 +02:00
spi spi: sh-msiof: Avoid invalid clock generator parameters 2016-10-07 15:23:42 +02:00
spmi
ssb
staging Staging: iio: adc: fix indent on break statement 2016-09-30 10:18:36 +02:00
target target: Fix ordered task CHECK_CONDITION early exception handling 2016-08-20 18:09:26 +02:00
tc
thermal thermal: cpu_cooling: fix improper order during initialization 2016-07-27 09:47:29 -07:00
thunderbolt thunderbolt: Fix double free of drom buffer 2016-06-01 12:15:53 -07:00
tty serial: 8250: added acces i/o products quad and octal serial cards 2016-09-24 10:07:38 +02:00
uio
usb usb: gadget: fsl_qe_udc: signedness bug in qe_get_frame() 2016-10-07 15:23:42 +02:00
uwb
vfio vfio/pci: Fix NULL pointer oops in error interrupt setup handling 2016-09-07 08:32:37 +02:00
vhost vhost/scsi: fix reuse of &vq->iov[out] in response 2016-09-15 08:27:53 +02:00
video fbdev: da8xx-fb: fix videomodes of lcd panels 2016-05-04 14:48:51 -07:00
virt
virtio virtio: fix memory leak in virtqueue_add() 2016-09-07 08:32:36 +02:00
vlynq
vme
w1 w1:omap_hdq: fix regression 2016-08-20 18:09:22 +02:00
watchdog watchdog: rc32434_wdt: fix ioctl error handling 2016-04-12 09:08:54 -07:00
xen xenbus: don't bail early from xenbus_dev_request_and_reply() 2016-08-10 11:49:26 +02:00
zorro
Kconfig
Makefile