diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c index cd9745b062e46e5722dafddf8f67decb6d9979a7..583a7d3f0ce12b039b837c5bcc4a3df8e14a3d7e 100644 --- a/drivers/ntb/ntb_transport.c +++ b/drivers/ntb/ntb_transport.c @@ -1034,11 +1034,16 @@ static int ntb_process_rxc(struct ntb_transport_qp *qp) static void ntb_transport_rx(unsigned long data) { struct ntb_transport_qp *qp = (struct ntb_transport_qp *)data; - int rc; + int rc, i; - do { + /* Limit the number of packets processed in a single interrupt to + * provide fairness to others + */ + for (i = 0; i < qp->rx_max_entry; i++) { rc = ntb_process_rxc(qp); - } while (!rc); + if (rc) + break; + } } static void ntb_transport_rxc_db(void *data, int db_num)