aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ntb/ntb_transport.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
index 73a000ed7a9f..cd9745b062e4 100644
--- a/drivers/ntb/ntb_transport.c
+++ b/drivers/ntb/ntb_transport.c
@@ -490,11 +490,12 @@ static void ntb_transport_setup_qp_mw(struct ntb_transport *nt,
490 rx_size -= sizeof(struct ntb_rx_info); 490 rx_size -= sizeof(struct ntb_rx_info);
491 491
492 qp->rx_buff = qp->remote_rx_info + 1; 492 qp->rx_buff = qp->remote_rx_info + 1;
493 qp->rx_max_frame = min(transport_mtu, rx_size); 493 /* Due to housekeeping, there must be atleast 2 buffs */
494 qp->rx_max_frame = min(transport_mtu, rx_size / 2);
494 qp->rx_max_entry = rx_size / qp->rx_max_frame; 495 qp->rx_max_entry = rx_size / qp->rx_max_frame;
495 qp->rx_index = 0; 496 qp->rx_index = 0;
496 497
497 qp->remote_rx_info->entry = qp->rx_max_entry; 498 qp->remote_rx_info->entry = qp->rx_max_entry - 1;
498 499
499 /* setup the hdr offsets with 0's */ 500 /* setup the hdr offsets with 0's */
500 for (i = 0; i < qp->rx_max_entry; i++) { 501 for (i = 0; i < qp->rx_max_entry; i++) {
@@ -818,7 +819,8 @@ static void ntb_transport_init_queue(struct ntb_transport *nt,
818 tx_size -= sizeof(struct ntb_rx_info); 819 tx_size -= sizeof(struct ntb_rx_info);
819 820
820 qp->tx_mw = qp->rx_info + 1; 821 qp->tx_mw = qp->rx_info + 1;
821 qp->tx_max_frame = min(transport_mtu, tx_size); 822 /* Due to housekeeping, there must be atleast 2 buffs */
823 qp->tx_max_frame = min(transport_mtu, tx_size / 2);
822 qp->tx_max_entry = tx_size / qp->tx_max_frame; 824 qp->tx_max_entry = tx_size / qp->tx_max_frame;
823 825
824 if (nt->debugfs_dir) { 826 if (nt->debugfs_dir) {