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>.
|
rdma-core <https://github.com/linux-rdma/rdma-core>.
|
||||||
|
|
||||||
config INFINIBAND_USER_ACCESS_UCM
|
config INFINIBAND_USER_ACCESS_UCM
|
||||||
bool "Userspace CM (UCM, DEPRECATED)"
|
tristate "Userspace CM (UCM, DEPRECATED)"
|
||||||
depends on BROKEN || COMPILE_TEST
|
depends on BROKEN || COMPILE_TEST
|
||||||
depends on INFINIBAND_USER_ACCESS
|
depends on INFINIBAND_USER_ACCESS
|
||||||
help
|
help
|
||||||
|
|
|
@ -198,7 +198,7 @@ int node_affinity_init(void)
|
||||||
while ((dev = pci_get_device(ids->vendor, ids->device, dev))) {
|
while ((dev = pci_get_device(ids->vendor, ids->device, dev))) {
|
||||||
node = pcibus_to_node(dev->bus);
|
node = pcibus_to_node(dev->bus);
|
||||||
if (node < 0)
|
if (node < 0)
|
||||||
node = numa_node_id();
|
goto out;
|
||||||
|
|
||||||
hfi1_per_node_cntr[node]++;
|
hfi1_per_node_cntr[node]++;
|
||||||
}
|
}
|
||||||
|
@ -206,6 +206,18 @@ int node_affinity_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
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)
|
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;
|
int curr_cpu, possible, i, ret;
|
||||||
bool new_entry = false;
|
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;
|
dd->node = node;
|
||||||
|
|
||||||
local_mask = cpumask_of_node(dd->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_put_gid_attr(const struct ib_gid_attr *attr);
|
||||||
void rdma_hold_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 */
|
#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)
|
static int smc_ib_fill_mac(struct smc_ib_device *smcibdev, u8 ibport)
|
||||||
{
|
{
|
||||||
struct ib_gid_attr gattr;
|
const struct ib_gid_attr *attr;
|
||||||
union ib_gid gid;
|
int rc = 0;
|
||||||
int rc;
|
|
||||||
|
|
||||||
rc = ib_query_gid(smcibdev->ibdev, ibport, 0, &gid, &gattr);
|
attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, 0);
|
||||||
if (rc || !gattr.ndev)
|
if (IS_ERR(attr))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
memcpy(smcibdev->mac[ibport - 1], gattr.ndev->dev_addr, ETH_ALEN);
|
if (attr->ndev)
|
||||||
dev_put(gattr.ndev);
|
memcpy(smcibdev->mac[ibport - 1], attr->ndev->dev_addr,
|
||||||
return 0;
|
ETH_ALEN);
|
||||||
|
else
|
||||||
|
rc = -ENODEV;
|
||||||
|
|
||||||
|
rdma_put_gid_attr(attr);
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create an identifier unique for this instance of SMC-R.
|
/* 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,
|
int smc_ib_determine_gid(struct smc_ib_device *smcibdev, u8 ibport,
|
||||||
unsigned short vlan_id, u8 gid[], u8 *sgid_index)
|
unsigned short vlan_id, u8 gid[], u8 *sgid_index)
|
||||||
{
|
{
|
||||||
struct ib_gid_attr gattr;
|
const struct ib_gid_attr *attr;
|
||||||
union ib_gid _gid;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < smcibdev->pattr[ibport - 1].gid_tbl_len; i++) {
|
for (i = 0; i < smcibdev->pattr[ibport - 1].gid_tbl_len; i++) {
|
||||||
memset(&_gid, 0, SMC_GID_SIZE);
|
attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, i);
|
||||||
memset(&gattr, 0, sizeof(gattr));
|
if (IS_ERR(attr))
|
||||||
if (ib_query_gid(smcibdev->ibdev, ibport, i, &_gid, &gattr))
|
|
||||||
continue;
|
continue;
|
||||||
if (!gattr.ndev)
|
|
||||||
continue;
|
if (attr->ndev &&
|
||||||
if (((!vlan_id && !is_vlan_dev(gattr.ndev)) ||
|
((!vlan_id && !is_vlan_dev(attr->ndev)) ||
|
||||||
(vlan_id && is_vlan_dev(gattr.ndev) &&
|
(vlan_id && is_vlan_dev(attr->ndev) &&
|
||||||
vlan_dev_vlan_id(gattr.ndev) == vlan_id)) &&
|
vlan_dev_vlan_id(attr->ndev) == vlan_id)) &&
|
||||||
gattr.gid_type == IB_GID_TYPE_IB) {
|
attr->gid_type == IB_GID_TYPE_ROCE) {
|
||||||
if (gid)
|
if (gid)
|
||||||
memcpy(gid, &_gid, SMC_GID_SIZE);
|
memcpy(gid, &attr->gid, SMC_GID_SIZE);
|
||||||
if (sgid_index)
|
if (sgid_index)
|
||||||
*sgid_index = i;
|
*sgid_index = attr->index;
|
||||||
dev_put(gattr.ndev);
|
rdma_put_gid_attr(attr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
dev_put(gattr.ndev);
|
rdma_put_gid_attr(attr);
|
||||||
}
|
}
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue