net/mlx5: fix UAR memory mapping type
authorViacheslav Ovsiienko <viacheslavo@mellanox.com>
Wed, 22 Jul 2020 14:59:08 +0000 (14:59 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 29 Jul 2020 22:41:23 +0000 (00:41 +0200)
commita0bfe9d56f746c749ff4cf275e88469fd952b01c
treecfd47bf5253e8878e6f09ff8b5e193aafc3bc056
parentbe766d4369ea05fad6107d32ff996aa808079525
net/mlx5: fix UAR memory mapping type

The User Access Region is a special mechanism to provide direct
access to the hardware registers, and is the part of PCI address
space that is mapped to CPU virtual address. The mapping can be
performed with the type "Write-Combining" or "Non-Cached", and
these ones might be supported or not on different setups.

To prevent device probing failure the UAR allocation attempt
with alternative mapping type is performed. The datapath
takes the actual UAR mapping into account on queue creation.

There was another issue with NULL UAR base address.
OFED 5.0.x and Upstream rdma_core before v29 returned the NULL as
UAR base address if UAR was not the first object in the UAR page.
It caused the PMD failure and we should try to get another UAR
till we get the first one with non-NULL base address returned.

Fixes: fc4d4f732bbc ("net/mlx5: introduce shared UAR resource")

Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
Acked-by: Ori Kam <orika@mellanox.com>
drivers/net/mlx5/mlx5.c
drivers/net/mlx5/mlx5_defs.h