Second merge window update
- Switch SMC over to rdma_get_gid_attr and remove the compat - Fix a crash in HFI1 with some BIOS's - Fix a randconfig failure -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEfB7FMLh+8QxL+6i3OG33FX4gmxoFAlt9z6kACgkQOG33FX4g mxqLag//Zr3RrNSmswNjl+6PrWeg88GQstAm4gQps8mR03eI8Ha5fAS6MWuq1U8+ LGP8bbBtE6fHSCkPSnN/owReZSTcTIbgWB021vBIUKUpytmxie+ugMVXIHwm6cIM E3pgPsRngTrqtuRxyOhyoaMKSjRCbSdMe43SWf42/S+9SxDkmXtBzymYT119bu/A eqU7z/HuRqcVxrgOinhPjcQkEFdRYUaRk+g6jzaQmZl8IjKHp/d3BSzmzbE6txMt txP5hu/msz4xkyusX/I6ZS3do+4WMIAMNhq9bVMo5pNu2RG1eo0LLmHgjsDsFI3u ZTaZQj6eYWlbwWRiOU+2Frf4kH4CGAyxlFVCr4yEvfe2VvEbZsLZbYuF1iasnqrP 3Mrbh7Esj4MfDT/QbunnoX+49X/Rzma/a+tu6hqAhnGjvYsaDyy8WSNwHMs65f7m sii58arik9exJHVKMXZ5FJJydBYBcPt5IlkUdoTTZ1eLkoc2B9lG6lKZbWxUYNPx uS6XOyR4fcsmLfKfEvQuLZznWi3Jo4R17QKlL5ulqHrZUJV4PZ4Eiu5izScZ4ci/ xcPGz1a4MT7Zg3V611qGSGt7zYDdD5+R+k/sDIOleCFIpueFzzh/I1oLkSIoXFIx DmwqCdRGeB5F7ZhfArFTezgiaMe55SPJKY5PAiThxzoostUGOfw= =6z1N -----END PGP SIGNATURE----- Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma Pull more rdma updates from Jason Gunthorpe: "This is the SMC cleanup promised, a randconfig regression fix, and kernel oops fix. Summary: - Switch SMC over to rdma_get_gid_attr and remove the compat - Fix a crash in HFI1 with some BIOS's - Fix a randconfig failure" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: IB/ucm: fix UCM link error IB/hfi1: Invalid NUMA node information can cause a divide by zero RDMA/smc: Replace ib_query_gid with rdma_get_gid_attr
This commit is contained in:
commit
1290290c92
|
@ -36,7 +36,7 @@ config INFINIBAND_USER_ACCESS
|
|||
rdma-core <https://github.com/linux-rdma/rdma-core>.
|
||||
|
||||
config INFINIBAND_USER_ACCESS_UCM
|
||||
bool "Userspace CM (UCM, DEPRECATED)"
|
||||
tristate "Userspace CM (UCM, DEPRECATED)"
|
||||
depends on BROKEN || COMPILE_TEST
|
||||
depends on INFINIBAND_USER_ACCESS
|
||||
help
|
||||
|
|
|
@ -198,7 +198,7 @@ int node_affinity_init(void)
|
|||
while ((dev = pci_get_device(ids->vendor, ids->device, dev))) {
|
||||
node = pcibus_to_node(dev->bus);
|
||||
if (node < 0)
|
||||
node = numa_node_id();
|
||||
goto out;
|
||||
|
||||
hfi1_per_node_cntr[node]++;
|
||||
}
|
||||
|
@ -206,6 +206,18 @@ int node_affinity_init(void)
|
|||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out:
|
||||
/*
|
||||
* Invalid PCI NUMA node information found, note it, and populate
|
||||
* our database 1:1.
|
||||
*/
|
||||
pr_err("HFI: Invalid PCI NUMA node. Performance may be affected\n");
|
||||
pr_err("HFI: System BIOS may need to be upgraded\n");
|
||||
for (node = 0; node < node_affinity.num_possible_nodes; node++)
|
||||
hfi1_per_node_cntr[node] = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void node_affinity_destroy(struct hfi1_affinity_node *entry)
|
||||
|
@ -622,8 +634,14 @@ int hfi1_dev_affinity_init(struct hfi1_devdata *dd)
|
|||
int curr_cpu, possible, i, ret;
|
||||
bool new_entry = false;
|
||||
|
||||
if (node < 0)
|
||||
node = numa_node_id();
|
||||
/*
|
||||
* If the BIOS does not have the NUMA node information set, select
|
||||
* NUMA 0 so we get consistent performance.
|
||||
*/
|
||||
if (node < 0) {
|
||||
dd_dev_err(dd, "Invalid PCI NUMA node. Performance may be affected\n");
|
||||
node = 0;
|
||||
}
|
||||
dd->node = node;
|
||||
|
||||
local_mask = cpumask_of_node(dd->node);
|
||||
|
|
|
@ -133,28 +133,4 @@ const struct ib_gid_attr *rdma_get_gid_attr(struct ib_device *device,
|
|||
void rdma_put_gid_attr(const struct ib_gid_attr *attr);
|
||||
void rdma_hold_gid_attr(const struct ib_gid_attr *attr);
|
||||
|
||||
/*
|
||||
* This is to be removed. It only exists to make merging rdma and smc simpler.
|
||||
*/
|
||||
static inline __deprecated int ib_query_gid(struct ib_device *device,
|
||||
u8 port_num, int index,
|
||||
union ib_gid *gid,
|
||||
struct ib_gid_attr *attr_out)
|
||||
{
|
||||
const struct ib_gid_attr *attr;
|
||||
|
||||
memset(attr_out, 0, sizeof(*attr_out));
|
||||
attr = rdma_get_gid_attr(device, port_num, index);
|
||||
if (IS_ERR(attr))
|
||||
return PTR_ERR(attr);
|
||||
|
||||
if (attr->ndev)
|
||||
dev_hold(attr->ndev);
|
||||
*attr_out = *attr;
|
||||
|
||||
rdma_put_gid_attr(attr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* _IB_CACHE_H */
|
||||
|
|
|
@ -145,17 +145,21 @@ int smc_ib_ready_link(struct smc_link *lnk)
|
|||
|
||||
static int smc_ib_fill_mac(struct smc_ib_device *smcibdev, u8 ibport)
|
||||
{
|
||||
struct ib_gid_attr gattr;
|
||||
union ib_gid gid;
|
||||
int rc;
|
||||
const struct ib_gid_attr *attr;
|
||||
int rc = 0;
|
||||
|
||||
rc = ib_query_gid(smcibdev->ibdev, ibport, 0, &gid, &gattr);
|
||||
if (rc || !gattr.ndev)
|
||||
attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, 0);
|
||||
if (IS_ERR(attr))
|
||||
return -ENODEV;
|
||||
|
||||
memcpy(smcibdev->mac[ibport - 1], gattr.ndev->dev_addr, ETH_ALEN);
|
||||
dev_put(gattr.ndev);
|
||||
return 0;
|
||||
if (attr->ndev)
|
||||
memcpy(smcibdev->mac[ibport - 1], attr->ndev->dev_addr,
|
||||
ETH_ALEN);
|
||||
else
|
||||
rc = -ENODEV;
|
||||
|
||||
rdma_put_gid_attr(attr);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Create an identifier unique for this instance of SMC-R.
|
||||
|
@ -180,29 +184,27 @@ bool smc_ib_port_active(struct smc_ib_device *smcibdev, u8 ibport)
|
|||
int smc_ib_determine_gid(struct smc_ib_device *smcibdev, u8 ibport,
|
||||
unsigned short vlan_id, u8 gid[], u8 *sgid_index)
|
||||
{
|
||||
struct ib_gid_attr gattr;
|
||||
union ib_gid _gid;
|
||||
const struct ib_gid_attr *attr;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < smcibdev->pattr[ibport - 1].gid_tbl_len; i++) {
|
||||
memset(&_gid, 0, SMC_GID_SIZE);
|
||||
memset(&gattr, 0, sizeof(gattr));
|
||||
if (ib_query_gid(smcibdev->ibdev, ibport, i, &_gid, &gattr))
|
||||
attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, i);
|
||||
if (IS_ERR(attr))
|
||||
continue;
|
||||
if (!gattr.ndev)
|
||||
continue;
|
||||
if (((!vlan_id && !is_vlan_dev(gattr.ndev)) ||
|
||||
(vlan_id && is_vlan_dev(gattr.ndev) &&
|
||||
vlan_dev_vlan_id(gattr.ndev) == vlan_id)) &&
|
||||
gattr.gid_type == IB_GID_TYPE_IB) {
|
||||
|
||||
if (attr->ndev &&
|
||||
((!vlan_id && !is_vlan_dev(attr->ndev)) ||
|
||||
(vlan_id && is_vlan_dev(attr->ndev) &&
|
||||
vlan_dev_vlan_id(attr->ndev) == vlan_id)) &&
|
||||
attr->gid_type == IB_GID_TYPE_ROCE) {
|
||||
if (gid)
|
||||
memcpy(gid, &_gid, SMC_GID_SIZE);
|
||||
memcpy(gid, &attr->gid, SMC_GID_SIZE);
|
||||
if (sgid_index)
|
||||
*sgid_index = i;
|
||||
dev_put(gattr.ndev);
|
||||
*sgid_index = attr->index;
|
||||
rdma_put_gid_attr(attr);
|
||||
return 0;
|
||||
}
|
||||
dev_put(gattr.ndev);
|
||||
rdma_put_gid_attr(attr);
|
||||
}
|
||||
return -ENODEV;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue