aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ntb
diff options
context:
space:
mode:
authorJon Mason <jon.mason@intel.com>2013-01-17 17:28:45 -0500
committerJon Mason <jon.mason@intel.com>2013-05-15 13:58:06 -0400
commitc336acd3331dcc191a97dbc66a557d47741657c7 (patch)
tree8dfb29b36fe7f143588877f205df7b7cb2008024 /drivers/ntb
parentc9d534c8cbaedbb522a1d2cb037c6c394f610317 (diff)
NTB: memcpy lockup workaround
The system will appear to lockup for long periods of time due to the NTB driver spending too much time in memcpy. Avoid this by reducing the number of packets that can be serviced on a given interrupt. Signed-off-by: Jon Mason <jon.mason@intel.com>
Diffstat (limited to 'drivers/ntb')
-rw-r--r--drivers/ntb/ntb_transport.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
index cd9745b062e4..583a7d3f0ce1 100644
--- a/drivers/ntb/ntb_transport.c
+++ b/drivers/ntb/ntb_transport.c
@@ -1034,11 +1034,16 @@ out:
1034static void ntb_transport_rx(unsigned long data) 1034static void ntb_transport_rx(unsigned long data)
1035{ 1035{
1036 struct ntb_transport_qp *qp = (struct ntb_transport_qp *)data; 1036 struct ntb_transport_qp *qp = (struct ntb_transport_qp *)data;
1037 int rc; 1037 int rc, i;
1038 1038
1039 do { 1039 /* Limit the number of packets processed in a single interrupt to
1040 * provide fairness to others
1041 */
1042 for (i = 0; i < qp->rx_max_entry; i++) {
1040 rc = ntb_process_rxc(qp); 1043 rc = ntb_process_rxc(qp);
1041 } while (!rc); 1044 if (rc)
1045 break;
1046 }
1042} 1047}
1043 1048
1044static void ntb_transport_rxc_db(void *data, int db_num) 1049static void ntb_transport_rxc_db(void *data, int db_num)