From 84f8cfec2f79281e95e9eff136758a9e4e87a42f Mon Sep 17 00:00:00 2001 From: Alexander Motin Date: Thu, 31 Aug 2017 21:37:22 +0000 Subject: [PATCH] Clear doorbell bits after masking them before processing. In theory this allows to avoid one more expensive doorbell register read later in some scenarios. But in practice it also significantly increases packet rate on PLX hardware, that I can't explain yet, possibly work- arounding some interrupt delays. MFC after: 13 days Sponsored by: iXsystems, Inc. --- sys/dev/ntb/ntb_transport.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sys/dev/ntb/ntb_transport.c b/sys/dev/ntb/ntb_transport.c index 521fd058c32..bb3287d5f05 100644 --- a/sys/dev/ntb/ntb_transport.c +++ b/sys/dev/ntb/ntb_transport.c @@ -1012,8 +1012,10 @@ ntb_transport_doorbell_callback(void *data, uint32_t vector) vec_mask &= nt->qp_bitmap; if ((vec_mask & (vec_mask - 1)) != 0) vec_mask &= ntb_db_read(nt->dev); - if (vec_mask != 0) + if (vec_mask != 0) { ntb_db_set_mask(nt->dev, vec_mask); + ntb_db_clear(nt->dev, vec_mask); + } while (vec_mask != 0) { qp_num = ffsll(vec_mask) - 1;