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.
This commit is contained in:
Alexander Motin 2017-08-31 21:37:22 +00:00
parent 5ea26aec6e
commit 84f8cfec2f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=323074

View File

@ -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;