net/mlx4: share memory region resources
authorAdrien Mazarguil <adrien.mazarguil@6wind.com>
Thu, 2 Nov 2017 18:14:22 +0000 (19:14 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 3 Nov 2017 20:30:41 +0000 (21:30 +0100)
commit0d03353077181299d33a37e52d93bba50fa5ba2a
tree9fa825511bc0c5a5bb0e8795584f478369c0f2d0
parentb3d197b4350594512e847bcefbb28ee8332f6fe0
net/mlx4: share memory region resources

Memory regions assigned to hardware and used during Tx/Rx are mapped to
mbuf pools. Each Rx queue creates its own MR based on the mempool
provided during queue setup, while each Tx queue looks up and registers
MRs for all existing mbuf pools instead.

Since most applications use few large mbuf pools (usually only a single
one per NUMA node) common to all Tx/Rx queues, the above approach wastes
hardware resources due to redundant MRs. This negatively affects
performance, particularly with large numbers of queues.

This patch therefore makes the entire MR registration common to all
queues using a reference count. A spinlock is added to protect against
asynchronous registration that may occur from the Tx side where new
mempools are discovered based on mbuf data.

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
drivers/net/mlx4/mlx4.h
drivers/net/mlx4/mlx4_mr.c
drivers/net/mlx4/mlx4_rxq.c
drivers/net/mlx4/mlx4_rxtx.h
drivers/net/mlx4/mlx4_txq.c