Scheduling out and in for every FW message can slow us down
unnecessarily.  Our experiments show that even under heavy load
the FW responds to 99.9% messages within 200 us.  Add a short
busy wait before entering the wait queue.

Signed-off-by: Jakub Kicinski <[email protected]>
---
 drivers/net/ethernet/netronome/nfp/bpf/cmsg.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/netronome/nfp/bpf/cmsg.c 
b/drivers/net/ethernet/netronome/nfp/bpf/cmsg.c
index 71e6586acc36..80d3aa0fc9d3 100644
--- a/drivers/net/ethernet/netronome/nfp/bpf/cmsg.c
+++ b/drivers/net/ethernet/netronome/nfp/bpf/cmsg.c
@@ -157,7 +157,14 @@ nfp_bpf_cmsg_wait_reply(struct nfp_app_bpf *bpf, enum 
nfp_bpf_cmsg_type type,
                        int tag)
 {
        struct sk_buff *skb;
-       int err;
+       int i, err;
+
+       for (i = 0; i < 50; i++) {
+               udelay(4);
+               skb = nfp_bpf_reply(bpf, tag);
+               if (skb)
+                       return skb;
+       }
 
        err = wait_event_interruptible_timeout(bpf->cmsg_wq,
                                               skb = nfp_bpf_reply(bpf, tag),
-- 
2.15.1

Reply via email to