]> www.infradead.org Git - users/jedix/linux-maple.git/commit
xve: arm ud tx cq to generate completion interrupts
authorAjaykumar Hotchandani <ajaykumar.hotchandani@oracle.com>
Wed, 27 Feb 2019 22:53:57 +0000 (14:53 -0800)
committerBrian Maly <brian.maly@oracle.com>
Sat, 11 May 2019 04:45:10 +0000 (00:45 -0400)
commitb46ec5bb492dedcd6798ab9c9fd43f2fd3373b08
tree1a8756ad54280321d1a7063228d8a7d81e05fc14
parentc966a904db1479691277c7a57e0816f0b4fef2ad
xve: arm ud tx cq to generate completion interrupts

IPoIB polls for UD send cq for every 16th post_send() request to reduce
interrupt count; and it does not arm UD send cq (16 is controlled by
MAX_SEND_CQE variable)
XVE has followed IPoIB methodology in terms of handling UD send cq;
however, it missed to poll send cq after certain number of iterations.
This makes freeing of resources related to work request unreliable since
completion arrival is not controlled. This caused problem for live
migration; since initial UDP and ICMP skbs which are using UD work
requests are not getting freed. And, xenwatch process is getting stuck
on waiting for these skbs to be freed.

This patch does following:
- arm send cq at initialization. This will generate interrupt for
  initial ud send requests.
- Once polling of send cq is completed, arm send cq again to generate
  interrupt whenever next cqe arrives.

I'm going back to interrupt mechanism, since UD workload for xve is
extremely limited. And, I don't expect to generate interrupt flood here.
And, I don't want to miss out on freeing of skb (for example, if
scenario ends up as, only 10 post_send() are attempted for UD QP; and
after that, we try to live migrate that VM, we may miss completion if
our logic is, poll CQ at every 16th post_send() iteration)

Orabug: 28267050

Signed-off-by: Ajaykumar Hotchandani <ajaykumar.hotchandani@oracle.com>
Reviewed-by: Chien Yen <chien.yen@oracle.com>
Signed-off-by: Brian Maly <brian.maly@oracle.com>
drivers/infiniband/ulp/xsigo/xve/xve_ib.c
drivers/infiniband/ulp/xsigo/xve/xve_verbs.c