* [PATCH 0/7] IB/rxe: Bug fixes
@ 2017-07-25 13:39 Andrew Boyer
[not found] ` <1500989968-30889-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
0 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-07-25 13:39 UTC (permalink / raw)
To: linux-rdma-u79uwXL29TY76Z2rM5mHXA,
yonatanc-VPRAkNaXOzVWk0Htik3J/w, leon-DgEjT+Ai2ygdnm+yROfE0A
Cc: Andrew Boyer, allen.hubbe-8PEkshWhKlo
This patch set addresses a few issues which we have found in RXE.
The first patch fixes a serious issue that causes kernel panics during
network congestion.
Andrew Boyer (7):
IB/rxe: Move refcounting earlier in rxe_send()
IB/rxe: Disable completion upcalls when a CQ is destroyed
IB/rxe: Remove dangling prototype
IB/rxe: Fix up the responder's find_resources() function
IB/rxe: Fix destination cache for IPv6
IB/rxe: Fix up one more receive queue drain path that might prevent
cleanup
IB/rxe: Avoid ICRC errors by copying into the skb first
drivers/infiniband/sw/rxe/rxe_cq.c | 19 +++++++++++++++++++
drivers/infiniband/sw/rxe/rxe_loc.h | 4 ++--
drivers/infiniband/sw/rxe/rxe_mr.c | 12 ++++++------
drivers/infiniband/sw/rxe/rxe_net.c | 17 +++++++++++------
drivers/infiniband/sw/rxe/rxe_qp.c | 9 ++-------
drivers/infiniband/sw/rxe/rxe_req.c | 4 +++-
drivers/infiniband/sw/rxe/rxe_resp.c | 2 +-
drivers/infiniband/sw/rxe/rxe_verbs.c | 2 ++
drivers/infiniband/sw/rxe/rxe_verbs.h | 2 ++
9 files changed, 48 insertions(+), 23 deletions(-)
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* [PATCH 1/7] IB/rxe: Move refcounting earlier in rxe_send()
[not found] ` <1500989968-30889-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-07-25 13:39 ` Andrew Boyer
[not found] ` <1500989968-30889-2-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-25 13:39 ` [PATCH 2/7] IB/rxe: Disable completion upcalls when a CQ is destroyed Andrew Boyer
` (7 subsequent siblings)
8 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-07-25 13:39 UTC (permalink / raw)
To: linux-rdma-u79uwXL29TY76Z2rM5mHXA,
yonatanc-VPRAkNaXOzVWk0Htik3J/w, leon-DgEjT+Ai2ygdnm+yROfE0A
Cc: Andrew Boyer, allen.hubbe-8PEkshWhKlo
The network stack will call nskb's destructor, rxe_skb_tx_dtor(), if the
packet gets dropped by ip_local_out()/ip6_local_out(). Thus we need to add
the QP ref before output to avoid extra dereferences during network
congestion. This could lead to unwanted destruction of the QP.
Fix up the skb_out accounting, too.
Fixes: fda85ce91240 ("IB/rxe: Fix kernel panic from skb destructor")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_net.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
index 08f3f90..0810f38 100644
--- a/drivers/infiniband/sw/rxe/rxe_net.c
+++ b/drivers/infiniband/sw/rxe/rxe_net.c
@@ -460,12 +460,17 @@ int rxe_send(struct rxe_dev *rxe, struct rxe_pkt_info *pkt, struct sk_buff *skb)
nskb->destructor = rxe_skb_tx_dtor;
nskb->sk = pkt->qp->sk->sk;
+ rxe_add_ref(pkt->qp);
+ atomic_inc(&pkt->qp->skb_out);
+
if (av->network_type == RDMA_NETWORK_IPV4) {
err = ip_local_out(dev_net(skb_dst(skb)->dev), nskb->sk, nskb);
} else if (av->network_type == RDMA_NETWORK_IPV6) {
err = ip6_local_out(dev_net(skb_dst(skb)->dev), nskb->sk, nskb);
} else {
pr_err("Unknown layer 3 protocol: %d\n", av->network_type);
+ atomic_dec(&pkt->qp->skb_out);
+ rxe_drop_ref(pkt->qp);
kfree_skb(nskb);
return -EINVAL;
}
@@ -475,10 +480,7 @@ int rxe_send(struct rxe_dev *rxe, struct rxe_pkt_info *pkt, struct sk_buff *skb)
return -EAGAIN;
}
- rxe_add_ref(pkt->qp);
- atomic_inc(&pkt->qp->skb_out);
kfree_skb(skb);
-
return 0;
}
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH 2/7] IB/rxe: Disable completion upcalls when a CQ is destroyed
[not found] ` <1500989968-30889-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-25 13:39 ` [PATCH 1/7] IB/rxe: Move refcounting earlier in rxe_send() Andrew Boyer
@ 2017-07-25 13:39 ` Andrew Boyer
[not found] ` <1500989968-30889-3-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-25 13:39 ` [PATCH 3/7] IB/rxe: Remove dangling prototype Andrew Boyer
` (6 subsequent siblings)
8 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-07-25 13:39 UTC (permalink / raw)
To: linux-rdma-u79uwXL29TY76Z2rM5mHXA,
yonatanc-VPRAkNaXOzVWk0Htik3J/w, leon-DgEjT+Ai2ygdnm+yROfE0A
Cc: Andrew Boyer, allen.hubbe-8PEkshWhKlo
This prevents the stack from accessing userspace objects while they
are being torn down.
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_cq.c | 19 +++++++++++++++++++
drivers/infiniband/sw/rxe/rxe_loc.h | 2 ++
drivers/infiniband/sw/rxe/rxe_verbs.c | 2 ++
drivers/infiniband/sw/rxe/rxe_verbs.h | 1 +
4 files changed, 24 insertions(+)
diff --git a/drivers/infiniband/sw/rxe/rxe_cq.c b/drivers/infiniband/sw/rxe/rxe_cq.c
index 49fe42c..c4aabf7 100644
--- a/drivers/infiniband/sw/rxe/rxe_cq.c
+++ b/drivers/infiniband/sw/rxe/rxe_cq.c
@@ -69,6 +69,14 @@ int rxe_cq_chk_attr(struct rxe_dev *rxe, struct rxe_cq *cq,
static void rxe_send_complete(unsigned long data)
{
struct rxe_cq *cq = (struct rxe_cq *)data;
+ unsigned long flags;
+
+ spin_lock_irqsave(&cq->cq_lock, flags);
+ if (cq->is_dying) {
+ spin_unlock_irqrestore(&cq->cq_lock, flags);
+ return;
+ }
+ spin_unlock_irqrestore(&cq->cq_lock, flags);
cq->ibcq.comp_handler(&cq->ibcq, cq->ibcq.cq_context);
}
@@ -97,6 +105,8 @@ int rxe_cq_from_init(struct rxe_dev *rxe, struct rxe_cq *cq, int cqe,
if (udata)
cq->is_user = 1;
+ cq->is_dying = false;
+
tasklet_init(&cq->comp_task, rxe_send_complete, (unsigned long)cq);
spin_lock_init(&cq->cq_lock);
@@ -156,6 +166,15 @@ int rxe_cq_post(struct rxe_cq *cq, struct rxe_cqe *cqe, int solicited)
return 0;
}
+void rxe_cq_disable(struct rxe_cq *cq)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&cq->cq_lock, flags);
+ cq->is_dying = true;
+ spin_unlock_irqrestore(&cq->cq_lock, flags);
+}
+
void rxe_cq_cleanup(struct rxe_pool_entry *arg)
{
struct rxe_cq *cq = container_of(arg, typeof(*cq), pelem);
diff --git a/drivers/infiniband/sw/rxe/rxe_loc.h b/drivers/infiniband/sw/rxe/rxe_loc.h
index d6299ed..64f8fa1 100644
--- a/drivers/infiniband/sw/rxe/rxe_loc.h
+++ b/drivers/infiniband/sw/rxe/rxe_loc.h
@@ -64,6 +64,8 @@ int rxe_cq_from_init(struct rxe_dev *rxe, struct rxe_cq *cq, int cqe,
int rxe_cq_post(struct rxe_cq *cq, struct rxe_cqe *cqe, int solicited);
+void rxe_cq_disable(struct rxe_cq *cq);
+
void rxe_cq_cleanup(struct rxe_pool_entry *arg);
/* rxe_mcast.c */
diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c
index af90a7d..02a39e8 100644
--- a/drivers/infiniband/sw/rxe/rxe_verbs.c
+++ b/drivers/infiniband/sw/rxe/rxe_verbs.c
@@ -960,6 +960,8 @@ static int rxe_destroy_cq(struct ib_cq *ibcq)
{
struct rxe_cq *cq = to_rcq(ibcq);
+ rxe_cq_disable(cq);
+
rxe_drop_ref(cq);
return 0;
}
diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.h b/drivers/infiniband/sw/rxe/rxe_verbs.h
index 5a180fb..b09a9e2 100644
--- a/drivers/infiniband/sw/rxe/rxe_verbs.h
+++ b/drivers/infiniband/sw/rxe/rxe_verbs.h
@@ -89,6 +89,7 @@ struct rxe_cq {
struct rxe_queue *queue;
spinlock_t cq_lock;
u8 notify;
+ bool is_dying;
int is_user;
struct tasklet_struct comp_task;
};
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH 3/7] IB/rxe: Remove dangling prototype
[not found] ` <1500989968-30889-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-25 13:39 ` [PATCH 1/7] IB/rxe: Move refcounting earlier in rxe_send() Andrew Boyer
2017-07-25 13:39 ` [PATCH 2/7] IB/rxe: Disable completion upcalls when a CQ is destroyed Andrew Boyer
@ 2017-07-25 13:39 ` Andrew Boyer
[not found] ` <1500989968-30889-4-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-25 13:39 ` [PATCH 4/7] IB/rxe: Fix up the responder's find_resources() function Andrew Boyer
` (5 subsequent siblings)
8 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-07-25 13:39 UTC (permalink / raw)
To: linux-rdma-u79uwXL29TY76Z2rM5mHXA,
yonatanc-VPRAkNaXOzVWk0Htik3J/w, leon-DgEjT+Ai2ygdnm+yROfE0A
Cc: Andrew Boyer, allen.hubbe-8PEkshWhKlo
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_loc.h | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_loc.h b/drivers/infiniband/sw/rxe/rxe_loc.h
index 64f8fa1..8ef2d3f 100644
--- a/drivers/infiniband/sw/rxe/rxe_loc.h
+++ b/drivers/infiniband/sw/rxe/rxe_loc.h
@@ -221,8 +221,6 @@ static inline void rxe_advance_resp_resource(struct rxe_qp *qp)
void retransmit_timer(unsigned long data);
void rnr_nak_timer(unsigned long data);
-void dump_qp(struct rxe_qp *qp);
-
/* rxe_srq.c */
#define IB_SRQ_INIT_MASK (~IB_SRQ_LIMIT)
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH 4/7] IB/rxe: Fix up the responder's find_resources() function
[not found] ` <1500989968-30889-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (2 preceding siblings ...)
2017-07-25 13:39 ` [PATCH 3/7] IB/rxe: Remove dangling prototype Andrew Boyer
@ 2017-07-25 13:39 ` Andrew Boyer
[not found] ` <1500989968-30889-5-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-25 13:39 ` [PATCH 5/7] IB/rxe: Fix destination cache for IPv6 Andrew Boyer
` (4 subsequent siblings)
8 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-07-25 13:39 UTC (permalink / raw)
To: linux-rdma-u79uwXL29TY76Z2rM5mHXA,
yonatanc-VPRAkNaXOzVWk0Htik3J/w, leon-DgEjT+Ai2ygdnm+yROfE0A
Cc: Andrew Boyer, allen.hubbe-8PEkshWhKlo
The resource array is sized by max_dest_rd_atomic, not max_rd_atomic.
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_resp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c
index a958ee9..4240866 100644
--- a/drivers/infiniband/sw/rxe/rxe_resp.c
+++ b/drivers/infiniband/sw/rxe/rxe_resp.c
@@ -1055,7 +1055,7 @@ static struct resp_res *find_resource(struct rxe_qp *qp, u32 psn)
{
int i;
- for (i = 0; i < qp->attr.max_rd_atomic; i++) {
+ for (i = 0; i < qp->attr.max_dest_rd_atomic; i++) {
struct resp_res *res = &qp->resp.resources[i];
if (res->type == 0)
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH 5/7] IB/rxe: Fix destination cache for IPv6
[not found] ` <1500989968-30889-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (3 preceding siblings ...)
2017-07-25 13:39 ` [PATCH 4/7] IB/rxe: Fix up the responder's find_resources() function Andrew Boyer
@ 2017-07-25 13:39 ` Andrew Boyer
[not found] ` <1500989968-30889-6-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-25 13:39 ` [PATCH 6/7] IB/rxe: Fix up one more receive queue drain path that might prevent cleanup Andrew Boyer
` (3 subsequent siblings)
8 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-07-25 13:39 UTC (permalink / raw)
To: linux-rdma-u79uwXL29TY76Z2rM5mHXA,
yonatanc-VPRAkNaXOzVWk0Htik3J/w, leon-DgEjT+Ai2ygdnm+yROfE0A
Cc: Andrew Boyer, allen.hubbe-8PEkshWhKlo
To successfully match an IPv6 path, the path cookie must match. Store it
in the QP so that the IPv6 path can be reused.
Replace open-coded version of dst_check() with the actual call, fixing the
logic. The open-coded version skips the check call if dst->obsolete is 0
(DST_OBSOLETE_NONE), proceeding to replace the route. DST_OBSOLETE_NONE
means that the route may continue to be used, though.
Add dst_clone() in prepare_ipv6_hdr(). Otherwise the reference count goes
negative as packets complete.
Replace sk_dst_get()/dst_release() in rxe_qp_cleanup() with sk_dst_reset().
sk_dst_get() takes a new reference on dst, so the dst_release() doesn't
actually release the original reference, which was the design intent.
Remove unneeded initialization in prepare6().
Fixes: 4ed6ad1eb30e ("IB/rxe: Cache dst in QP instead of getting it...")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_net.c | 9 ++++++---
drivers/infiniband/sw/rxe/rxe_qp.c | 9 ++-------
drivers/infiniband/sw/rxe/rxe_verbs.h | 1 +
3 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
index 0810f38..6aeda61 100644
--- a/drivers/infiniband/sw/rxe/rxe_net.c
+++ b/drivers/infiniband/sw/rxe/rxe_net.c
@@ -191,7 +191,7 @@ static struct dst_entry *rxe_find_route(struct rxe_dev *rxe,
if (qp_type(qp) == IB_QPT_RC)
dst = sk_dst_get(qp->sk->sk);
- if (!dst || !(dst->obsolete && dst->ops->check(dst, 0))) {
+ if (!dst || !dst_check(dst, qp->dst_cookie)) {
if (dst)
dst_release(dst);
@@ -209,6 +209,9 @@ static struct dst_entry *rxe_find_route(struct rxe_dev *rxe,
saddr6 = &av->sgid_addr._sockaddr_in6.sin6_addr;
daddr6 = &av->dgid_addr._sockaddr_in6.sin6_addr;
dst = rxe_find_route6(rxe->ndev, saddr6, daddr6);
+ if (dst)
+ qp->dst_cookie =
+ rt6_get_cookie((struct rt6_info *)dst);
}
}
@@ -337,7 +340,7 @@ static void prepare_ipv6_hdr(struct dst_entry *dst, struct sk_buff *skb,
memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED
| IPSKB_REROUTED);
- skb_dst_set(skb, dst);
+ skb_dst_set(skb, dst_clone(dst));
__skb_push(skb, sizeof(*ip6h));
skb_reset_network_header(skb);
@@ -388,7 +391,7 @@ static int prepare6(struct rxe_dev *rxe, struct rxe_pkt_info *pkt,
struct sk_buff *skb, struct rxe_av *av)
{
struct rxe_qp *qp = pkt->qp;
- struct dst_entry *dst = NULL;
+ struct dst_entry *dst;
struct in6_addr *saddr = &av->sgid_addr._sockaddr_in6.sin6_addr;
struct in6_addr *daddr = &av->dgid_addr._sockaddr_in6.sin6_addr;
diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
index 80ccc7c..00bda93 100644
--- a/drivers/infiniband/sw/rxe/rxe_qp.c
+++ b/drivers/infiniband/sw/rxe/rxe_qp.c
@@ -851,13 +851,8 @@ void rxe_qp_cleanup(struct rxe_pool_entry *arg)
qp->resp.mr = NULL;
}
- if (qp_type(qp) == IB_QPT_RC) {
- struct dst_entry *dst = NULL;
-
- dst = sk_dst_get(qp->sk->sk);
- if (dst)
- dst_release(dst);
- }
+ if (qp_type(qp) == IB_QPT_RC)
+ sk_dst_reset(qp->sk->sk);
free_rd_atomic_resources(qp);
diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.h b/drivers/infiniband/sw/rxe/rxe_verbs.h
index b09a9e2..0c2dbe4 100644
--- a/drivers/infiniband/sw/rxe/rxe_verbs.h
+++ b/drivers/infiniband/sw/rxe/rxe_verbs.h
@@ -248,6 +248,7 @@ struct rxe_qp {
struct rxe_rq rq;
struct socket *sk;
+ u32 dst_cookie;
struct rxe_av pri_av;
struct rxe_av alt_av;
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH 6/7] IB/rxe: Fix up one more receive queue drain path that might prevent cleanup
[not found] ` <1500989968-30889-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (4 preceding siblings ...)
2017-07-25 13:39 ` [PATCH 5/7] IB/rxe: Fix destination cache for IPv6 Andrew Boyer
@ 2017-07-25 13:39 ` Andrew Boyer
[not found] ` <1500989968-30889-7-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-25 13:39 ` [PATCH 7/7] IB/rxe: Avoid ICRC errors by copying into the skb first Andrew Boyer
` (2 subsequent siblings)
8 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-07-25 13:39 UTC (permalink / raw)
To: linux-rdma-u79uwXL29TY76Z2rM5mHXA,
yonatanc-VPRAkNaXOzVWk0Htik3J/w, leon-DgEjT+Ai2ygdnm+yROfE0A
Cc: Andrew Boyer, allen.hubbe-8PEkshWhKlo
Fixes: 1217197142d1 ("rxe: fix broken receive queue draining")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_req.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rxe/rxe_req.c
index 7ee465d..24fc0b8 100644
--- a/drivers/infiniband/sw/rxe/rxe_req.c
+++ b/drivers/infiniband/sw/rxe/rxe_req.c
@@ -594,8 +594,10 @@ int rxe_requester(void *arg)
rxe_add_ref(qp);
next_wqe:
- if (unlikely(!qp->valid))
+ if (unlikely(!qp->valid)) {
+ rxe_drain_req_pkts(qp, true);
goto exit;
+ }
if (unlikely(qp->req.state == QP_STATE_ERROR)) {
rxe_drain_req_pkts(qp, true);
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH 7/7] IB/rxe: Avoid ICRC errors by copying into the skb first
[not found] ` <1500989968-30889-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (5 preceding siblings ...)
2017-07-25 13:39 ` [PATCH 6/7] IB/rxe: Fix up one more receive queue drain path that might prevent cleanup Andrew Boyer
@ 2017-07-25 13:39 ` Andrew Boyer
[not found] ` <1500989968-30889-8-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-27 13:27 ` [PATCH 0/7] IB/rxe: Bug fixes Moni Shoua
2017-08-25 19:05 ` [PATCH v1 00/11] " Andrew Boyer
8 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-07-25 13:39 UTC (permalink / raw)
To: linux-rdma-u79uwXL29TY76Z2rM5mHXA,
yonatanc-VPRAkNaXOzVWk0Htik3J/w, leon-DgEjT+Ai2ygdnm+yROfE0A
Cc: Andrew Boyer, allen.hubbe-8PEkshWhKlo
If the buffer contents are changing, the current code can generate a packet
with a bogus CRC. This can be seen with qperf's ud_bi_bw test.
No matter what behavior the client is expecting in this case, it shouldn't
result in a malformed packet.
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_mr.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_mr.c b/drivers/infiniband/sw/rxe/rxe_mr.c
index e37cc89..5c2684b 100644
--- a/drivers/infiniband/sw/rxe/rxe_mr.c
+++ b/drivers/infiniband/sw/rxe/rxe_mr.c
@@ -367,11 +367,11 @@ int rxe_mem_copy(struct rxe_mem *mem, u64 iova, void *addr, int length,
dest = (dir == to_mem_obj) ?
((void *)(uintptr_t)iova) : addr;
+ memcpy(dest, src, length);
+
if (crcp)
*crcp = rxe_crc32(to_rdev(mem->pd->ibpd.device),
- *crcp, src, length);
-
- memcpy(dest, src, length);
+ *crcp, dest, length);
return 0;
}
@@ -401,11 +401,11 @@ int rxe_mem_copy(struct rxe_mem *mem, u64 iova, void *addr, int length,
if (bytes > length)
bytes = length;
+ memcpy(dest, src, bytes);
+
if (crcp)
crc = rxe_crc32(to_rdev(mem->pd->ibpd.device),
- crc, src, bytes);
-
- memcpy(dest, src, bytes);
+ crc, dest, bytes);
length -= bytes;
addr += bytes;
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* Re: [PATCH 7/7] IB/rxe: Avoid ICRC errors by copying into the skb first
[not found] ` <1500989968-30889-8-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-07-25 17:34 ` Or Gerlitz
[not found] ` <CAJ3xEMi7qiygVwngd-1q0x7xOf=whGb667t0RQpZ0uRbchw=oA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
0 siblings, 1 reply; 61+ messages in thread
From: Or Gerlitz @ 2017-07-25 17:34 UTC (permalink / raw)
To: Andrew Boyer
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA, Yonatan Cohen,
Leon Romanovsky, allen.hubbe-8PEkshWhKlo
On Tue, Jul 25, 2017 at 4:39 PM, Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org> wrote:
> If the buffer contents are changing,
can you please elaborate on that a little further? what are unchanged
contents and what are changing contents?
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH 7/7] IB/rxe: Avoid ICRC errors by copying into the skb first
[not found] ` <CAJ3xEMi7qiygVwngd-1q0x7xOf=whGb667t0RQpZ0uRbchw=oA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2017-07-25 18:00 ` Boyer, Andrew
[not found] ` <D59CFD43.1B523%Andrew.Boyer-mb1K0bWo544@public.gmane.org>
0 siblings, 1 reply; 61+ messages in thread
From: Boyer, Andrew @ 2017-07-25 18:00 UTC (permalink / raw)
To: Or Gerlitz
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA, Yonatan Cohen,
Leon Romanovsky, Hubbe, Allen
On 7/25/17, 1:34 PM, "Or Gerlitz" <gerlitz.or-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
>On Tue, Jul 25, 2017 at 4:39 PM, Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
>wrote:
>> If the buffer contents are changing,
>
>can you please elaborate on that a little further? what are unchanged
>contents and what are changing contents?
In qperf, the ud_bi_bw test allocates a single buffer on each side. Then
it posts that one buffer 1024 times for receive and 1024 times for send.
While RXE is building up the send packet, the buffer is being overwritten
by incoming receives.
The current process of first calculating the CRC and then copying the
buffer into the packet leaves a window in which the contents and the CRC
can get out of sync. By copying the buffer into the packet and then
calculating the CRC based on the packet contents we eliminate the window.
This seems like very strange/reckless client behavior, but whether the
client has mangled the buffer or not RXE should be able to transfer it
reliably.
Thanks,
Andrew
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH 5/7] IB/rxe: Fix destination cache for IPv6
[not found] ` <1500989968-30889-6-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-07-27 6:41 ` kbuild test robot
[not found] ` <201707271425.T94Zam4o%fengguang.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-07-27 12:07 ` Moni Shoua
1 sibling, 1 reply; 61+ messages in thread
From: kbuild test robot @ 2017-07-27 6:41 UTC (permalink / raw)
Cc: kbuild-all-JC7UmRfGjtg, linux-rdma-u79uwXL29TY76Z2rM5mHXA,
yonatanc-VPRAkNaXOzVWk0Htik3J/w, leon-DgEjT+Ai2ygdnm+yROfE0A,
Andrew Boyer, allen.hubbe-8PEkshWhKlo
[-- Attachment #1: Type: text/plain, Size: 2349 bytes --]
Hi Andrew,
[auto build test ERROR on rdma/master]
[also build test ERROR on v4.13-rc2 next-20170726]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Andrew-Boyer/IB-rxe-Move-refcounting-earlier-in-rxe_send/20170726-141937
base: https://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma.git master
config: i386-randconfig-i1-07240017 (attached as .config)
compiler: gcc-4.8 (Debian 4.8.4-1) 4.8.4
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
All errors (new ones prefixed by >>):
drivers/infiniband//sw/rxe/rxe_net.c: In function 'rxe_find_route':
>> drivers/infiniband//sw/rxe/rxe_net.c:214:6: error: implicit declaration of function 'rt6_get_cookie' [-Werror=implicit-function-declaration]
rt6_get_cookie((struct rt6_info *)dst);
^
cc1: some warnings being treated as errors
vim +/rt6_get_cookie +214 drivers/infiniband//sw/rxe/rxe_net.c
184
185 static struct dst_entry *rxe_find_route(struct rxe_dev *rxe,
186 struct rxe_qp *qp,
187 struct rxe_av *av)
188 {
189 struct dst_entry *dst = NULL;
190
191 if (qp_type(qp) == IB_QPT_RC)
192 dst = sk_dst_get(qp->sk->sk);
193
194 if (!dst || !dst_check(dst, qp->dst_cookie)) {
195 if (dst)
196 dst_release(dst);
197
198 if (av->network_type == RDMA_NETWORK_IPV4) {
199 struct in_addr *saddr;
200 struct in_addr *daddr;
201
202 saddr = &av->sgid_addr._sockaddr_in.sin_addr;
203 daddr = &av->dgid_addr._sockaddr_in.sin_addr;
204 dst = rxe_find_route4(rxe->ndev, saddr, daddr);
205 } else if (av->network_type == RDMA_NETWORK_IPV6) {
206 struct in6_addr *saddr6;
207 struct in6_addr *daddr6;
208
209 saddr6 = &av->sgid_addr._sockaddr_in6.sin6_addr;
210 daddr6 = &av->dgid_addr._sockaddr_in6.sin6_addr;
211 dst = rxe_find_route6(rxe->ndev, saddr6, daddr6);
212 if (dst)
213 qp->dst_cookie =
> 214 rt6_get_cookie((struct rt6_info *)dst);
215 }
216 }
217
218 return dst;
219 }
220
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 34162 bytes --]
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH 1/7] IB/rxe: Move refcounting earlier in rxe_send()
[not found] ` <1500989968-30889-2-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-07-27 8:57 ` Moni Shoua
0 siblings, 0 replies; 61+ messages in thread
From: Moni Shoua @ 2017-07-27 8:57 UTC (permalink / raw)
To: Andrew Boyer
Cc: linux-rdma, Yonatan Cohen, Leon Romanovsky, allen.hubbe-8PEkshWhKlo
On Tue, Jul 25, 2017 at 4:39 PM, Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org> wrote:
> The network stack will call nskb's destructor, rxe_skb_tx_dtor(), if the
> packet gets dropped by ip_local_out()/ip6_local_out(). Thus we need to add
> the QP ref before output to avoid extra dereferences during network
> congestion. This could lead to unwanted destruction of the QP.
>
> Fix up the skb_out accounting, too.
>
> Fixes: fda85ce91240 ("IB/rxe: Fix kernel panic from skb destructor")
> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
> ---
Acked-by: Moni Shoua <monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH 2/7] IB/rxe: Disable completion upcalls when a CQ is destroyed
[not found] ` <1500989968-30889-3-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-07-27 9:35 ` Moni Shoua
[not found] ` <CAG9sBKOet0xv9YaJAc58erVrnTGwzMd630goDgrxUEx4PhXK+g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
0 siblings, 1 reply; 61+ messages in thread
From: Moni Shoua @ 2017-07-27 9:35 UTC (permalink / raw)
To: Andrew Boyer
Cc: linux-rdma, Yonatan Cohen, Leon Romanovsky, allen.hubbe-8PEkshWhKlo
On Tue, Jul 25, 2017 at 4:39 PM, Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org> wrote:
> This prevents the stack from accessing userspace objects while they
> are being torn down.
>
> Fixes: 8700e3e7c485 ("Soft RoCE driver")
> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
> ---
> drivers/infiniband/sw/rxe/rxe_cq.c | 19 +++++++++++++++++++
> drivers/infiniband/sw/rxe/rxe_loc.h | 2 ++
> drivers/infiniband/sw/rxe/rxe_verbs.c | 2 ++
> drivers/infiniband/sw/rxe/rxe_verbs.h | 1 +
> 4 files changed, 24 insertions(+)
>
> diff --git a/drivers/infiniband/sw/rxe/rxe_cq.c b/drivers/infiniband/sw/rxe/rxe_cq.c
> index 49fe42c..c4aabf7 100644
> --- a/drivers/infiniband/sw/rxe/rxe_cq.c
> +++ b/drivers/infiniband/sw/rxe/rxe_cq.c
> @@ -69,6 +69,14 @@ int rxe_cq_chk_attr(struct rxe_dev *rxe, struct rxe_cq *cq,
> static void rxe_send_complete(unsigned long data)
> {
> struct rxe_cq *cq = (struct rxe_cq *)data;
> + unsigned long flags;
> +
> + spin_lock_irqsave(&cq->cq_lock, flags);
> + if (cq->is_dying) {
> + spin_unlock_irqrestore(&cq->cq_lock, flags);
> + return;
> + }
> + spin_unlock_irqrestore(&cq->cq_lock, flags);
What if CQ is destroyed here after you pass the is_dying test?
Maybe you should think of a solution based on ref counting.
> cq->ibcq.comp_handler(&cq->ibcq, cq->ibcq.cq_context);
> }
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH 3/7] IB/rxe: Remove dangling prototype
[not found] ` <1500989968-30889-4-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-07-27 9:36 ` Moni Shoua
0 siblings, 0 replies; 61+ messages in thread
From: Moni Shoua @ 2017-07-27 9:36 UTC (permalink / raw)
To: Andrew Boyer
Cc: linux-rdma, Yonatan Cohen, Leon Romanovsky, allen.hubbe-8PEkshWhKlo
On Tue, Jul 25, 2017 at 4:39 PM, Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org> wrote:
> Fixes: 8700e3e7c485 ("Soft RoCE driver")
> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
> ---
> drivers/infiniband/sw/rxe/rxe_loc.h | 2 --
> 1 file changed, 2 deletions(-)
Acked-by: Moni Shoua <monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH 4/7] IB/rxe: Fix up the responder's find_resources() function
[not found] ` <1500989968-30889-5-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-07-27 10:54 ` Moni Shoua
0 siblings, 0 replies; 61+ messages in thread
From: Moni Shoua @ 2017-07-27 10:54 UTC (permalink / raw)
To: Andrew Boyer
Cc: linux-rdma, Yonatan Cohen, Leon Romanovsky, allen.hubbe-8PEkshWhKlo
On Tue, Jul 25, 2017 at 4:39 PM, Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org> wrote:
> The resource array is sized by max_dest_rd_atomic, not max_rd_atomic.
>
The patch seems correct. However the commit message lacks an explanation why.
Please improve
> Fixes: 8700e3e7c485 ("Soft RoCE driver")
> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
> ---
> drivers/infiniband/sw/rxe/rxe_resp.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c
> index a958ee9..4240866 100644
> --- a/drivers/infiniband/sw/rxe/rxe_resp.c
> +++ b/drivers/infiniband/sw/rxe/rxe_resp.c
> @@ -1055,7 +1055,7 @@ static struct resp_res *find_resource(struct rxe_qp *qp, u32 psn)
> {
> int i;
>
> - for (i = 0; i < qp->attr.max_rd_atomic; i++) {
> + for (i = 0; i < qp->attr.max_dest_rd_atomic; i++) {
> struct resp_res *res = &qp->resp.resources[i];
>
> if (res->type == 0)
> --
> 1.8.3.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH 5/7] IB/rxe: Fix destination cache for IPv6
[not found] ` <1500989968-30889-6-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-27 6:41 ` kbuild test robot
@ 2017-07-27 12:07 ` Moni Shoua
1 sibling, 0 replies; 61+ messages in thread
From: Moni Shoua @ 2017-07-27 12:07 UTC (permalink / raw)
To: Andrew Boyer
Cc: linux-rdma, Yonatan Cohen, Leon Romanovsky, allen.hubbe-8PEkshWhKlo
On Tue, Jul 25, 2017 at 4:39 PM, Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org> wrote:
> To successfully match an IPv6 path, the path cookie must match. Store it
> in the QP so that the IPv6 path can be reused.
>
> Replace open-coded version of dst_check() with the actual call, fixing the
> logic. The open-coded version skips the check call if dst->obsolete is 0
> (DST_OBSOLETE_NONE), proceeding to replace the route. DST_OBSOLETE_NONE
> means that the route may continue to be used, though.
>
> Add dst_clone() in prepare_ipv6_hdr(). Otherwise the reference count goes
> negative as packets complete.
>
> Replace sk_dst_get()/dst_release() in rxe_qp_cleanup() with sk_dst_reset().
> sk_dst_get() takes a new reference on dst, so the dst_release() doesn't
> actually release the original reference, which was the design intent.
>
> Remove unneeded initialization in prepare6().
>
> Fixes: 4ed6ad1eb30e ("IB/rxe: Cache dst in QP instead of getting it...")
> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
> ---
> drivers/infiniband/sw/rxe/rxe_net.c | 9 ++++++---
> drivers/infiniband/sw/rxe/rxe_qp.c | 9 ++-------
> drivers/infiniband/sw/rxe/rxe_verbs.h | 1 +
> 3 files changed, 9 insertions(+), 10 deletions(-)
>
Fixes seem to be correct but I identify here 3 unrelated patches.
Please split
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH 6/7] IB/rxe: Fix up one more receive queue drain path that might prevent cleanup
[not found] ` <1500989968-30889-7-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-07-27 12:13 ` Moni Shoua
0 siblings, 0 replies; 61+ messages in thread
From: Moni Shoua @ 2017-07-27 12:13 UTC (permalink / raw)
To: Andrew Boyer
Cc: linux-rdma, Yonatan Cohen, Leon Romanovsky, allen.hubbe-8PEkshWhKlo
On Tue, Jul 25, 2017 at 4:39 PM, Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org> wrote:
> Fixes: 1217197142d1 ("rxe: fix broken receive queue draining")
> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
> ---
> drivers/infiniband/sw/rxe/rxe_req.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
please improve documentation for this patch
Make sure that the commit message has a body, not just subject (which
you can make shorter and more general)
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH 2/7] IB/rxe: Disable completion upcalls when a CQ is destroyed
[not found] ` <CAG9sBKOet0xv9YaJAc58erVrnTGwzMd630goDgrxUEx4PhXK+g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2017-07-27 13:19 ` Boyer, Andrew
0 siblings, 0 replies; 61+ messages in thread
From: Boyer, Andrew @ 2017-07-27 13:19 UTC (permalink / raw)
To: Moni Shoua; +Cc: linux-rdma, Yonatan Cohen, Leon Romanovsky, Hubbe, Allen
On 7/27/17, 5:35 AM, "monisonlists-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org on behalf of Moni Shoua"
<monisonlists-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org on behalf of monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org> wrote:
>On Tue, Jul 25, 2017 at 4:39 PM, Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
>wrote:
>> This prevents the stack from accessing userspace objects while they
>> are being torn down.
>>
>> Fixes: 8700e3e7c485 ("Soft RoCE driver")
>> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
>> ---
>> drivers/infiniband/sw/rxe/rxe_cq.c | 19 +++++++++++++++++++
>> drivers/infiniband/sw/rxe/rxe_loc.h | 2 ++
>> drivers/infiniband/sw/rxe/rxe_verbs.c | 2 ++
>> drivers/infiniband/sw/rxe/rxe_verbs.h | 1 +
>> 4 files changed, 24 insertions(+)
>>
>> diff --git a/drivers/infiniband/sw/rxe/rxe_cq.c
>>b/drivers/infiniband/sw/rxe/rxe_cq.c
>> index 49fe42c..c4aabf7 100644
>> --- a/drivers/infiniband/sw/rxe/rxe_cq.c
>> +++ b/drivers/infiniband/sw/rxe/rxe_cq.c
>> @@ -69,6 +69,14 @@ int rxe_cq_chk_attr(struct rxe_dev *rxe, struct
>>rxe_cq *cq,
>> static void rxe_send_complete(unsigned long data)
>> {
>> struct rxe_cq *cq = (struct rxe_cq *)data;
>> + unsigned long flags;
>> +
>> + spin_lock_irqsave(&cq->cq_lock, flags);
>> + if (cq->is_dying) {
>> + spin_unlock_irqrestore(&cq->cq_lock, flags);
>> + return;
>> + }
>> + spin_unlock_irqrestore(&cq->cq_lock, flags);
>What if CQ is destroyed here after you pass the is_dying test?
>Maybe you should think of a solution based on ref counting.
>> cq->ibcq.comp_handler(&cq->ibcq, cq->ibcq.cq_context);
>> }
Hello Moni,
Thank you for all of the reviews. I¹ll address commit messages etc. in a
revised series.
This is the situation that causes a crash here:
- Userspace programs exits
- ib_uverbs_cleanup_ucontext() runs, calling ib_destroy_qp(),
ib_destroy_cq(), etc. and releasing/freeing the UCQ
- The QP still has tasklets running, so it isn¹t destroyed yet
- The CQ is referenced (twice) by the QP, so the CQ isn¹t destroyed yet
- The UCQ is kfree()'d!
- A send work request completes
- rxe_send_complete() calls cq->ibcq.comp_handler()
- ib_uverbs_comp_handler() runs and crashes; the event queue is checked
for is_closed, but it has no way to check the ib_ucq_object
As you can see, the reference counting on the CQ doesn¹t protect us.
There¹s no interface I could find that would deregister the UCQ from the
CQ. I didn¹t think attempting to add reference counting to the UCQ was
going to be a good way to go since the solution I posted above is so much
simpler (if hacky).
It looks like ib_uverbs_cleanup_context() is gone in 4.12. I don¹t know if
whatever replaced it addresses this issue already, by accident or by
design.
Does this make sense? Do you have a better idea for a fix?
Thank you,
Andrew
P.S. Sorry for the Outlook garbage formatting.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH 5/7] IB/rxe: Fix destination cache for IPv6
[not found] ` <201707271425.T94Zam4o%fengguang.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
@ 2017-07-27 13:24 ` Boyer, Andrew
0 siblings, 0 replies; 61+ messages in thread
From: Boyer, Andrew @ 2017-07-27 13:24 UTC (permalink / raw)
To: linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: yonatanc-VPRAkNaXOzVWk0Htik3J/w, leon-DgEjT+Ai2ygdnm+yROfE0A,
Hubbe, Allen
Looks like I forgot to check for CONFIG_IPV6.
On 7/27/17, 2:41 AM, "kbuild test robot" <lkp-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote:
>Hi Andrew,
>
>[auto build test ERROR on rdma/master]
>[also build test ERROR on v4.13-rc2 next-20170726]
>[if your patch is applied to the wrong git tree, please drop us a note to
>help improve the system]
>
>url:
>https://github.com/0day-ci/linux/commits/Andrew-Boyer/IB-rxe-Move-refcount
>ing-earlier-in-rxe_send/20170726-141937
>base: https://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma.git
>master
>config: i386-randconfig-i1-07240017 (attached as .config)
>compiler: gcc-4.8 (Debian 4.8.4-1) 4.8.4
>reproduce:
> # save the attached .config to linux build tree
> make ARCH=i386
>
>All errors (new ones prefixed by >>):
>
> drivers/infiniband//sw/rxe/rxe_net.c: In function 'rxe_find_route':
>>> drivers/infiniband//sw/rxe/rxe_net.c:214:6: error: implicit
>>>declaration of function 'rt6_get_cookie'
>>>[-Werror=implicit-function-declaration]
> rt6_get_cookie((struct rt6_info *)dst);
> ^
> cc1: some warnings being treated as errors
>
>vim +/rt6_get_cookie +214 drivers/infiniband//sw/rxe/rxe_net.c
>
> 184
> 185 static struct dst_entry *rxe_find_route(struct rxe_dev *rxe,
> 186 struct rxe_qp *qp,
> 187 struct rxe_av *av)
> 188 {
> 189 struct dst_entry *dst = NULL;
> 190
> 191 if (qp_type(qp) == IB_QPT_RC)
> 192 dst = sk_dst_get(qp->sk->sk);
> 193
> 194 if (!dst || !dst_check(dst, qp->dst_cookie)) {
> 195 if (dst)
> 196 dst_release(dst);
> 197
> 198 if (av->network_type == RDMA_NETWORK_IPV4) {
> 199 struct in_addr *saddr;
> 200 struct in_addr *daddr;
> 201
> 202 saddr = &av->sgid_addr._sockaddr_in.sin_addr;
> 203 daddr = &av->dgid_addr._sockaddr_in.sin_addr;
> 204 dst = rxe_find_route4(rxe->ndev, saddr, daddr);
> 205 } else if (av->network_type == RDMA_NETWORK_IPV6) {
> 206 struct in6_addr *saddr6;
> 207 struct in6_addr *daddr6;
> 208
> 209 saddr6 = &av->sgid_addr._sockaddr_in6.sin6_addr;
> 210 daddr6 = &av->dgid_addr._sockaddr_in6.sin6_addr;
> 211 dst = rxe_find_route6(rxe->ndev, saddr6, daddr6);
> 212 if (dst)
> 213 qp->dst_cookie =
> > 214 rt6_get_cookie((struct rt6_info *)dst);
> 215 }
> 216 }
> 217
> 218 return dst;
> 219 }
> 220
>
>---
>0-DAY kernel test infrastructure Open Source Technology
>Center
>https://lists.01.org/pipermail/kbuild-all Intel
>Corporation
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH 7/7] IB/rxe: Avoid ICRC errors by copying into the skb first
[not found] ` <D59CFD43.1B523%Andrew.Boyer-mb1K0bWo544@public.gmane.org>
@ 2017-07-27 13:25 ` Moni Shoua
0 siblings, 0 replies; 61+ messages in thread
From: Moni Shoua @ 2017-07-27 13:25 UTC (permalink / raw)
To: Boyer, Andrew
Cc: Or Gerlitz, linux-rdma-u79uwXL29TY76Z2rM5mHXA, Yonatan Cohen,
Leon Romanovsky, Hubbe, Allen
> This seems like very strange/reckless client behavior, but whether the
> client has mangled the buffer or not RXE should be able to transfer it
> reliably.
>
And what if was overwritten during the memcpy? Then we end up with
wrong ICRC again, right?
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH 0/7] IB/rxe: Bug fixes
[not found] ` <1500989968-30889-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (6 preceding siblings ...)
2017-07-25 13:39 ` [PATCH 7/7] IB/rxe: Avoid ICRC errors by copying into the skb first Andrew Boyer
@ 2017-07-27 13:27 ` Moni Shoua
2017-08-25 19:05 ` [PATCH v1 00/11] " Andrew Boyer
8 siblings, 0 replies; 61+ messages in thread
From: Moni Shoua @ 2017-07-27 13:27 UTC (permalink / raw)
To: Andrew Boyer; +Cc: linux-rdma, Yonatan Cohen, Leon Romanovsky, Hubbe, Allen
On Tue, Jul 25, 2017 at 4:39 PM, Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org> wrote:
> This patch set addresses a few issues which we have found in RXE.
> The first patch fixes a serious issue that causes kernel panics during
> network congestion.
>
> Andrew Boyer (7):
> IB/rxe: Move refcounting earlier in rxe_send()
> IB/rxe: Disable completion upcalls when a CQ is destroyed
> IB/rxe: Remove dangling prototype
> IB/rxe: Fix up the responder's find_resources() function
> IB/rxe: Fix destination cache for IPv6
> IB/rxe: Fix up one more receive queue drain path that might prevent
> cleanup
> IB/rxe: Avoid ICRC errors by copying into the skb first
>
Thanks for the effort and time you invested here Andrew
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* [PATCH v1 00/11] IB/rxe: Bug fixes
[not found] ` <1500989968-30889-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (7 preceding siblings ...)
2017-07-27 13:27 ` [PATCH 0/7] IB/rxe: Bug fixes Moni Shoua
@ 2017-08-25 19:05 ` Andrew Boyer
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
8 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-08-25 19:05 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
This patch set addresses a few issues which we have found in RXE.
The first patch fixes a serious issue that causes kernel panics during
network congestion.
Changes for v1:
* Address review comments and add review tags from Moni
* Split destination cache patch into 4 smaller patches
* Added CONFIG_IPV6 check to destination cache patch
* Added new NETDEV_CHANGE patch
Andrew Boyer (11):
IB/rxe: Move refcounting earlier in rxe_send()
IB/rxe: Disable completion upcalls when a CQ is destroyed
IB/rxe: Remove dangling prototype
IB/rxe: Fix up the responder's find_resources() function
IB/rxe: Fix destination cache for IPv6
IB/rxe: Add dst_clone() in prepare_ipv6_hdr()
IB/rxe: Fix up rxe_qp_cleanup()
IB/rxe: Remove unneeded initialization in prepare6()
IB/rxe: Another fix for broken receive queue draining
IB/rxe: Avoid ICRC errors by copying into the skb first
IB/rxe: Handle NETDEV_CHANGE events
drivers/infiniband/sw/rxe/rxe_cq.c | 19 +++++++++++++++++++
drivers/infiniband/sw/rxe/rxe_loc.h | 4 ++--
drivers/infiniband/sw/rxe/rxe_mr.c | 12 ++++++------
drivers/infiniband/sw/rxe/rxe_net.c | 26 +++++++++++++++++++-------
drivers/infiniband/sw/rxe/rxe_qp.c | 9 ++-------
drivers/infiniband/sw/rxe/rxe_req.c | 4 +++-
drivers/infiniband/sw/rxe/rxe_resp.c | 2 +-
drivers/infiniband/sw/rxe/rxe_verbs.c | 2 ++
drivers/infiniband/sw/rxe/rxe_verbs.h | 2 ++
9 files changed, 56 insertions(+), 24 deletions(-)
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* [PATCH v1 01/11] IB/rxe: Move refcounting earlier in rxe_send()
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-08-25 19:05 ` Andrew Boyer
[not found] ` <1503687956-7110-2-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-25 19:05 ` [PATCH v1 02/11] IB/rxe: Disable completion upcalls when a CQ is destroyed Andrew Boyer
` (11 subsequent siblings)
12 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-08-25 19:05 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
The network stack will call nskb's destructor, rxe_skb_tx_dtor(), if the
packet gets dropped by ip_local_out()/ip6_local_out(). Thus we need to add
the QP ref before output to avoid extra dereferences during network
congestion. This could lead to unwanted destruction of the QP.
Fix up the skb_out accounting, too.
Fixes: fda85ce91240 ("IB/rxe: Fix kernel panic from skb destructor")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
Acked-by: Moni Shoua <monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_net.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
index 08f3f90..0810f38 100644
--- a/drivers/infiniband/sw/rxe/rxe_net.c
+++ b/drivers/infiniband/sw/rxe/rxe_net.c
@@ -460,12 +460,17 @@ int rxe_send(struct rxe_dev *rxe, struct rxe_pkt_info *pkt, struct sk_buff *skb)
nskb->destructor = rxe_skb_tx_dtor;
nskb->sk = pkt->qp->sk->sk;
+ rxe_add_ref(pkt->qp);
+ atomic_inc(&pkt->qp->skb_out);
+
if (av->network_type == RDMA_NETWORK_IPV4) {
err = ip_local_out(dev_net(skb_dst(skb)->dev), nskb->sk, nskb);
} else if (av->network_type == RDMA_NETWORK_IPV6) {
err = ip6_local_out(dev_net(skb_dst(skb)->dev), nskb->sk, nskb);
} else {
pr_err("Unknown layer 3 protocol: %d\n", av->network_type);
+ atomic_dec(&pkt->qp->skb_out);
+ rxe_drop_ref(pkt->qp);
kfree_skb(nskb);
return -EINVAL;
}
@@ -475,10 +480,7 @@ int rxe_send(struct rxe_dev *rxe, struct rxe_pkt_info *pkt, struct sk_buff *skb)
return -EAGAIN;
}
- rxe_add_ref(pkt->qp);
- atomic_inc(&pkt->qp->skb_out);
kfree_skb(skb);
-
return 0;
}
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v1 02/11] IB/rxe: Disable completion upcalls when a CQ is destroyed
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-25 19:05 ` [PATCH v1 01/11] IB/rxe: Move refcounting earlier in rxe_send() Andrew Boyer
@ 2017-08-25 19:05 ` Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 03/11] IB/rxe: Remove dangling prototype Andrew Boyer
` (10 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-25 19:05 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
This prevents the stack from accessing userspace objects while they
are being torn down.
One possible sequence of events:
- Userspace program exits
- ib_uverbs_cleanup_ucontext() runs, calling ib_destroy_qp(),
ib_destroy_cq(), etc. and releasing/freeing the UCQ
- The QP still has tasklets running, so it isn't destroyed yet
- The CQ is referenced by the QP, so the CQ isn't destroyed yet
- The UCQ is kfree()'d anyway
- A send work request completes
- rxe_send_complete() calls cq->ibcq.comp_handler()
- ib_uverbs_comp_handler() runs and crashes; the event queue is checked
for is_closed, but it has no way to check the ib_ucq_object before
accessing it
The reference counting on the CQ doesn't protect against this since the CQ
hasn't been destroyed yet.
There's no available interface to deregister the UCQ from the CQ, and it
didn't appear that attempting to add reference counting to the UCQ was
going to be a good way to go since this solution is much simpler.
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_cq.c | 19 +++++++++++++++++++
drivers/infiniband/sw/rxe/rxe_loc.h | 2 ++
drivers/infiniband/sw/rxe/rxe_verbs.c | 2 ++
drivers/infiniband/sw/rxe/rxe_verbs.h | 1 +
4 files changed, 24 insertions(+)
diff --git a/drivers/infiniband/sw/rxe/rxe_cq.c b/drivers/infiniband/sw/rxe/rxe_cq.c
index 49fe42c..c4aabf7 100644
--- a/drivers/infiniband/sw/rxe/rxe_cq.c
+++ b/drivers/infiniband/sw/rxe/rxe_cq.c
@@ -69,6 +69,14 @@ int rxe_cq_chk_attr(struct rxe_dev *rxe, struct rxe_cq *cq,
static void rxe_send_complete(unsigned long data)
{
struct rxe_cq *cq = (struct rxe_cq *)data;
+ unsigned long flags;
+
+ spin_lock_irqsave(&cq->cq_lock, flags);
+ if (cq->is_dying) {
+ spin_unlock_irqrestore(&cq->cq_lock, flags);
+ return;
+ }
+ spin_unlock_irqrestore(&cq->cq_lock, flags);
cq->ibcq.comp_handler(&cq->ibcq, cq->ibcq.cq_context);
}
@@ -97,6 +105,8 @@ int rxe_cq_from_init(struct rxe_dev *rxe, struct rxe_cq *cq, int cqe,
if (udata)
cq->is_user = 1;
+ cq->is_dying = false;
+
tasklet_init(&cq->comp_task, rxe_send_complete, (unsigned long)cq);
spin_lock_init(&cq->cq_lock);
@@ -156,6 +166,15 @@ int rxe_cq_post(struct rxe_cq *cq, struct rxe_cqe *cqe, int solicited)
return 0;
}
+void rxe_cq_disable(struct rxe_cq *cq)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&cq->cq_lock, flags);
+ cq->is_dying = true;
+ spin_unlock_irqrestore(&cq->cq_lock, flags);
+}
+
void rxe_cq_cleanup(struct rxe_pool_entry *arg)
{
struct rxe_cq *cq = container_of(arg, typeof(*cq), pelem);
diff --git a/drivers/infiniband/sw/rxe/rxe_loc.h b/drivers/infiniband/sw/rxe/rxe_loc.h
index d6299ed..64f8fa1 100644
--- a/drivers/infiniband/sw/rxe/rxe_loc.h
+++ b/drivers/infiniband/sw/rxe/rxe_loc.h
@@ -64,6 +64,8 @@ int rxe_cq_from_init(struct rxe_dev *rxe, struct rxe_cq *cq, int cqe,
int rxe_cq_post(struct rxe_cq *cq, struct rxe_cqe *cqe, int solicited);
+void rxe_cq_disable(struct rxe_cq *cq);
+
void rxe_cq_cleanup(struct rxe_pool_entry *arg);
/* rxe_mcast.c */
diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c
index af90a7d..02a39e8 100644
--- a/drivers/infiniband/sw/rxe/rxe_verbs.c
+++ b/drivers/infiniband/sw/rxe/rxe_verbs.c
@@ -960,6 +960,8 @@ static int rxe_destroy_cq(struct ib_cq *ibcq)
{
struct rxe_cq *cq = to_rcq(ibcq);
+ rxe_cq_disable(cq);
+
rxe_drop_ref(cq);
return 0;
}
diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.h b/drivers/infiniband/sw/rxe/rxe_verbs.h
index 5a180fb..b09a9e2 100644
--- a/drivers/infiniband/sw/rxe/rxe_verbs.h
+++ b/drivers/infiniband/sw/rxe/rxe_verbs.h
@@ -89,6 +89,7 @@ struct rxe_cq {
struct rxe_queue *queue;
spinlock_t cq_lock;
u8 notify;
+ bool is_dying;
int is_user;
struct tasklet_struct comp_task;
};
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v1 03/11] IB/rxe: Remove dangling prototype
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-25 19:05 ` [PATCH v1 01/11] IB/rxe: Move refcounting earlier in rxe_send() Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 02/11] IB/rxe: Disable completion upcalls when a CQ is destroyed Andrew Boyer
@ 2017-08-25 19:05 ` Andrew Boyer
[not found] ` <1503687956-7110-4-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-25 19:05 ` [PATCH v1 04/11] IB/rxe: Fix up the responder's find_resources() function Andrew Boyer
` (9 subsequent siblings)
12 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-08-25 19:05 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
Acked-by: Moni Shoua <monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_loc.h | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_loc.h b/drivers/infiniband/sw/rxe/rxe_loc.h
index 64f8fa1..8ef2d3f 100644
--- a/drivers/infiniband/sw/rxe/rxe_loc.h
+++ b/drivers/infiniband/sw/rxe/rxe_loc.h
@@ -221,8 +221,6 @@ static inline void rxe_advance_resp_resource(struct rxe_qp *qp)
void retransmit_timer(unsigned long data);
void rnr_nak_timer(unsigned long data);
-void dump_qp(struct rxe_qp *qp);
-
/* rxe_srq.c */
#define IB_SRQ_INIT_MASK (~IB_SRQ_LIMIT)
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v1 04/11] IB/rxe: Fix up the responder's find_resources() function
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (2 preceding siblings ...)
2017-08-25 19:05 ` [PATCH v1 03/11] IB/rxe: Remove dangling prototype Andrew Boyer
@ 2017-08-25 19:05 ` Andrew Boyer
[not found] ` <1503687956-7110-5-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-25 19:05 ` [PATCH v1 05/11] IB/rxe: Fix destination cache for IPv6 Andrew Boyer
` (8 subsequent siblings)
12 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-08-25 19:05 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
The resource array is sized by max_dest_rd_atomic, not max_rd_atomic.
Iterating over max_rd_atomic entries of qp->resp.resources[] will cause
incorrect behavior when the two attributes are different (or even
crash if max_rd_atomic is larger).
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_resp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c
index a958ee9..4240866 100644
--- a/drivers/infiniband/sw/rxe/rxe_resp.c
+++ b/drivers/infiniband/sw/rxe/rxe_resp.c
@@ -1055,7 +1055,7 @@ static struct resp_res *find_resource(struct rxe_qp *qp, u32 psn)
{
int i;
- for (i = 0; i < qp->attr.max_rd_atomic; i++) {
+ for (i = 0; i < qp->attr.max_dest_rd_atomic; i++) {
struct resp_res *res = &qp->resp.resources[i];
if (res->type == 0)
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v1 05/11] IB/rxe: Fix destination cache for IPv6
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (3 preceding siblings ...)
2017-08-25 19:05 ` [PATCH v1 04/11] IB/rxe: Fix up the responder's find_resources() function Andrew Boyer
@ 2017-08-25 19:05 ` Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 06/11] IB/rxe: Add dst_clone() in prepare_ipv6_hdr() Andrew Boyer
` (7 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-25 19:05 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
To successfully match an IPv6 path, the path cookie must match. Store it
in the QP so that the IPv6 path can be reused.
Replace open-coded version of dst_check() with the actual call, fixing the
logic. The open-coded version skips the check call if dst->obsolete is 0
(DST_OBSOLETE_NONE), proceeding to replace the route. DST_OBSOLETE_NONE
means that the route may continue to be used, though.
Fixes: 4ed6ad1eb30e ("IB/rxe: Cache dst in QP instead of getting it...")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_net.c | 7 ++++++-
drivers/infiniband/sw/rxe/rxe_verbs.h | 1 +
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
index 0810f38..a93ae3a 100644
--- a/drivers/infiniband/sw/rxe/rxe_net.c
+++ b/drivers/infiniband/sw/rxe/rxe_net.c
@@ -191,7 +191,7 @@ static struct dst_entry *rxe_find_route(struct rxe_dev *rxe,
if (qp_type(qp) == IB_QPT_RC)
dst = sk_dst_get(qp->sk->sk);
- if (!dst || !(dst->obsolete && dst->ops->check(dst, 0))) {
+ if (!dst || !dst_check(dst, qp->dst_cookie)) {
if (dst)
dst_release(dst);
@@ -209,6 +209,11 @@ static struct dst_entry *rxe_find_route(struct rxe_dev *rxe,
saddr6 = &av->sgid_addr._sockaddr_in6.sin6_addr;
daddr6 = &av->dgid_addr._sockaddr_in6.sin6_addr;
dst = rxe_find_route6(rxe->ndev, saddr6, daddr6);
+#if IS_ENABLED(CONFIG_IPV6)
+ if (dst)
+ qp->dst_cookie =
+ rt6_get_cookie((struct rt6_info *)dst);
+#endif
}
}
diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.h b/drivers/infiniband/sw/rxe/rxe_verbs.h
index b09a9e2..0c2dbe4 100644
--- a/drivers/infiniband/sw/rxe/rxe_verbs.h
+++ b/drivers/infiniband/sw/rxe/rxe_verbs.h
@@ -248,6 +248,7 @@ struct rxe_qp {
struct rxe_rq rq;
struct socket *sk;
+ u32 dst_cookie;
struct rxe_av pri_av;
struct rxe_av alt_av;
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v1 06/11] IB/rxe: Add dst_clone() in prepare_ipv6_hdr()
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (4 preceding siblings ...)
2017-08-25 19:05 ` [PATCH v1 05/11] IB/rxe: Fix destination cache for IPv6 Andrew Boyer
@ 2017-08-25 19:05 ` Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 07/11] IB/rxe: Fix up rxe_qp_cleanup() Andrew Boyer
` (6 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-25 19:05 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
Otherwise the reference count goes negative as IPv6 packets complete.
Fixes: 4ed6ad1eb30e ("IB/rxe: Cache dst in QP instead of getting it...")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_net.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
index a93ae3a..3fbbadc 100644
--- a/drivers/infiniband/sw/rxe/rxe_net.c
+++ b/drivers/infiniband/sw/rxe/rxe_net.c
@@ -342,7 +342,7 @@ static void prepare_ipv6_hdr(struct dst_entry *dst, struct sk_buff *skb,
memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED
| IPSKB_REROUTED);
- skb_dst_set(skb, dst);
+ skb_dst_set(skb, dst_clone(dst));
__skb_push(skb, sizeof(*ip6h));
skb_reset_network_header(skb);
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v1 07/11] IB/rxe: Fix up rxe_qp_cleanup()
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (5 preceding siblings ...)
2017-08-25 19:05 ` [PATCH v1 06/11] IB/rxe: Add dst_clone() in prepare_ipv6_hdr() Andrew Boyer
@ 2017-08-25 19:05 ` Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 08/11] IB/rxe: Remove unneeded initialization in prepare6() Andrew Boyer
` (5 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-25 19:05 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
Replace sk_dst_get()/dst_release() in rxe_qp_cleanup() with sk_dst_reset().
sk_dst_get() takes a new reference on dst, so the dst_release() doesn't
actually release the original reference, which was the design intent.
Fixes: 4ed6ad1eb30e ("IB/rxe: Cache dst in QP instead of getting it...")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_qp.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
index 80ccc7c..00bda93 100644
--- a/drivers/infiniband/sw/rxe/rxe_qp.c
+++ b/drivers/infiniband/sw/rxe/rxe_qp.c
@@ -851,13 +851,8 @@ void rxe_qp_cleanup(struct rxe_pool_entry *arg)
qp->resp.mr = NULL;
}
- if (qp_type(qp) == IB_QPT_RC) {
- struct dst_entry *dst = NULL;
-
- dst = sk_dst_get(qp->sk->sk);
- if (dst)
- dst_release(dst);
- }
+ if (qp_type(qp) == IB_QPT_RC)
+ sk_dst_reset(qp->sk->sk);
free_rd_atomic_resources(qp);
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v1 08/11] IB/rxe: Remove unneeded initialization in prepare6()
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (6 preceding siblings ...)
2017-08-25 19:05 ` [PATCH v1 07/11] IB/rxe: Fix up rxe_qp_cleanup() Andrew Boyer
@ 2017-08-25 19:05 ` Andrew Boyer
[not found] ` <1503687956-7110-9-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-25 19:05 ` [PATCH v1 09/11] IB/rxe: Another fix for broken receive queue draining Andrew Boyer
` (4 subsequent siblings)
12 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-08-25 19:05 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
Fixes: 4ed6ad1eb30e ("IB/rxe: Cache dst in QP instead of getting it...")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_net.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
index 3fbbadc..3ba76e7 100644
--- a/drivers/infiniband/sw/rxe/rxe_net.c
+++ b/drivers/infiniband/sw/rxe/rxe_net.c
@@ -393,7 +393,7 @@ static int prepare6(struct rxe_dev *rxe, struct rxe_pkt_info *pkt,
struct sk_buff *skb, struct rxe_av *av)
{
struct rxe_qp *qp = pkt->qp;
- struct dst_entry *dst = NULL;
+ struct dst_entry *dst;
struct in6_addr *saddr = &av->sgid_addr._sockaddr_in6.sin6_addr;
struct in6_addr *daddr = &av->dgid_addr._sockaddr_in6.sin6_addr;
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v1 09/11] IB/rxe: Another fix for broken receive queue draining
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (7 preceding siblings ...)
2017-08-25 19:05 ` [PATCH v1 08/11] IB/rxe: Remove unneeded initialization in prepare6() Andrew Boyer
@ 2017-08-25 19:05 ` Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 10/11] IB/rxe: Avoid ICRC errors by copying into the skb first Andrew Boyer
` (3 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-25 19:05 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
This fixes another path in rxe_requester() that might overlook stale SKBs,
preventing cleanup.
Fixes: 1217197142d1 ("rxe: fix broken receive queue draining")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_req.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rxe/rxe_req.c
index 7ee465d..24fc0b8 100644
--- a/drivers/infiniband/sw/rxe/rxe_req.c
+++ b/drivers/infiniband/sw/rxe/rxe_req.c
@@ -594,8 +594,10 @@ int rxe_requester(void *arg)
rxe_add_ref(qp);
next_wqe:
- if (unlikely(!qp->valid))
+ if (unlikely(!qp->valid)) {
+ rxe_drain_req_pkts(qp, true);
goto exit;
+ }
if (unlikely(qp->req.state == QP_STATE_ERROR)) {
rxe_drain_req_pkts(qp, true);
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v1 10/11] IB/rxe: Avoid ICRC errors by copying into the skb first
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (8 preceding siblings ...)
2017-08-25 19:05 ` [PATCH v1 09/11] IB/rxe: Another fix for broken receive queue draining Andrew Boyer
@ 2017-08-25 19:05 ` Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 11/11] IB/rxe: Handle NETDEV_CHANGE events Andrew Boyer
` (2 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-25 19:05 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
The current process is to first calculate the CRC and then copy the client
data into the packet. This leaves a window in which the packet contents and
CRC can get out of sync, if the client changes the data after the CRC is
calculated but before the data is copied.
By copying the data into the packet and then calculating the CRC directly
from the packet contents we eliminate the window.
This can be seen with qperf's ud_bi_bw test. This seems like very
strange/reckless client behavior, but whether the client has mangled its
data or not RXE should be able to transfer it reliably.
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_mr.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_mr.c b/drivers/infiniband/sw/rxe/rxe_mr.c
index e37cc89..5c2684b 100644
--- a/drivers/infiniband/sw/rxe/rxe_mr.c
+++ b/drivers/infiniband/sw/rxe/rxe_mr.c
@@ -367,11 +367,11 @@ int rxe_mem_copy(struct rxe_mem *mem, u64 iova, void *addr, int length,
dest = (dir == to_mem_obj) ?
((void *)(uintptr_t)iova) : addr;
+ memcpy(dest, src, length);
+
if (crcp)
*crcp = rxe_crc32(to_rdev(mem->pd->ibpd.device),
- *crcp, src, length);
-
- memcpy(dest, src, length);
+ *crcp, dest, length);
return 0;
}
@@ -401,11 +401,11 @@ int rxe_mem_copy(struct rxe_mem *mem, u64 iova, void *addr, int length,
if (bytes > length)
bytes = length;
+ memcpy(dest, src, bytes);
+
if (crcp)
crc = rxe_crc32(to_rdev(mem->pd->ibpd.device),
- crc, src, bytes);
-
- memcpy(dest, src, bytes);
+ crc, dest, bytes);
length -= bytes;
addr += bytes;
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v1 11/11] IB/rxe: Handle NETDEV_CHANGE events
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (9 preceding siblings ...)
2017-08-25 19:05 ` [PATCH v1 10/11] IB/rxe: Avoid ICRC errors by copying into the skb first Andrew Boyer
@ 2017-08-25 19:05 ` Andrew Boyer
[not found] ` <1503687956-7110-12-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-27 12:33 ` [PATCH v1 00/11] IB/rxe: Bug fixes Yuval Shaia
2017-08-28 20:11 ` [PATCH v2 " Andrew Boyer
12 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-08-25 19:05 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
Without this fix, ports configured on top of ixgbe miss link up
notifications. ibv_query_port() will continue to return IBV_PORT_DOWN even
though the port is up and working.
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_net.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
index 3ba76e7..133c6c4 100644
--- a/drivers/infiniband/sw/rxe/rxe_net.c
+++ b/drivers/infiniband/sw/rxe/rxe_net.c
@@ -651,8 +651,13 @@ static int rxe_notify(struct notifier_block *not_blk,
pr_info("%s changed mtu to %d\n", ndev->name, ndev->mtu);
rxe_set_mtu(rxe, ndev->mtu);
break;
- case NETDEV_REBOOT:
case NETDEV_CHANGE:
+ if (netif_running(ndev) && netif_carrier_ok(ndev))
+ rxe_port_up(rxe, port_num);
+ else
+ rxe_port_down(rxe, port_num);
+ break;
+ case NETDEV_REBOOT:
case NETDEV_GOING_DOWN:
case NETDEV_CHANGEADDR:
case NETDEV_CHANGENAME:
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* Re: [PATCH v1 11/11] IB/rxe: Handle NETDEV_CHANGE events
[not found] ` <1503687956-7110-12-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-08-27 10:30 ` Yuval Shaia
2017-08-28 12:38 ` Boyer, Andrew
2017-08-27 23:00 ` kbuild test robot
1 sibling, 1 reply; 61+ messages in thread
From: Yuval Shaia @ 2017-08-27 10:30 UTC (permalink / raw)
To: Andrew Boyer
Cc: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
On Fri, Aug 25, 2017 at 03:05:56PM -0400, Andrew Boyer wrote:
> Without this fix, ports configured on top of ixgbe miss link up
> notifications. ibv_query_port() will continue to return IBV_PORT_DOWN even
> though the port is up and working.
>
> Fixes: 8700e3e7c485 ("Soft RoCE driver")
> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
> ---
> drivers/infiniband/sw/rxe/rxe_net.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
> index 3ba76e7..133c6c4 100644
> --- a/drivers/infiniband/sw/rxe/rxe_net.c
> +++ b/drivers/infiniband/sw/rxe/rxe_net.c
> @@ -651,8 +651,13 @@ static int rxe_notify(struct notifier_block *not_blk,
> pr_info("%s changed mtu to %d\n", ndev->name, ndev->mtu);
> rxe_set_mtu(rxe, ndev->mtu);
> break;
> - case NETDEV_REBOOT:
> case NETDEV_CHANGE:
> + if (netif_running(ndev) && netif_carrier_ok(ndev))
> + rxe_port_up(rxe, port_num);
On top of which branch/patch this patch is based on?
> + else
> + rxe_port_down(rxe, port_num);
> + break;
> + case NETDEV_REBOOT:
> case NETDEV_GOING_DOWN:
> case NETDEV_CHANGEADDR:
> case NETDEV_CHANGENAME:
> --
> 1.8.3.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH v1 01/11] IB/rxe: Move refcounting earlier in rxe_send()
[not found] ` <1503687956-7110-2-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-08-27 12:01 ` Yuval Shaia
2017-08-28 13:05 ` Boyer, Andrew
0 siblings, 1 reply; 61+ messages in thread
From: Yuval Shaia @ 2017-08-27 12:01 UTC (permalink / raw)
To: Andrew Boyer
Cc: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
On Fri, Aug 25, 2017 at 03:05:46PM -0400, Andrew Boyer wrote:
> The network stack will call nskb's destructor, rxe_skb_tx_dtor(), if the
> packet gets dropped by ip_local_out()/ip6_local_out(). Thus we need to add
> the QP ref before output to avoid extra dereferences during network
> congestion. This could lead to unwanted destruction of the QP.
>
> Fix up the skb_out accounting, too.
>
> Fixes: fda85ce91240 ("IB/rxe: Fix kernel panic from skb destructor")
> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
> Acked-by: Moni Shoua <monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
> ---
> drivers/infiniband/sw/rxe/rxe_net.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
> index 08f3f90..0810f38 100644
> --- a/drivers/infiniband/sw/rxe/rxe_net.c
> +++ b/drivers/infiniband/sw/rxe/rxe_net.c
> @@ -460,12 +460,17 @@ int rxe_send(struct rxe_dev *rxe, struct rxe_pkt_info *pkt, struct sk_buff *skb)
> nskb->destructor = rxe_skb_tx_dtor;
> nskb->sk = pkt->qp->sk->sk;
>
> + rxe_add_ref(pkt->qp);
> + atomic_inc(&pkt->qp->skb_out);
> +
> if (av->network_type == RDMA_NETWORK_IPV4) {
> err = ip_local_out(dev_net(skb_dst(skb)->dev), nskb->sk, nskb);
> } else if (av->network_type == RDMA_NETWORK_IPV6) {
> err = ip6_local_out(dev_net(skb_dst(skb)->dev), nskb->sk, nskb);
> } else {
> pr_err("Unknown layer 3 protocol: %d\n", av->network_type);
> + atomic_dec(&pkt->qp->skb_out);
> + rxe_drop_ref(pkt->qp);
> kfree_skb(nskb);
> return -EINVAL;
> }
> @@ -475,10 +480,7 @@ int rxe_send(struct rxe_dev *rxe, struct rxe_pkt_info *pkt, struct sk_buff *skb)
> return -EAGAIN;
> }
Shouldn't we also dec and drop ref in case that net_xmit_eval returns
error?
>
> - rxe_add_ref(pkt->qp);
> - atomic_inc(&pkt->qp->skb_out);
> kfree_skb(skb);
> -
> return 0;
> }
>
> --
> 1.8.3.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH v1 03/11] IB/rxe: Remove dangling prototype
[not found] ` <1503687956-7110-4-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-08-27 12:03 ` Yuval Shaia
0 siblings, 0 replies; 61+ messages in thread
From: Yuval Shaia @ 2017-08-27 12:03 UTC (permalink / raw)
To: Andrew Boyer
Cc: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
On Fri, Aug 25, 2017 at 03:05:48PM -0400, Andrew Boyer wrote:
> Fixes: 8700e3e7c485 ("Soft RoCE driver")
> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
> Acked-by: Moni Shoua <monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Reviewed-by: Yuval Shaia <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
> ---
> drivers/infiniband/sw/rxe/rxe_loc.h | 2 --
> 1 file changed, 2 deletions(-)
>
> diff --git a/drivers/infiniband/sw/rxe/rxe_loc.h b/drivers/infiniband/sw/rxe/rxe_loc.h
> index 64f8fa1..8ef2d3f 100644
> --- a/drivers/infiniband/sw/rxe/rxe_loc.h
> +++ b/drivers/infiniband/sw/rxe/rxe_loc.h
> @@ -221,8 +221,6 @@ static inline void rxe_advance_resp_resource(struct rxe_qp *qp)
> void retransmit_timer(unsigned long data);
> void rnr_nak_timer(unsigned long data);
>
> -void dump_qp(struct rxe_qp *qp);
> -
> /* rxe_srq.c */
> #define IB_SRQ_INIT_MASK (~IB_SRQ_LIMIT)
>
> --
> 1.8.3.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH v1 04/11] IB/rxe: Fix up the responder's find_resources() function
[not found] ` <1503687956-7110-5-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-08-27 12:14 ` Yuval Shaia
0 siblings, 0 replies; 61+ messages in thread
From: Yuval Shaia @ 2017-08-27 12:14 UTC (permalink / raw)
To: Andrew Boyer
Cc: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
On Fri, Aug 25, 2017 at 03:05:49PM -0400, Andrew Boyer wrote:
> The resource array is sized by max_dest_rd_atomic, not max_rd_atomic.
> Iterating over max_rd_atomic entries of qp->resp.resources[] will cause
> incorrect behavior when the two attributes are different (or even
> crash if max_rd_atomic is larger).
>
> Fixes: 8700e3e7c485 ("Soft RoCE driver")
> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
Reviewed-by: Yuval Shaia <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
> ---
> drivers/infiniband/sw/rxe/rxe_resp.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c
> index a958ee9..4240866 100644
> --- a/drivers/infiniband/sw/rxe/rxe_resp.c
> +++ b/drivers/infiniband/sw/rxe/rxe_resp.c
> @@ -1055,7 +1055,7 @@ static struct resp_res *find_resource(struct rxe_qp *qp, u32 psn)
> {
> int i;
>
> - for (i = 0; i < qp->attr.max_rd_atomic; i++) {
> + for (i = 0; i < qp->attr.max_dest_rd_atomic; i++) {
> struct resp_res *res = &qp->resp.resources[i];
>
> if (res->type == 0)
> --
> 1.8.3.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH v1 08/11] IB/rxe: Remove unneeded initialization in prepare6()
[not found] ` <1503687956-7110-9-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-08-27 12:20 ` Yuval Shaia
0 siblings, 0 replies; 61+ messages in thread
From: Yuval Shaia @ 2017-08-27 12:20 UTC (permalink / raw)
To: Andrew Boyer
Cc: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
On Fri, Aug 25, 2017 at 03:05:53PM -0400, Andrew Boyer wrote:
> Fixes: 4ed6ad1eb30e ("IB/rxe: Cache dst in QP instead of getting it...")
> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
Reviewed-by: Yuval Shaia <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
> ---
> drivers/infiniband/sw/rxe/rxe_net.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
> index 3fbbadc..3ba76e7 100644
> --- a/drivers/infiniband/sw/rxe/rxe_net.c
> +++ b/drivers/infiniband/sw/rxe/rxe_net.c
> @@ -393,7 +393,7 @@ static int prepare6(struct rxe_dev *rxe, struct rxe_pkt_info *pkt,
> struct sk_buff *skb, struct rxe_av *av)
> {
> struct rxe_qp *qp = pkt->qp;
> - struct dst_entry *dst = NULL;
> + struct dst_entry *dst;
> struct in6_addr *saddr = &av->sgid_addr._sockaddr_in6.sin6_addr;
> struct in6_addr *daddr = &av->dgid_addr._sockaddr_in6.sin6_addr;
>
> --
> 1.8.3.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH v1 00/11] IB/rxe: Bug fixes
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (10 preceding siblings ...)
2017-08-25 19:05 ` [PATCH v1 11/11] IB/rxe: Handle NETDEV_CHANGE events Andrew Boyer
@ 2017-08-27 12:33 ` Yuval Shaia
2017-08-28 20:11 ` [PATCH v2 " Andrew Boyer
12 siblings, 0 replies; 61+ messages in thread
From: Yuval Shaia @ 2017-08-27 12:33 UTC (permalink / raw)
To: Andrew Boyer
Cc: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA, Marcel Apfelbaum
Hi Andrew,
I'm working on a bug that prevents RXE from routing between two instances of
RXE on the same host (https://patchwork.kernel.org/patch/9865227/).
When working on latest branches (since intro of 587fea741134) i started to
get system panic and i was not able to continue.
With your patch-set it works excellent!!!
So, besides some comments for one or two patches and besides some patches
which i skip the review because of lack of background, you have my:
Tested-by: Yuval Shaia <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
And
Big-Thanks-by: Yuval Shaia <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
Yuval
On Fri, Aug 25, 2017 at 03:05:45PM -0400, Andrew Boyer wrote:
> This patch set addresses a few issues which we have found in RXE.
> The first patch fixes a serious issue that causes kernel panics during
> network congestion.
>
> Changes for v1:
> * Address review comments and add review tags from Moni
> * Split destination cache patch into 4 smaller patches
> * Added CONFIG_IPV6 check to destination cache patch
> * Added new NETDEV_CHANGE patch
>
> Andrew Boyer (11):
> IB/rxe: Move refcounting earlier in rxe_send()
> IB/rxe: Disable completion upcalls when a CQ is destroyed
> IB/rxe: Remove dangling prototype
> IB/rxe: Fix up the responder's find_resources() function
> IB/rxe: Fix destination cache for IPv6
> IB/rxe: Add dst_clone() in prepare_ipv6_hdr()
> IB/rxe: Fix up rxe_qp_cleanup()
> IB/rxe: Remove unneeded initialization in prepare6()
> IB/rxe: Another fix for broken receive queue draining
> IB/rxe: Avoid ICRC errors by copying into the skb first
> IB/rxe: Handle NETDEV_CHANGE events
>
> drivers/infiniband/sw/rxe/rxe_cq.c | 19 +++++++++++++++++++
> drivers/infiniband/sw/rxe/rxe_loc.h | 4 ++--
> drivers/infiniband/sw/rxe/rxe_mr.c | 12 ++++++------
> drivers/infiniband/sw/rxe/rxe_net.c | 26 +++++++++++++++++++-------
> drivers/infiniband/sw/rxe/rxe_qp.c | 9 ++-------
> drivers/infiniband/sw/rxe/rxe_req.c | 4 +++-
> drivers/infiniband/sw/rxe/rxe_resp.c | 2 +-
> drivers/infiniband/sw/rxe/rxe_verbs.c | 2 ++
> drivers/infiniband/sw/rxe/rxe_verbs.h | 2 ++
> 9 files changed, 56 insertions(+), 24 deletions(-)
>
> --
> 1.8.3.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH v1 11/11] IB/rxe: Handle NETDEV_CHANGE events
[not found] ` <1503687956-7110-12-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-27 10:30 ` Yuval Shaia
@ 2017-08-27 23:00 ` kbuild test robot
1 sibling, 0 replies; 61+ messages in thread
From: kbuild test robot @ 2017-08-27 23:00 UTC (permalink / raw)
Cc: kbuild-all-JC7UmRfGjtg, monis-VPRAkNaXOzVWk0Htik3J/w,
yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA, Andrew Boyer
[-- Attachment #1: Type: text/plain, Size: 3054 bytes --]
Hi Andrew,
[auto build test ERROR on rdma/master]
[also build test ERROR on v4.13-rc6 next-20170825]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Andrew-Boyer/IB-rxe-Bug-fixes/20170828-060737
base: https://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma.git master
config: i386-randconfig-x001-201735 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
All errors (new ones prefixed by >>):
drivers/infiniband//sw/rxe/rxe_net.c: In function 'rxe_notify':
>> drivers/infiniband//sw/rxe/rxe_net.c:656:21: error: 'port_num' undeclared (first use in this function)
rxe_port_up(rxe, port_num);
^~~~~~~~
drivers/infiniband//sw/rxe/rxe_net.c:656:21: note: each undeclared identifier is reported only once for each function it appears in
>> drivers/infiniband//sw/rxe/rxe_net.c:656:4: error: too many arguments to function 'rxe_port_up'
rxe_port_up(rxe, port_num);
^~~~~~~~~~~
drivers/infiniband//sw/rxe/rxe_net.c:604:6: note: declared here
void rxe_port_up(struct rxe_dev *rxe)
^~~~~~~~~~~
>> drivers/infiniband//sw/rxe/rxe_net.c:658:4: error: too many arguments to function 'rxe_port_down'
rxe_port_down(rxe, port_num);
^~~~~~~~~~~~~
drivers/infiniband//sw/rxe/rxe_net.c:617:6: note: declared here
void rxe_port_down(struct rxe_dev *rxe)
^~~~~~~~~~~~~
vim +/port_num +656 drivers/infiniband//sw/rxe/rxe_net.c
628
629 static int rxe_notify(struct notifier_block *not_blk,
630 unsigned long event,
631 void *arg)
632 {
633 struct net_device *ndev = netdev_notifier_info_to_dev(arg);
634 struct rxe_dev *rxe = net_to_rxe(ndev);
635
636 if (!rxe)
637 goto out;
638
639 switch (event) {
640 case NETDEV_UNREGISTER:
641 list_del(&rxe->list);
642 rxe_remove(rxe);
643 break;
644 case NETDEV_UP:
645 rxe_port_up(rxe);
646 break;
647 case NETDEV_DOWN:
648 rxe_port_down(rxe);
649 break;
650 case NETDEV_CHANGEMTU:
651 pr_info("%s changed mtu to %d\n", ndev->name, ndev->mtu);
652 rxe_set_mtu(rxe, ndev->mtu);
653 break;
654 case NETDEV_CHANGE:
655 if (netif_running(ndev) && netif_carrier_ok(ndev))
> 656 rxe_port_up(rxe, port_num);
657 else
> 658 rxe_port_down(rxe, port_num);
659 break;
660 case NETDEV_REBOOT:
661 case NETDEV_GOING_DOWN:
662 case NETDEV_CHANGEADDR:
663 case NETDEV_CHANGENAME:
664 case NETDEV_FEAT_CHANGE:
665 default:
666 pr_info("ignoring netdev event = %ld for %s\n",
667 event, ndev->name);
668 break;
669 }
670 out:
671 return NOTIFY_OK;
672 }
673
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 30233 bytes --]
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH v1 11/11] IB/rxe: Handle NETDEV_CHANGE events
2017-08-27 10:30 ` Yuval Shaia
@ 2017-08-28 12:38 ` Boyer, Andrew
[not found] ` <D5C986D7.1DF85%Andrew.Boyer-mb1K0bWo544@public.gmane.org>
0 siblings, 1 reply; 61+ messages in thread
From: Boyer, Andrew @ 2017-08-28 12:38 UTC (permalink / raw)
To: Yuval Shaia
Cc: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
On 8/27/17, 6:30 AM, "Yuval Shaia" <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org> wrote:
>On Fri, Aug 25, 2017 at 03:05:56PM -0400, Andrew Boyer wrote:
>> Without this fix, ports configured on top of ixgbe miss link up
>> notifications. ibv_query_port() will continue to return IBV_PORT_DOWN
>>even
>> though the port is up and working.
>>
>> Fixes: 8700e3e7c485 ("Soft RoCE driver")
>> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
>> ---
>> drivers/infiniband/sw/rxe/rxe_net.c | 7 ++++++-
>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/infiniband/sw/rxe/rxe_net.c
>>b/drivers/infiniband/sw/rxe/rxe_net.c
>> index 3ba76e7..133c6c4 100644
>> --- a/drivers/infiniband/sw/rxe/rxe_net.c
>> +++ b/drivers/infiniband/sw/rxe/rxe_net.c
>> @@ -651,8 +651,13 @@ static int rxe_notify(struct notifier_block
>>*not_blk,
>> pr_info("%s changed mtu to %d\n", ndev->name, ndev->mtu);
>> rxe_set_mtu(rxe, ndev->mtu);
>> break;
>> - case NETDEV_REBOOT:
>> case NETDEV_CHANGE:
>> + if (netif_running(ndev) && netif_carrier_ok(ndev))
>> + rxe_port_up(rxe, port_num);
>
>On top of which branch/patch this patch is based on?
Yikes, it relies on an internal patch that Doug wasn¹t interested in
taking. Will respin.
>
>> + else
>> + rxe_port_down(rxe, port_num);
>> + break;
>> + case NETDEV_REBOOT:
>> case NETDEV_GOING_DOWN:
>> case NETDEV_CHANGEADDR:
>> case NETDEV_CHANGENAME:
>> --
>> 1.8.3.1
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
>> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH v1 01/11] IB/rxe: Move refcounting earlier in rxe_send()
2017-08-27 12:01 ` Yuval Shaia
@ 2017-08-28 13:05 ` Boyer, Andrew
0 siblings, 0 replies; 61+ messages in thread
From: Boyer, Andrew @ 2017-08-28 13:05 UTC (permalink / raw)
To: Yuval Shaia
Cc: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
On 8/27/17, 8:01 AM, "linux-rdma-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org on behalf of Yuval
Shaia" <linux-rdma-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org on behalf of
yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org> wrote:
>On Fri, Aug 25, 2017 at 03:05:46PM -0400, Andrew Boyer wrote:
>> The network stack will call nskb's destructor, rxe_skb_tx_dtor(), if the
>> packet gets dropped by ip_local_out()/ip6_local_out(). Thus we need to
>>add
>> the QP ref before output to avoid extra dereferences during network
>> congestion. This could lead to unwanted destruction of the QP.
>>
>> Fix up the skb_out accounting, too.
>>
>> Fixes: fda85ce91240 ("IB/rxe: Fix kernel panic from skb destructor")
>> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
>> Acked-by: Moni Shoua <monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
>> ---
>> drivers/infiniband/sw/rxe/rxe_net.c | 8 +++++---
>> 1 file changed, 5 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/infiniband/sw/rxe/rxe_net.c
>>b/drivers/infiniband/sw/rxe/rxe_net.c
>> index 08f3f90..0810f38 100644
>> --- a/drivers/infiniband/sw/rxe/rxe_net.c
>> +++ b/drivers/infiniband/sw/rxe/rxe_net.c
>> @@ -460,12 +460,17 @@ int rxe_send(struct rxe_dev *rxe, struct
>>rxe_pkt_info *pkt, struct sk_buff *skb)
>> nskb->destructor = rxe_skb_tx_dtor;
>> nskb->sk = pkt->qp->sk->sk;
>>
>> + rxe_add_ref(pkt->qp);
>> + atomic_inc(&pkt->qp->skb_out);
>> +
>> if (av->network_type == RDMA_NETWORK_IPV4) {
>> err = ip_local_out(dev_net(skb_dst(skb)->dev), nskb->sk, nskb);
>> } else if (av->network_type == RDMA_NETWORK_IPV6) {
>> err = ip6_local_out(dev_net(skb_dst(skb)->dev), nskb->sk, nskb);
>> } else {
>> pr_err("Unknown layer 3 protocol: %d\n", av->network_type);
>> + atomic_dec(&pkt->qp->skb_out);
>> + rxe_drop_ref(pkt->qp);
>> kfree_skb(nskb);
>> return -EINVAL;
>> }
>> @@ -475,10 +480,7 @@ int rxe_send(struct rxe_dev *rxe, struct
>>rxe_pkt_info *pkt, struct sk_buff *skb)
>> return -EAGAIN;
>> }
>
>Shouldn't we also dec and drop ref in case that net_xmit_eval returns
>error?
That¹s the catch. net_xmit_eval() is just looking for error codes; it¹s
not doing the actual transmit. The transmit already started back in
ip_local_out()/ip6_local_out(), and if those end up failing the destructor
will be called. Any cleanup we do in this error path would be duplicated
in the destructor.
-Andrew
>
>>
>> - rxe_add_ref(pkt->qp);
>> - atomic_inc(&pkt->qp->skb_out);
>> kfree_skb(skb);
>> -
>> return 0;
>> }
>>
>> --
>> 1.8.3.1
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
>> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>--
>To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
>the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
>More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH v1 11/11] IB/rxe: Handle NETDEV_CHANGE events
[not found] ` <D5C986D7.1DF85%Andrew.Boyer-mb1K0bWo544@public.gmane.org>
@ 2017-08-28 13:37 ` Doug Ledford
[not found] ` <e426219f-a558-209b-350c-bd71c39e52eb-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 61+ messages in thread
From: Doug Ledford @ 2017-08-28 13:37 UTC (permalink / raw)
To: Boyer, Andrew, Yuval Shaia
Cc: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
[-- Attachment #1.1: Type: text/plain, Size: 1683 bytes --]
On 8/28/2017 8:38 AM, Boyer, Andrew wrote:
>
> On 8/27/17, 6:30 AM, "Yuval Shaia" <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org> wrote:
>
>> On Fri, Aug 25, 2017 at 03:05:56PM -0400, Andrew Boyer wrote:
>>> Without this fix, ports configured on top of ixgbe miss link up
>>> notifications. ibv_query_port() will continue to return IBV_PORT_DOWN
>>> even
>>> though the port is up and working.
>>>
>>> Fixes: 8700e3e7c485 ("Soft RoCE driver")
>>> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
>>> ---
>>> drivers/infiniband/sw/rxe/rxe_net.c | 7 ++++++-
>>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/infiniband/sw/rxe/rxe_net.c
>>> b/drivers/infiniband/sw/rxe/rxe_net.c
>>> index 3ba76e7..133c6c4 100644
>>> --- a/drivers/infiniband/sw/rxe/rxe_net.c
>>> +++ b/drivers/infiniband/sw/rxe/rxe_net.c
>>> @@ -651,8 +651,13 @@ static int rxe_notify(struct notifier_block
>>> *not_blk,
>>> pr_info("%s changed mtu to %d\n", ndev->name, ndev->mtu);
>>> rxe_set_mtu(rxe, ndev->mtu);
>>> break;
>>> - case NETDEV_REBOOT:
>>> case NETDEV_CHANGE:
>>> + if (netif_running(ndev) && netif_carrier_ok(ndev))
>>> + rxe_port_up(rxe, port_num);
>> On top of which branch/patch this patch is based on?
> Yikes, it relies on an internal patch that Doug wasn¹t interested in
> taking. Will respin.
>
I don't remember seeing a patch come through that added rxe_port_up(),
let alone turning it away...
--
Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
GPG Key ID: B826A3330E572FDD
Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 884 bytes --]
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH v1 11/11] IB/rxe: Handle NETDEV_CHANGE events
[not found] ` <e426219f-a558-209b-350c-bd71c39e52eb-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2017-08-28 13:47 ` Boyer, Andrew
[not found] ` <D5C996DB.1DFB5%Andrew.Boyer-mb1K0bWo544@public.gmane.org>
2017-08-28 13:50 ` Yuval Shaia
1 sibling, 1 reply; 61+ messages in thread
From: Boyer, Andrew @ 2017-08-28 13:47 UTC (permalink / raw)
To: Doug Ledford, Yuval Shaia
Cc: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
On 8/28/17, 9:37 AM, "Doug Ledford" <dledford@redhat.com> wrote:
>On 8/28/2017 8:38 AM, Boyer, Andrew wrote:
>>
>> On 8/27/17, 6:30 AM, "Yuval Shaia" <yuval.shaia@oracle.com> wrote:
>>
>>> On Fri, Aug 25, 2017 at 03:05:56PM -0400, Andrew Boyer wrote:
>>>> Without this fix, ports configured on top of ixgbe miss link up
>>>> notifications. ibv_query_port() will continue to return IBV_PORT_DOWN
>>>> even
>>>> though the port is up and working.
>>>>
>>>> Fixes: 8700e3e7c485 ("Soft RoCE driver")
>>>> Signed-off-by: Andrew Boyer <andrew.boyer@dell.com>
>>>> ---
>>>> drivers/infiniband/sw/rxe/rxe_net.c | 7 ++++++-
>>>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/infiniband/sw/rxe/rxe_net.c
>>>> b/drivers/infiniband/sw/rxe/rxe_net.c
>>>> index 3ba76e7..133c6c4 100644
>>>> --- a/drivers/infiniband/sw/rxe/rxe_net.c
>>>> +++ b/drivers/infiniband/sw/rxe/rxe_net.c
>>>> @@ -651,8 +651,13 @@ static int rxe_notify(struct notifier_block
>>>> *not_blk,
>>>> pr_info("%s changed mtu to %d\n", ndev->name, ndev->mtu);
>>>> rxe_set_mtu(rxe, ndev->mtu);
>>>> break;
>>>> - case NETDEV_REBOOT:
>>>> case NETDEV_CHANGE:
>>>> + if (netif_running(ndev) && netif_carrier_ok(ndev))
>>>> + rxe_port_up(rxe, port_num);
>>> On top of which branch/patch this patch is based on?
>> Yikes, it relies on an internal patch that Doug wasn¹t interested in
>> taking. Will respin.
>>
>
>I don't remember seeing a patch come through that added rxe_port_up(),
>let alone turning it away...
It’s the port_num argument that doesn’t exist upstream. We added the
ability for RXE to support a second port (to better mimic an mlx4) but you
said it wasn’t needed.
-Andrew
>
>--
>Doug Ledford <dledford@redhat.com>
> GPG Key ID: B826A3330E572FDD
> Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD
>
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH v1 11/11] IB/rxe: Handle NETDEV_CHANGE events
[not found] ` <e426219f-a558-209b-350c-bd71c39e52eb-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-08-28 13:47 ` Boyer, Andrew
@ 2017-08-28 13:50 ` Yuval Shaia
1 sibling, 0 replies; 61+ messages in thread
From: Yuval Shaia @ 2017-08-28 13:50 UTC (permalink / raw)
To: Doug Ledford
Cc: Boyer, Andrew, monis-VPRAkNaXOzVWk0Htik3J/w,
yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
On Mon, Aug 28, 2017 at 09:37:08AM -0400, Doug Ledford wrote:
> On 8/28/2017 8:38 AM, Boyer, Andrew wrote:
> >
> > On 8/27/17, 6:30 AM, "Yuval Shaia" <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org> wrote:
> >
> >> On Fri, Aug 25, 2017 at 03:05:56PM -0400, Andrew Boyer wrote:
> >>> Without this fix, ports configured on top of ixgbe miss link up
> >>> notifications. ibv_query_port() will continue to return IBV_PORT_DOWN
> >>> even
> >>> though the port is up and working.
> >>>
> >>> Fixes: 8700e3e7c485 ("Soft RoCE driver")
> >>> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
> >>> ---
> >>> drivers/infiniband/sw/rxe/rxe_net.c | 7 ++++++-
> >>> 1 file changed, 6 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git a/drivers/infiniband/sw/rxe/rxe_net.c
> >>> b/drivers/infiniband/sw/rxe/rxe_net.c
> >>> index 3ba76e7..133c6c4 100644
> >>> --- a/drivers/infiniband/sw/rxe/rxe_net.c
> >>> +++ b/drivers/infiniband/sw/rxe/rxe_net.c
> >>> @@ -651,8 +651,13 @@ static int rxe_notify(struct notifier_block
> >>> *not_blk,
> >>> pr_info("%s changed mtu to %d\n", ndev->name, ndev->mtu);
> >>> rxe_set_mtu(rxe, ndev->mtu);
> >>> break;
> >>> - case NETDEV_REBOOT:
> >>> case NETDEV_CHANGE:
> >>> + if (netif_running(ndev) && netif_carrier_ok(ndev))
> >>> + rxe_port_up(rxe, port_num);
> >> On top of which branch/patch this patch is based on?
> > Yikes, it relies on an internal patch that Doug wasn¹t interested in
> > taking. Will respin.
> >
>
> I don't remember seeing a patch come through that added rxe_port_up(),
> let alone turning it away...
rxe_port_up is already implemented but since RXE device has only one port i
don't see a reason to pass porn_num to this function.
I might be wrong.
>
> --
> Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> GPG Key ID: B826A3330E572FDD
> Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD
>
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH v1 11/11] IB/rxe: Handle NETDEV_CHANGE events
[not found] ` <D5C996DB.1DFB5%Andrew.Boyer-mb1K0bWo544@public.gmane.org>
@ 2017-08-28 14:13 ` Doug Ledford
0 siblings, 0 replies; 61+ messages in thread
From: Doug Ledford @ 2017-08-28 14:13 UTC (permalink / raw)
To: Boyer, Andrew, Yuval Shaia
Cc: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
[-- Attachment #1.1: Type: text/plain, Size: 2211 bytes --]
On 8/28/2017 9:47 AM, Boyer, Andrew wrote:
>
>
> On 8/28/17, 9:37 AM, "Doug Ledford" <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> wrote:
>
>> On 8/28/2017 8:38 AM, Boyer, Andrew wrote:
>>>
>>> On 8/27/17, 6:30 AM, "Yuval Shaia" <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org> wrote:
>>>
>>>> On Fri, Aug 25, 2017 at 03:05:56PM -0400, Andrew Boyer wrote:
>>>>> Without this fix, ports configured on top of ixgbe miss link up
>>>>> notifications. ibv_query_port() will continue to return IBV_PORT_DOWN
>>>>> even
>>>>> though the port is up and working.
>>>>>
>>>>> Fixes: 8700e3e7c485 ("Soft RoCE driver")
>>>>> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
>>>>> ---
>>>>> drivers/infiniband/sw/rxe/rxe_net.c | 7 ++++++-
>>>>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/drivers/infiniband/sw/rxe/rxe_net.c
>>>>> b/drivers/infiniband/sw/rxe/rxe_net.c
>>>>> index 3ba76e7..133c6c4 100644
>>>>> --- a/drivers/infiniband/sw/rxe/rxe_net.c
>>>>> +++ b/drivers/infiniband/sw/rxe/rxe_net.c
>>>>> @@ -651,8 +651,13 @@ static int rxe_notify(struct notifier_block
>>>>> *not_blk,
>>>>> pr_info("%s changed mtu to %d\n", ndev->name, ndev->mtu);
>>>>> rxe_set_mtu(rxe, ndev->mtu);
>>>>> break;
>>>>> - case NETDEV_REBOOT:
>>>>> case NETDEV_CHANGE:
>>>>> + if (netif_running(ndev) && netif_carrier_ok(ndev))
>>>>> + rxe_port_up(rxe, port_num);
>>>> On top of which branch/patch this patch is based on?
>>> Yikes, it relies on an internal patch that Doug wasn¹t interested in
>>> taking. Will respin.
>>>
>>
>> I don't remember seeing a patch come through that added rxe_port_up(),
>> let alone turning it away...
>
> It’s the port_num argument that doesn’t exist upstream. We added the
> ability for RXE to support a second port (to better mimic an mlx4) but you
> said it wasn’t needed.
OK. I still don't remember the event though ;-)
Anyway, I'll wait for you to send a fixed version of the code.
--
Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
GPG Key ID: B826A3330E572FDD
Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 884 bytes --]
^ permalink raw reply [flat|nested] 61+ messages in thread
* [PATCH v2 00/11] IB/rxe: Bug fixes
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (11 preceding siblings ...)
2017-08-27 12:33 ` [PATCH v1 00/11] IB/rxe: Bug fixes Yuval Shaia
@ 2017-08-28 20:11 ` Andrew Boyer
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
12 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-08-28 20:11 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
This patch set addresses a few issues which we have found in RXE.
The first patch fixes a serious issue that causes kernel panics during
network congestion.
Changes for v2:
* Update NETDEV_CHANGE patch so it builds; original was inadvertently
based on an internal branch
Changes for v1:
* Address review comments and add review tags from Moni
* Split destination cache patch into 4 smaller patches
* Added CONFIG_IPV6 check to destination cache patch
* Added new NETDEV_CHANGE patch
Andrew Boyer (11):
IB/rxe: Move refcounting earlier in rxe_send()
IB/rxe: Disable completion upcalls when a CQ is destroyed
IB/rxe: Remove dangling prototype
IB/rxe: Fix up the responder's find_resources() function
IB/rxe: Fix destination cache for IPv6
IB/rxe: Add dst_clone() in prepare_ipv6_hdr()
IB/rxe: Fix up rxe_qp_cleanup()
IB/rxe: Remove unneeded initialization in prepare6()
IB/rxe: Another fix for broken receive queue draining
IB/rxe: Avoid ICRC errors by copying into the skb first
IB/rxe: Handle NETDEV_CHANGE events
drivers/infiniband/sw/rxe/rxe_cq.c | 19 +++++++++++++++++++
drivers/infiniband/sw/rxe/rxe_loc.h | 4 ++--
drivers/infiniband/sw/rxe/rxe_mr.c | 12 ++++++------
drivers/infiniband/sw/rxe/rxe_net.c | 26 +++++++++++++++++++-------
drivers/infiniband/sw/rxe/rxe_qp.c | 9 ++-------
drivers/infiniband/sw/rxe/rxe_req.c | 4 +++-
drivers/infiniband/sw/rxe/rxe_resp.c | 2 +-
drivers/infiniband/sw/rxe/rxe_verbs.c | 2 ++
drivers/infiniband/sw/rxe/rxe_verbs.h | 2 ++
9 files changed, 56 insertions(+), 24 deletions(-)
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* [PATCH v2 01/11] IB/rxe: Move refcounting earlier in rxe_send()
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-08-28 20:11 ` Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 02/11] IB/rxe: Disable completion upcalls when a CQ is destroyed Andrew Boyer
` (11 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-28 20:11 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
The network stack will call nskb's destructor, rxe_skb_tx_dtor(), if the
packet gets dropped by ip_local_out()/ip6_local_out(). Thus we need to add
the QP ref before output to avoid extra dereferences during network
congestion. This could lead to unwanted destruction of the QP.
Fix up the skb_out accounting, too.
Fixes: fda85ce91240 ("IB/rxe: Fix kernel panic from skb destructor")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
Acked-by: Moni Shoua <monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_net.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
index 08f3f90..0810f38 100644
--- a/drivers/infiniband/sw/rxe/rxe_net.c
+++ b/drivers/infiniband/sw/rxe/rxe_net.c
@@ -460,12 +460,17 @@ int rxe_send(struct rxe_dev *rxe, struct rxe_pkt_info *pkt, struct sk_buff *skb)
nskb->destructor = rxe_skb_tx_dtor;
nskb->sk = pkt->qp->sk->sk;
+ rxe_add_ref(pkt->qp);
+ atomic_inc(&pkt->qp->skb_out);
+
if (av->network_type == RDMA_NETWORK_IPV4) {
err = ip_local_out(dev_net(skb_dst(skb)->dev), nskb->sk, nskb);
} else if (av->network_type == RDMA_NETWORK_IPV6) {
err = ip6_local_out(dev_net(skb_dst(skb)->dev), nskb->sk, nskb);
} else {
pr_err("Unknown layer 3 protocol: %d\n", av->network_type);
+ atomic_dec(&pkt->qp->skb_out);
+ rxe_drop_ref(pkt->qp);
kfree_skb(nskb);
return -EINVAL;
}
@@ -475,10 +480,7 @@ int rxe_send(struct rxe_dev *rxe, struct rxe_pkt_info *pkt, struct sk_buff *skb)
return -EAGAIN;
}
- rxe_add_ref(pkt->qp);
- atomic_inc(&pkt->qp->skb_out);
kfree_skb(skb);
-
return 0;
}
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v2 02/11] IB/rxe: Disable completion upcalls when a CQ is destroyed
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-28 20:11 ` [PATCH v2 01/11] IB/rxe: Move refcounting earlier in rxe_send() Andrew Boyer
@ 2017-08-28 20:11 ` Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 03/11] IB/rxe: Remove dangling prototype Andrew Boyer
` (10 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-28 20:11 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
This prevents the stack from accessing userspace objects while they
are being torn down.
One possible sequence of events:
- Userspace program exits
- ib_uverbs_cleanup_ucontext() runs, calling ib_destroy_qp(),
ib_destroy_cq(), etc. and releasing/freeing the UCQ
- The QP still has tasklets running, so it isn't destroyed yet
- The CQ is referenced by the QP, so the CQ isn't destroyed yet
- The UCQ is kfree()'d anyway
- A send work request completes
- rxe_send_complete() calls cq->ibcq.comp_handler()
- ib_uverbs_comp_handler() runs and crashes; the event queue is checked
for is_closed, but it has no way to check the ib_ucq_object before
accessing it
The reference counting on the CQ doesn't protect against this since the CQ
hasn't been destroyed yet.
There's no available interface to deregister the UCQ from the CQ, and it
didn't appear that attempting to add reference counting to the UCQ was
going to be a good way to go since this solution is much simpler.
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_cq.c | 19 +++++++++++++++++++
drivers/infiniband/sw/rxe/rxe_loc.h | 2 ++
drivers/infiniband/sw/rxe/rxe_verbs.c | 2 ++
drivers/infiniband/sw/rxe/rxe_verbs.h | 1 +
4 files changed, 24 insertions(+)
diff --git a/drivers/infiniband/sw/rxe/rxe_cq.c b/drivers/infiniband/sw/rxe/rxe_cq.c
index 49fe42c..c4aabf7 100644
--- a/drivers/infiniband/sw/rxe/rxe_cq.c
+++ b/drivers/infiniband/sw/rxe/rxe_cq.c
@@ -69,6 +69,14 @@ int rxe_cq_chk_attr(struct rxe_dev *rxe, struct rxe_cq *cq,
static void rxe_send_complete(unsigned long data)
{
struct rxe_cq *cq = (struct rxe_cq *)data;
+ unsigned long flags;
+
+ spin_lock_irqsave(&cq->cq_lock, flags);
+ if (cq->is_dying) {
+ spin_unlock_irqrestore(&cq->cq_lock, flags);
+ return;
+ }
+ spin_unlock_irqrestore(&cq->cq_lock, flags);
cq->ibcq.comp_handler(&cq->ibcq, cq->ibcq.cq_context);
}
@@ -97,6 +105,8 @@ int rxe_cq_from_init(struct rxe_dev *rxe, struct rxe_cq *cq, int cqe,
if (udata)
cq->is_user = 1;
+ cq->is_dying = false;
+
tasklet_init(&cq->comp_task, rxe_send_complete, (unsigned long)cq);
spin_lock_init(&cq->cq_lock);
@@ -156,6 +166,15 @@ int rxe_cq_post(struct rxe_cq *cq, struct rxe_cqe *cqe, int solicited)
return 0;
}
+void rxe_cq_disable(struct rxe_cq *cq)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&cq->cq_lock, flags);
+ cq->is_dying = true;
+ spin_unlock_irqrestore(&cq->cq_lock, flags);
+}
+
void rxe_cq_cleanup(struct rxe_pool_entry *arg)
{
struct rxe_cq *cq = container_of(arg, typeof(*cq), pelem);
diff --git a/drivers/infiniband/sw/rxe/rxe_loc.h b/drivers/infiniband/sw/rxe/rxe_loc.h
index d6299ed..64f8fa1 100644
--- a/drivers/infiniband/sw/rxe/rxe_loc.h
+++ b/drivers/infiniband/sw/rxe/rxe_loc.h
@@ -64,6 +64,8 @@ int rxe_cq_from_init(struct rxe_dev *rxe, struct rxe_cq *cq, int cqe,
int rxe_cq_post(struct rxe_cq *cq, struct rxe_cqe *cqe, int solicited);
+void rxe_cq_disable(struct rxe_cq *cq);
+
void rxe_cq_cleanup(struct rxe_pool_entry *arg);
/* rxe_mcast.c */
diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c
index af90a7d..02a39e8 100644
--- a/drivers/infiniband/sw/rxe/rxe_verbs.c
+++ b/drivers/infiniband/sw/rxe/rxe_verbs.c
@@ -960,6 +960,8 @@ static int rxe_destroy_cq(struct ib_cq *ibcq)
{
struct rxe_cq *cq = to_rcq(ibcq);
+ rxe_cq_disable(cq);
+
rxe_drop_ref(cq);
return 0;
}
diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.h b/drivers/infiniband/sw/rxe/rxe_verbs.h
index 5a180fb..b09a9e2 100644
--- a/drivers/infiniband/sw/rxe/rxe_verbs.h
+++ b/drivers/infiniband/sw/rxe/rxe_verbs.h
@@ -89,6 +89,7 @@ struct rxe_cq {
struct rxe_queue *queue;
spinlock_t cq_lock;
u8 notify;
+ bool is_dying;
int is_user;
struct tasklet_struct comp_task;
};
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v2 03/11] IB/rxe: Remove dangling prototype
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-28 20:11 ` [PATCH v2 01/11] IB/rxe: Move refcounting earlier in rxe_send() Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 02/11] IB/rxe: Disable completion upcalls when a CQ is destroyed Andrew Boyer
@ 2017-08-28 20:11 ` Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 04/11] IB/rxe: Fix up the responder's find_resources() function Andrew Boyer
` (9 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-28 20:11 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
Acked-by: Moni Shoua <monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Reviewed-by: Yuval Shaia <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_loc.h | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_loc.h b/drivers/infiniband/sw/rxe/rxe_loc.h
index 64f8fa1..8ef2d3f 100644
--- a/drivers/infiniband/sw/rxe/rxe_loc.h
+++ b/drivers/infiniband/sw/rxe/rxe_loc.h
@@ -221,8 +221,6 @@ static inline void rxe_advance_resp_resource(struct rxe_qp *qp)
void retransmit_timer(unsigned long data);
void rnr_nak_timer(unsigned long data);
-void dump_qp(struct rxe_qp *qp);
-
/* rxe_srq.c */
#define IB_SRQ_INIT_MASK (~IB_SRQ_LIMIT)
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v2 04/11] IB/rxe: Fix up the responder's find_resources() function
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (2 preceding siblings ...)
2017-08-28 20:11 ` [PATCH v2 03/11] IB/rxe: Remove dangling prototype Andrew Boyer
@ 2017-08-28 20:11 ` Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 05/11] IB/rxe: Fix destination cache for IPv6 Andrew Boyer
` (8 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-28 20:11 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
The resource array is sized by max_dest_rd_atomic, not max_rd_atomic.
Iterating over max_rd_atomic entries of qp->resp.resources[] will cause
incorrect behavior when the two attributes are different (or even
crash if max_rd_atomic is larger).
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
Reviewed-by: Yuval Shaia <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_resp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c
index a958ee9..4240866 100644
--- a/drivers/infiniband/sw/rxe/rxe_resp.c
+++ b/drivers/infiniband/sw/rxe/rxe_resp.c
@@ -1055,7 +1055,7 @@ static struct resp_res *find_resource(struct rxe_qp *qp, u32 psn)
{
int i;
- for (i = 0; i < qp->attr.max_rd_atomic; i++) {
+ for (i = 0; i < qp->attr.max_dest_rd_atomic; i++) {
struct resp_res *res = &qp->resp.resources[i];
if (res->type == 0)
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v2 05/11] IB/rxe: Fix destination cache for IPv6
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (3 preceding siblings ...)
2017-08-28 20:11 ` [PATCH v2 04/11] IB/rxe: Fix up the responder's find_resources() function Andrew Boyer
@ 2017-08-28 20:11 ` Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 06/11] IB/rxe: Add dst_clone() in prepare_ipv6_hdr() Andrew Boyer
` (7 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-28 20:11 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
To successfully match an IPv6 path, the path cookie must match. Store it
in the QP so that the IPv6 path can be reused.
Replace open-coded version of dst_check() with the actual call, fixing the
logic. The open-coded version skips the check call if dst->obsolete is 0
(DST_OBSOLETE_NONE), proceeding to replace the route. DST_OBSOLETE_NONE
means that the route may continue to be used, though.
Fixes: 4ed6ad1eb30e ("IB/rxe: Cache dst in QP instead of getting it...")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_net.c | 7 ++++++-
drivers/infiniband/sw/rxe/rxe_verbs.h | 1 +
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
index 0810f38..a93ae3a 100644
--- a/drivers/infiniband/sw/rxe/rxe_net.c
+++ b/drivers/infiniband/sw/rxe/rxe_net.c
@@ -191,7 +191,7 @@ static struct dst_entry *rxe_find_route(struct rxe_dev *rxe,
if (qp_type(qp) == IB_QPT_RC)
dst = sk_dst_get(qp->sk->sk);
- if (!dst || !(dst->obsolete && dst->ops->check(dst, 0))) {
+ if (!dst || !dst_check(dst, qp->dst_cookie)) {
if (dst)
dst_release(dst);
@@ -209,6 +209,11 @@ static struct dst_entry *rxe_find_route(struct rxe_dev *rxe,
saddr6 = &av->sgid_addr._sockaddr_in6.sin6_addr;
daddr6 = &av->dgid_addr._sockaddr_in6.sin6_addr;
dst = rxe_find_route6(rxe->ndev, saddr6, daddr6);
+#if IS_ENABLED(CONFIG_IPV6)
+ if (dst)
+ qp->dst_cookie =
+ rt6_get_cookie((struct rt6_info *)dst);
+#endif
}
}
diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.h b/drivers/infiniband/sw/rxe/rxe_verbs.h
index b09a9e2..0c2dbe4 100644
--- a/drivers/infiniband/sw/rxe/rxe_verbs.h
+++ b/drivers/infiniband/sw/rxe/rxe_verbs.h
@@ -248,6 +248,7 @@ struct rxe_qp {
struct rxe_rq rq;
struct socket *sk;
+ u32 dst_cookie;
struct rxe_av pri_av;
struct rxe_av alt_av;
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v2 06/11] IB/rxe: Add dst_clone() in prepare_ipv6_hdr()
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (4 preceding siblings ...)
2017-08-28 20:11 ` [PATCH v2 05/11] IB/rxe: Fix destination cache for IPv6 Andrew Boyer
@ 2017-08-28 20:11 ` Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 07/11] IB/rxe: Fix up rxe_qp_cleanup() Andrew Boyer
` (6 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-28 20:11 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
Otherwise the reference count goes negative as IPv6 packets complete.
Fixes: 4ed6ad1eb30e ("IB/rxe: Cache dst in QP instead of getting it...")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_net.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
index a93ae3a..3fbbadc 100644
--- a/drivers/infiniband/sw/rxe/rxe_net.c
+++ b/drivers/infiniband/sw/rxe/rxe_net.c
@@ -342,7 +342,7 @@ static void prepare_ipv6_hdr(struct dst_entry *dst, struct sk_buff *skb,
memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED
| IPSKB_REROUTED);
- skb_dst_set(skb, dst);
+ skb_dst_set(skb, dst_clone(dst));
__skb_push(skb, sizeof(*ip6h));
skb_reset_network_header(skb);
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v2 07/11] IB/rxe: Fix up rxe_qp_cleanup()
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (5 preceding siblings ...)
2017-08-28 20:11 ` [PATCH v2 06/11] IB/rxe: Add dst_clone() in prepare_ipv6_hdr() Andrew Boyer
@ 2017-08-28 20:11 ` Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 08/11] IB/rxe: Remove unneeded initialization in prepare6() Andrew Boyer
` (5 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-28 20:11 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
Replace sk_dst_get()/dst_release() in rxe_qp_cleanup() with sk_dst_reset().
sk_dst_get() takes a new reference on dst, so the dst_release() doesn't
actually release the original reference, which was the design intent.
Fixes: 4ed6ad1eb30e ("IB/rxe: Cache dst in QP instead of getting it...")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_qp.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
index 80ccc7c..00bda93 100644
--- a/drivers/infiniband/sw/rxe/rxe_qp.c
+++ b/drivers/infiniband/sw/rxe/rxe_qp.c
@@ -851,13 +851,8 @@ void rxe_qp_cleanup(struct rxe_pool_entry *arg)
qp->resp.mr = NULL;
}
- if (qp_type(qp) == IB_QPT_RC) {
- struct dst_entry *dst = NULL;
-
- dst = sk_dst_get(qp->sk->sk);
- if (dst)
- dst_release(dst);
- }
+ if (qp_type(qp) == IB_QPT_RC)
+ sk_dst_reset(qp->sk->sk);
free_rd_atomic_resources(qp);
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v2 08/11] IB/rxe: Remove unneeded initialization in prepare6()
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (6 preceding siblings ...)
2017-08-28 20:11 ` [PATCH v2 07/11] IB/rxe: Fix up rxe_qp_cleanup() Andrew Boyer
@ 2017-08-28 20:11 ` Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 09/11] IB/rxe: Another fix for broken receive queue draining Andrew Boyer
` (4 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-28 20:11 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
Fixes: 4ed6ad1eb30e ("IB/rxe: Cache dst in QP instead of getting it...")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
Reviewed-by: Yuval Shaia <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_net.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
index 3fbbadc..3ba76e7 100644
--- a/drivers/infiniband/sw/rxe/rxe_net.c
+++ b/drivers/infiniband/sw/rxe/rxe_net.c
@@ -393,7 +393,7 @@ static int prepare6(struct rxe_dev *rxe, struct rxe_pkt_info *pkt,
struct sk_buff *skb, struct rxe_av *av)
{
struct rxe_qp *qp = pkt->qp;
- struct dst_entry *dst = NULL;
+ struct dst_entry *dst;
struct in6_addr *saddr = &av->sgid_addr._sockaddr_in6.sin6_addr;
struct in6_addr *daddr = &av->dgid_addr._sockaddr_in6.sin6_addr;
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v2 09/11] IB/rxe: Another fix for broken receive queue draining
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (7 preceding siblings ...)
2017-08-28 20:11 ` [PATCH v2 08/11] IB/rxe: Remove unneeded initialization in prepare6() Andrew Boyer
@ 2017-08-28 20:11 ` Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 10/11] IB/rxe: Avoid ICRC errors by copying into the skb first Andrew Boyer
` (3 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-28 20:11 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
This fixes another path in rxe_requester() that might overlook stale SKBs,
preventing cleanup.
Fixes: 1217197142d1 ("rxe: fix broken receive queue draining")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_req.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rxe/rxe_req.c
index 7ee465d..24fc0b8 100644
--- a/drivers/infiniband/sw/rxe/rxe_req.c
+++ b/drivers/infiniband/sw/rxe/rxe_req.c
@@ -594,8 +594,10 @@ int rxe_requester(void *arg)
rxe_add_ref(qp);
next_wqe:
- if (unlikely(!qp->valid))
+ if (unlikely(!qp->valid)) {
+ rxe_drain_req_pkts(qp, true);
goto exit;
+ }
if (unlikely(qp->req.state == QP_STATE_ERROR)) {
rxe_drain_req_pkts(qp, true);
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v2 10/11] IB/rxe: Avoid ICRC errors by copying into the skb first
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (8 preceding siblings ...)
2017-08-28 20:11 ` [PATCH v2 09/11] IB/rxe: Another fix for broken receive queue draining Andrew Boyer
@ 2017-08-28 20:11 ` Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 11/11] IB/rxe: Handle NETDEV_CHANGE events Andrew Boyer
` (2 subsequent siblings)
12 siblings, 0 replies; 61+ messages in thread
From: Andrew Boyer @ 2017-08-28 20:11 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
The current process is to first calculate the CRC and then copy the client
data into the packet. This leaves a window in which the packet contents and
CRC can get out of sync, if the client changes the data after the CRC is
calculated but before the data is copied.
By copying the data into the packet and then calculating the CRC directly
from the packet contents we eliminate the window.
This can be seen with qperf's ud_bi_bw test. This seems like very
strange/reckless client behavior, but whether the client has mangled its
data or not RXE should be able to transfer it reliably.
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_mr.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_mr.c b/drivers/infiniband/sw/rxe/rxe_mr.c
index e37cc89..5c2684b 100644
--- a/drivers/infiniband/sw/rxe/rxe_mr.c
+++ b/drivers/infiniband/sw/rxe/rxe_mr.c
@@ -367,11 +367,11 @@ int rxe_mem_copy(struct rxe_mem *mem, u64 iova, void *addr, int length,
dest = (dir == to_mem_obj) ?
((void *)(uintptr_t)iova) : addr;
+ memcpy(dest, src, length);
+
if (crcp)
*crcp = rxe_crc32(to_rdev(mem->pd->ibpd.device),
- *crcp, src, length);
-
- memcpy(dest, src, length);
+ *crcp, dest, length);
return 0;
}
@@ -401,11 +401,11 @@ int rxe_mem_copy(struct rxe_mem *mem, u64 iova, void *addr, int length,
if (bytes > length)
bytes = length;
+ memcpy(dest, src, bytes);
+
if (crcp)
crc = rxe_crc32(to_rdev(mem->pd->ibpd.device),
- crc, src, bytes);
-
- memcpy(dest, src, bytes);
+ crc, dest, bytes);
length -= bytes;
addr += bytes;
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* [PATCH v2 11/11] IB/rxe: Handle NETDEV_CHANGE events
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (9 preceding siblings ...)
2017-08-28 20:11 ` [PATCH v2 10/11] IB/rxe: Avoid ICRC errors by copying into the skb first Andrew Boyer
@ 2017-08-28 20:11 ` Andrew Boyer
[not found] ` <1503951119-25573-12-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-28 23:32 ` [PATCH v2 00/11] IB/rxe: Bug fixes Doug Ledford
2017-08-29 7:54 ` Yuval Shaia
12 siblings, 1 reply; 61+ messages in thread
From: Andrew Boyer @ 2017-08-28 20:11 UTC (permalink / raw)
To: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Boyer
Without this fix, ports configured on top of ixgbe miss link up
notifications. ibv_query_port() will continue to return IBV_PORT_DOWN even
though the port is up and working.
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
---
drivers/infiniband/sw/rxe/rxe_net.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
index 3ba76e7..59dee10 100644
--- a/drivers/infiniband/sw/rxe/rxe_net.c
+++ b/drivers/infiniband/sw/rxe/rxe_net.c
@@ -651,8 +651,13 @@ static int rxe_notify(struct notifier_block *not_blk,
pr_info("%s changed mtu to %d\n", ndev->name, ndev->mtu);
rxe_set_mtu(rxe, ndev->mtu);
break;
- case NETDEV_REBOOT:
case NETDEV_CHANGE:
+ if (netif_running(ndev) && netif_carrier_ok(ndev))
+ rxe_port_up(rxe);
+ else
+ rxe_port_down(rxe);
+ break;
+ case NETDEV_REBOOT:
case NETDEV_GOING_DOWN:
case NETDEV_CHANGEADDR:
case NETDEV_CHANGENAME:
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 61+ messages in thread
* Re: [PATCH v2 00/11] IB/rxe: Bug fixes
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (10 preceding siblings ...)
2017-08-28 20:11 ` [PATCH v2 11/11] IB/rxe: Handle NETDEV_CHANGE events Andrew Boyer
@ 2017-08-28 23:32 ` Doug Ledford
2017-08-29 7:54 ` Yuval Shaia
12 siblings, 0 replies; 61+ messages in thread
From: Doug Ledford @ 2017-08-28 23:32 UTC (permalink / raw)
To: Andrew Boyer, monis-VPRAkNaXOzVWk0Htik3J/w,
yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
On Mon, 2017-08-28 at 16:11 -0400, Andrew Boyer wrote:
> This patch set addresses a few issues which we have found in RXE.
> The first patch fixes a serious issue that causes kernel panics
> during
> network congestion.
>
> Changes for v2:
> * Update NETDEV_CHANGE patch so it builds; original was inadvertently
> based on an internal branch
>
> Changes for v1:
> * Address review comments and add review tags from Moni
> * Split destination cache patch into 4 smaller patches
> * Added CONFIG_IPV6 check to destination cache patch
> * Added new NETDEV_CHANGE patch
>
> Andrew Boyer (11):
> IB/rxe: Move refcounting earlier in rxe_send()
> IB/rxe: Disable completion upcalls when a CQ is destroyed
> IB/rxe: Remove dangling prototype
> IB/rxe: Fix up the responder's find_resources() function
> IB/rxe: Fix destination cache for IPv6
> IB/rxe: Add dst_clone() in prepare_ipv6_hdr()
> IB/rxe: Fix up rxe_qp_cleanup()
> IB/rxe: Remove unneeded initialization in prepare6()
> IB/rxe: Another fix for broken receive queue draining
> IB/rxe: Avoid ICRC errors by copying into the skb first
> IB/rxe: Handle NETDEV_CHANGE events
Thanks, series applied.
--
Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
GPG KeyID: B826A3330E572FDD
Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH v2 11/11] IB/rxe: Handle NETDEV_CHANGE events
[not found] ` <1503951119-25573-12-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
@ 2017-08-29 7:53 ` Yuval Shaia
0 siblings, 0 replies; 61+ messages in thread
From: Yuval Shaia @ 2017-08-29 7:53 UTC (permalink / raw)
To: Andrew Boyer
Cc: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA
On Mon, Aug 28, 2017 at 04:11:59PM -0400, Andrew Boyer wrote:
> Without this fix, ports configured on top of ixgbe miss link up
> notifications. ibv_query_port() will continue to return IBV_PORT_DOWN even
> though the port is up and working.
>
> Fixes: 8700e3e7c485 ("Soft RoCE driver")
> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
Reviewed-by: Yuval Shaia <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
> ---
> drivers/infiniband/sw/rxe/rxe_net.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
> index 3ba76e7..59dee10 100644
> --- a/drivers/infiniband/sw/rxe/rxe_net.c
> +++ b/drivers/infiniband/sw/rxe/rxe_net.c
> @@ -651,8 +651,13 @@ static int rxe_notify(struct notifier_block *not_blk,
> pr_info("%s changed mtu to %d\n", ndev->name, ndev->mtu);
> rxe_set_mtu(rxe, ndev->mtu);
> break;
> - case NETDEV_REBOOT:
> case NETDEV_CHANGE:
> + if (netif_running(ndev) && netif_carrier_ok(ndev))
> + rxe_port_up(rxe);
> + else
> + rxe_port_down(rxe);
> + break;
> + case NETDEV_REBOOT:
> case NETDEV_GOING_DOWN:
> case NETDEV_CHANGEADDR:
> case NETDEV_CHANGENAME:
> --
> 1.8.3.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
* Re: [PATCH v2 00/11] IB/rxe: Bug fixes
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
` (11 preceding siblings ...)
2017-08-28 23:32 ` [PATCH v2 00/11] IB/rxe: Bug fixes Doug Ledford
@ 2017-08-29 7:54 ` Yuval Shaia
12 siblings, 0 replies; 61+ messages in thread
From: Yuval Shaia @ 2017-08-29 7:54 UTC (permalink / raw)
To: Andrew Boyer
Cc: monis-VPRAkNaXOzVWk0Htik3J/w, yonatanc-VPRAkNaXOzVWk0Htik3J/w,
linux-rdma-u79uwXL29TY76Z2rM5mHXA, Marcel Apfelbaum
On Mon, Aug 28, 2017 at 04:11:48PM -0400, Andrew Boyer wrote:
> This patch set addresses a few issues which we have found in RXE.
> The first patch fixes a serious issue that causes kernel panics during
> network congestion.
>
> Changes for v2:
> * Update NETDEV_CHANGE patch so it builds; original was inadvertently
> based on an internal branch
For v2:
Tested-by: Yuval Shaia <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
>
> Changes for v1:
> * Address review comments and add review tags from Moni
> * Split destination cache patch into 4 smaller patches
> * Added CONFIG_IPV6 check to destination cache patch
> * Added new NETDEV_CHANGE patch
>
> Andrew Boyer (11):
> IB/rxe: Move refcounting earlier in rxe_send()
> IB/rxe: Disable completion upcalls when a CQ is destroyed
> IB/rxe: Remove dangling prototype
> IB/rxe: Fix up the responder's find_resources() function
> IB/rxe: Fix destination cache for IPv6
> IB/rxe: Add dst_clone() in prepare_ipv6_hdr()
> IB/rxe: Fix up rxe_qp_cleanup()
> IB/rxe: Remove unneeded initialization in prepare6()
> IB/rxe: Another fix for broken receive queue draining
> IB/rxe: Avoid ICRC errors by copying into the skb first
> IB/rxe: Handle NETDEV_CHANGE events
>
> drivers/infiniband/sw/rxe/rxe_cq.c | 19 +++++++++++++++++++
> drivers/infiniband/sw/rxe/rxe_loc.h | 4 ++--
> drivers/infiniband/sw/rxe/rxe_mr.c | 12 ++++++------
> drivers/infiniband/sw/rxe/rxe_net.c | 26 +++++++++++++++++++-------
> drivers/infiniband/sw/rxe/rxe_qp.c | 9 ++-------
> drivers/infiniband/sw/rxe/rxe_req.c | 4 +++-
> drivers/infiniband/sw/rxe/rxe_resp.c | 2 +-
> drivers/infiniband/sw/rxe/rxe_verbs.c | 2 ++
> drivers/infiniband/sw/rxe/rxe_verbs.h | 2 ++
> 9 files changed, 56 insertions(+), 24 deletions(-)
>
> --
> 1.8.3.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 61+ messages in thread
end of thread, other threads:[~2017-08-29 7:54 UTC | newest]
Thread overview: 61+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-25 13:39 [PATCH 0/7] IB/rxe: Bug fixes Andrew Boyer
[not found] ` <1500989968-30889-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-25 13:39 ` [PATCH 1/7] IB/rxe: Move refcounting earlier in rxe_send() Andrew Boyer
[not found] ` <1500989968-30889-2-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-27 8:57 ` Moni Shoua
2017-07-25 13:39 ` [PATCH 2/7] IB/rxe: Disable completion upcalls when a CQ is destroyed Andrew Boyer
[not found] ` <1500989968-30889-3-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-27 9:35 ` Moni Shoua
[not found] ` <CAG9sBKOet0xv9YaJAc58erVrnTGwzMd630goDgrxUEx4PhXK+g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-27 13:19 ` Boyer, Andrew
2017-07-25 13:39 ` [PATCH 3/7] IB/rxe: Remove dangling prototype Andrew Boyer
[not found] ` <1500989968-30889-4-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-27 9:36 ` Moni Shoua
2017-07-25 13:39 ` [PATCH 4/7] IB/rxe: Fix up the responder's find_resources() function Andrew Boyer
[not found] ` <1500989968-30889-5-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-27 10:54 ` Moni Shoua
2017-07-25 13:39 ` [PATCH 5/7] IB/rxe: Fix destination cache for IPv6 Andrew Boyer
[not found] ` <1500989968-30889-6-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-27 6:41 ` kbuild test robot
[not found] ` <201707271425.T94Zam4o%fengguang.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-07-27 13:24 ` Boyer, Andrew
2017-07-27 12:07 ` Moni Shoua
2017-07-25 13:39 ` [PATCH 6/7] IB/rxe: Fix up one more receive queue drain path that might prevent cleanup Andrew Boyer
[not found] ` <1500989968-30889-7-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-27 12:13 ` Moni Shoua
2017-07-25 13:39 ` [PATCH 7/7] IB/rxe: Avoid ICRC errors by copying into the skb first Andrew Boyer
[not found] ` <1500989968-30889-8-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-25 17:34 ` Or Gerlitz
[not found] ` <CAJ3xEMi7qiygVwngd-1q0x7xOf=whGb667t0RQpZ0uRbchw=oA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-25 18:00 ` Boyer, Andrew
[not found] ` <D59CFD43.1B523%Andrew.Boyer-mb1K0bWo544@public.gmane.org>
2017-07-27 13:25 ` Moni Shoua
2017-07-27 13:27 ` [PATCH 0/7] IB/rxe: Bug fixes Moni Shoua
2017-08-25 19:05 ` [PATCH v1 00/11] " Andrew Boyer
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-25 19:05 ` [PATCH v1 01/11] IB/rxe: Move refcounting earlier in rxe_send() Andrew Boyer
[not found] ` <1503687956-7110-2-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-27 12:01 ` Yuval Shaia
2017-08-28 13:05 ` Boyer, Andrew
2017-08-25 19:05 ` [PATCH v1 02/11] IB/rxe: Disable completion upcalls when a CQ is destroyed Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 03/11] IB/rxe: Remove dangling prototype Andrew Boyer
[not found] ` <1503687956-7110-4-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-27 12:03 ` Yuval Shaia
2017-08-25 19:05 ` [PATCH v1 04/11] IB/rxe: Fix up the responder's find_resources() function Andrew Boyer
[not found] ` <1503687956-7110-5-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-27 12:14 ` Yuval Shaia
2017-08-25 19:05 ` [PATCH v1 05/11] IB/rxe: Fix destination cache for IPv6 Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 06/11] IB/rxe: Add dst_clone() in prepare_ipv6_hdr() Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 07/11] IB/rxe: Fix up rxe_qp_cleanup() Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 08/11] IB/rxe: Remove unneeded initialization in prepare6() Andrew Boyer
[not found] ` <1503687956-7110-9-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-27 12:20 ` Yuval Shaia
2017-08-25 19:05 ` [PATCH v1 09/11] IB/rxe: Another fix for broken receive queue draining Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 10/11] IB/rxe: Avoid ICRC errors by copying into the skb first Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 11/11] IB/rxe: Handle NETDEV_CHANGE events Andrew Boyer
[not found] ` <1503687956-7110-12-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-27 10:30 ` Yuval Shaia
2017-08-28 12:38 ` Boyer, Andrew
[not found] ` <D5C986D7.1DF85%Andrew.Boyer-mb1K0bWo544@public.gmane.org>
2017-08-28 13:37 ` Doug Ledford
[not found] ` <e426219f-a558-209b-350c-bd71c39e52eb-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-08-28 13:47 ` Boyer, Andrew
[not found] ` <D5C996DB.1DFB5%Andrew.Boyer-mb1K0bWo544@public.gmane.org>
2017-08-28 14:13 ` Doug Ledford
2017-08-28 13:50 ` Yuval Shaia
2017-08-27 23:00 ` kbuild test robot
2017-08-27 12:33 ` [PATCH v1 00/11] IB/rxe: Bug fixes Yuval Shaia
2017-08-28 20:11 ` [PATCH v2 " Andrew Boyer
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-28 20:11 ` [PATCH v2 01/11] IB/rxe: Move refcounting earlier in rxe_send() Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 02/11] IB/rxe: Disable completion upcalls when a CQ is destroyed Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 03/11] IB/rxe: Remove dangling prototype Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 04/11] IB/rxe: Fix up the responder's find_resources() function Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 05/11] IB/rxe: Fix destination cache for IPv6 Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 06/11] IB/rxe: Add dst_clone() in prepare_ipv6_hdr() Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 07/11] IB/rxe: Fix up rxe_qp_cleanup() Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 08/11] IB/rxe: Remove unneeded initialization in prepare6() Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 09/11] IB/rxe: Another fix for broken receive queue draining Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 10/11] IB/rxe: Avoid ICRC errors by copying into the skb first Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 11/11] IB/rxe: Handle NETDEV_CHANGE events Andrew Boyer
[not found] ` <1503951119-25573-12-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-29 7:53 ` Yuval Shaia
2017-08-28 23:32 ` [PATCH v2 00/11] IB/rxe: Bug fixes Doug Ledford
2017-08-29 7:54 ` Yuval Shaia
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.