linux-hardened/drivers
Pradeep Satyanarayana 68e995a295 IPoIB/cm: Add connected mode support for devices without SRQs
Some IB adapters (notably IBM's eHCA) do not implement SRQs (shared
receive queues).  The current IPoIB connected mode support only works
on devices that support SRQs.

Fix this by adding support for using the receive queue of each
connected mode receive QP.  The disadvantage of this compared to using
an SRQ is that it means a full queue of receives must be posted for
each remote connected mode peer, which means that total memory usage
is potentially much higher than when using SRQs.  To manage this, add
a new module parameter "max_nonsrq_conn_qp" that limits the number of
connections allowed per interface.

The rest of the changes are fairly straightforward: we use a table of
struct ipoib_cm_rx to hold all the active connections, and put the
table index of the connection in the high bits of receive WR IDs.
This is needed because we cannot rely on the struct ib_wc.qp field for
non-SRQ receive completions.  Most of the rest of the changes just
test whether or not an SRQ is available, and post receives or find
received packets in the right place depending on the answer.

Cleaning up dead connections actually becomes simpler, because we do
not have to do the "last WQE reached" dance that is required to
destroy QPs attached to an SRQ.  We just move the QP to the error
state and wait for all pending receives to be flushed.

Signed-off-by: Pradeep Satyanarayana <pradeeps@linux.vnet.ibm.com>

[ Completely rewritten and split up, based on Pradeep's work.  Several
  bugs fixed and no doubt several bugs introduced.  - Roland ]

Signed-off-by: Roland Dreier <rolandd@cisco.com>
2008-01-25 14:15:24 -08:00
..
acorn/char
acpi Driver core: change sysdev classes to use dynamic kobject names 2008-01-24 20:40:40 -08:00
amba
ata pata_pdc202xx_old: Fix crashes with ATAPI 2008-01-19 21:29:39 -08:00
atm [ATM] atm/suni.c: Fix section mismatch. 2008-01-20 20:31:44 -08:00
auxdisplay
base Driver core: coding style fixes 2008-01-24 22:50:12 -08:00
block Kobject: convert drivers/* from kobject_unregister() to kobject_put() 2008-01-24 20:40:40 -08:00
bluetooth
cdrom
char Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2008-01-25 08:38:25 -08:00
clocksource
connector
cpufreq Kobject: convert drivers/* from kobject_unregister() to kobject_put() 2008-01-24 20:40:40 -08:00
cpuidle Kobject: convert drivers/* from kobject_unregister() to kobject_put() 2008-01-24 20:40:40 -08:00
crypto Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2008-01-25 08:38:25 -08:00
dca
dio
dma DMA: Convert from class_device to device for DMA engine 2008-01-24 20:40:05 -08:00
edac Driver core: change sysdev classes to use dynamic kobject names 2008-01-24 20:40:40 -08:00
eisa
firewire
firmware Kobject: convert drivers/* from kobject_unregister() to kobject_put() 2008-01-24 20:40:40 -08:00
hid
hwmon hwmon: (it87) request only Environment Controller ports 2008-01-22 07:21:38 -05:00
i2c driver core: Make the dev_*() family of macros in device.h complete 2008-01-24 20:40:08 -08:00
ide Driver core: convert block from raw kobjects to core devices 2008-01-24 20:40:36 -08:00
ieee1394 ieee1394: use class iteration api 2008-01-24 20:40:44 -08:00
infiniband IPoIB/cm: Add connected mode support for devices without SRQs 2008-01-25 14:15:24 -08:00
input [SPARC64]: Fix section error in sparcspkr 2008-01-21 22:34:31 -08:00
isdn Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6 2008-01-25 08:35:13 -08:00
kvm Driver core: change sysdev classes to use dynamic kobject names 2008-01-24 20:40:40 -08:00
leds
lguest Remove bogus duplicate CONFIG_LGUEST_GUEST entry. 2008-01-19 21:29:39 -08:00
macintosh Driver core: change sysdev classes to use dynamic kobject names 2008-01-24 20:40:40 -08:00
mca
md Kobject: convert drivers/* from kobject_unregister() to kobject_put() 2008-01-24 20:40:40 -08:00
media fix wrong sized spinlock flags argument 2008-01-17 15:42:30 -08:00
message
mfd MCP_UCB1200: Convert from class_device to device 2008-01-24 20:40:06 -08:00
misc kobject: convert ibmasm to use kref, not kobject 2008-01-24 20:40:08 -08:00
mmc
mtd mtd: Convert from class_device to device for MTD/mtdchar 2008-01-24 20:40:06 -08:00
net Kobject: convert drivers/* from kobject_unregister() to kobject_put() 2008-01-24 20:40:40 -08:00
nubus
of
oprofile
parisc Kobject: convert drivers/* from kobject_unregister() to kobject_put() 2008-01-24 20:40:40 -08:00
parport
pci Kobject: convert drivers/* from kobject_unregister() to kobject_put() 2008-01-24 20:40:40 -08:00
pcmcia PCMCIA: use proper call to driver_create_file 2008-01-24 20:40:33 -08:00
pnp pnpacpi: print resource shortage message only once (more) 2008-01-17 15:38:58 -08:00
power power supply : use class iteration api 2008-01-24 20:40:44 -08:00
ps3
rapidio
rtc rtc: use class iteration api 2008-01-24 20:40:44 -08:00
s390 zfcp: Use device_driver default attribute groups. 2008-01-24 20:40:34 -08:00
sbus
scsi scsi: use class iteration api 2008-01-24 20:40:45 -08:00
serial kobject: convert icom to use kref, not kobject 2008-01-24 20:40:09 -08:00
sh
sn
spi spi: use class iteration api 2008-01-24 20:40:45 -08:00
ssb
tc
telephony
uio UIO: constify function pointer tables 2008-01-24 20:40:43 -08:00
usb USB: use proper call to driver_create_file 2008-01-24 20:40:33 -08:00
video Disable VGA text console for AVR32 architecture 2008-01-25 08:31:40 +01:00
virtio
w1 W1: w1_therm.c is flagging 0C etc as invalid 2008-01-22 09:17:48 -08:00
watchdog [AVR32] Add support for AT32AP7001 and AT32AP7002 2008-01-25 08:31:41 +01:00
xen
zorro
Kconfig
Makefile