Fix operation with multiple qps.

This commit is contained in:
Alexander Motin 2016-07-09 11:36:09 +00:00
parent b86969a5a6
commit f7be35856a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=302486

View File

@ -470,7 +470,7 @@ ntb_transport_init_queue(struct ntb_transport_ctx *nt, unsigned int qp_num)
qp->event_handler = NULL;
ntb_qp_link_down_reset(qp);
if (nt->qp_count % mw_count && mw_num + 1 < nt->qp_count / mw_count)
if (mw_num < nt->qp_count % mw_count)
num_qps_mw = nt->qp_count / mw_count + 1;
else
num_qps_mw = nt->qp_count / mw_count;
@ -567,7 +567,7 @@ ntb_transport_create_queue(void *data, device_t dev,
unsigned int free_queue;
int i;
free_queue = ffs_bit(&nt->qp_bitmap);
free_queue = ffs_bit(&nt->qp_bitmap_free);
if (free_queue == 0)
return (NULL);
@ -612,7 +612,7 @@ ntb_transport_link_up(struct ntb_transport_qp *qp)
qp->client_ready = true;
ntb_printf(2, "qp client ready\n");
ntb_printf(2, "qp %d client ready\n", qp->qp_num);
if (nt->link_is_up)
callout_reset(&qp->link_work, 0, ntb_qp_link_work, qp);
@ -1161,7 +1161,7 @@ ntb_transport_setup_qp_mw(struct ntb_transport_ctx *nt, unsigned int qp_num)
if (mw->virt_addr == NULL)
return (ENOMEM);
if (nt->qp_count % mw_count && mw_num + 1 < nt->qp_count / mw_count)
if (mw_num < nt->qp_count % mw_count)
num_qps_mw = nt->qp_count / mw_count + 1;
else
num_qps_mw = nt->qp_count / mw_count;
@ -1211,7 +1211,7 @@ ntb_qp_link_work(void *arg)
/* See if the remote side is up */
if ((val & (1ull << qp->qp_num)) != 0) {
ntb_printf(2, "qp link up\n");
ntb_printf(2, "qp %d link up\n", qp->qp_num);
qp->link_is_up = true;
if (qp->event_handler != NULL)