From 741d26b9f826673bee267d884b614b29dc71f417 Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Wed, 25 Mar 2015 15:40:46 -0700 Subject: [PATCH] pick --- meta | 5 +- patches/ibacm-use-pkey-0xffff-or-0x7ff | 73 ++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 patches/ibacm-use-pkey-0xffff-or-0x7ff diff --git a/meta b/meta index a59f7e6..d047ac9 100644 --- a/meta +++ b/meta @@ -1,7 +1,8 @@ Version: 1 -Previous: f6640c013c4074157b9effa3df139f13808ccae7 -Head: 0d16f710364fa187531eff8750fe24760a9ad391 +Previous: bf5ef2fbc5256c58e45eb414ef36347ff5657ba7 +Head: 845eea60040c7cfd84270a20a8699568c0c7f3ab Applied: + ibacm-use-pkey-0xffff-or-0x7ff: 845eea60040c7cfd84270a20a8699568c0c7f3ab Unapplied: suse: 7076e2a00570a3cda4e4ce034419399a23ebfb0a dev-name2ip: 8e00708e882239292492e13aa51c82042255933c diff --git a/patches/ibacm-use-pkey-0xffff-or-0x7ff b/patches/ibacm-use-pkey-0xffff-or-0x7ff new file mode 100644 index 0000000..190bcf5 --- /dev/null +++ b/patches/ibacm-use-pkey-0xffff-or-0x7ff @@ -0,0 +1,73 @@ +Bottom: 64e8af33e50308b09126af20b30b242eaad40ae2 +Top: 7e2475ff5b009491e7771c2f4b9ed9f5923a8985 +Author: Kaike Wan +Date: 2015-03-25 15:40:46 -0700 + +ibacm: Use pkey 0xffff or 0x7fff for SA query + +Currently, ibacm uses the first pkey on the local port to query SA. More +appropriately, it should use either 0xffff or 0x7fff for SA query. +However, if the local port is not configured with either pkey, ibacm will +continue to use the first pkey. + +Signed-off-by: Kaike Wan + + + +--- + +diff --git a/src/acm.c b/src/acm.c +index 815a916..7649725 100644 +--- a/src/acm.c ++++ b/src/acm.c +@@ -106,6 +106,7 @@ struct acmc_port { + union ibv_gid *gid_tbl; + uint16_t lid; + uint16_t lid_mask; ++ int default_pkey_index; + }; + + struct acmc_device { +@@ -1844,6 +1845,7 @@ static void acm_port_up(struct acmc_port *port) + uint16_t pkey; + int i, ret; + struct acmc_prov_context *dev_ctx; ++ int index = -1; + + acm_log(1, "%s %d\n", port->dev->device.verbs->device->name, + port->port.port_num); +@@ -1889,6 +1891,25 @@ static void acm_port_up(struct acmc_port *port) + goto err1; + } + ++ /* Determine the default pkey first. ++ Order of preference: 0xffff, 0x7fff, first pkey ++ */ ++ for (i = 0; i < attr.pkey_tbl_len; i++) { ++ ret = ibv_query_pkey(port->dev->device.verbs, ++ port->port.port_num, i, &pkey); ++ if (ret) ++ continue; ++ pkey = ntohs(pkey); ++ if (pkey == 0xffff) { ++ index = i; ++ break; ++ } ++ else if (pkey == 0x7fff) { ++ index = i; ++ } ++ } ++ port->default_pkey_index = index < 0 ? 0: index; ++ + for (i = 0; i < attr.pkey_tbl_len; i++) { + ret = ibv_query_pkey(port->dev->device.verbs, + port->port.port_num, i, &pkey); +@@ -2397,7 +2418,7 @@ int acm_send_sa_mad(struct acm_sa_mad *mad) + mad->umad.addr.qkey = port->sa_addr.qkey; + mad->umad.addr.lid = htons(port->sa_addr.lid); + mad->umad.addr.sl = port->sa_addr.sl; +- // TODO: mad->umad.addr.pkey_index = req->ep->?; ++ mad->umad.addr.pkey_index = req->ep->port->default_pkey_index; + + lock_acquire(&port->lock); + if (port->sa_credits && DListEmpty(&port->sa_wait)) { -- 2.46.0