Commit 02c1be3d authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'ntb-3.17' of git://github.com/jonmason/ntb

Pull ntb driver bugfixes from Jon Mason:
 "NTB driver fixes for queue spread and buffer alignment.  Also, update
  to MAINTAINERS to reflect new e-mail address"

* tag 'ntb-3.17' of git://github.com/jonmason/ntb:
  ntb: Add alignment check to meet hardware requirement
  MAINTAINERS: update NTB info
  NTB: correct the spread of queues over mw's
parents 8ac19f0d 3cc5ba19
...@@ -6424,7 +6424,8 @@ F: Documentation/scsi/NinjaSCSI.txt ...@@ -6424,7 +6424,8 @@ F: Documentation/scsi/NinjaSCSI.txt
F: drivers/scsi/nsp32* F: drivers/scsi/nsp32*
NTB DRIVER NTB DRIVER
M: Jon Mason <jon.mason@intel.com> M: Jon Mason <jdmason@kudzu.us>
M: Dave Jiang <dave.jiang@intel.com>
S: Supported S: Supported
W: https://github.com/jonmason/ntb/wiki W: https://github.com/jonmason/ntb/wiki
T: git git://github.com/jonmason/ntb.git T: git git://github.com/jonmason/ntb.git
......
...@@ -510,7 +510,7 @@ static void ntb_transport_setup_qp_mw(struct ntb_transport *nt, ...@@ -510,7 +510,7 @@ static void ntb_transport_setup_qp_mw(struct ntb_transport *nt,
WARN_ON(nt->mw[mw_num].virt_addr == NULL); WARN_ON(nt->mw[mw_num].virt_addr == NULL);
if (nt->max_qps % mw_max && mw_num < nt->max_qps % mw_max) if (nt->max_qps % mw_max && mw_num + 1 < nt->max_qps / mw_max)
num_qps_mw = nt->max_qps / mw_max + 1; num_qps_mw = nt->max_qps / mw_max + 1;
else else
num_qps_mw = nt->max_qps / mw_max; num_qps_mw = nt->max_qps / mw_max;
...@@ -576,6 +576,19 @@ static int ntb_set_mw(struct ntb_transport *nt, int num_mw, unsigned int size) ...@@ -576,6 +576,19 @@ static int ntb_set_mw(struct ntb_transport *nt, int num_mw, unsigned int size)
return -ENOMEM; return -ENOMEM;
} }
/*
* we must ensure that the memory address allocated is BAR size
* aligned in order for the XLAT register to take the value. This
* is a requirement of the hardware. It is recommended to setup CMA
* for BAR sizes equal or greater than 4MB.
*/
if (!IS_ALIGNED(mw->dma_addr, mw->size)) {
dev_err(&pdev->dev, "DMA memory %pad not aligned to BAR size\n",
&mw->dma_addr);
ntb_free_mw(nt, num_mw);
return -ENOMEM;
}
/* Notify HW the memory location of the receive buffer */ /* Notify HW the memory location of the receive buffer */
ntb_set_mw_addr(nt->ndev, num_mw, mw->dma_addr); ntb_set_mw_addr(nt->ndev, num_mw, mw->dma_addr);
...@@ -856,7 +869,7 @@ static int ntb_transport_init_queue(struct ntb_transport *nt, ...@@ -856,7 +869,7 @@ static int ntb_transport_init_queue(struct ntb_transport *nt,
qp->client_ready = NTB_LINK_DOWN; qp->client_ready = NTB_LINK_DOWN;
qp->event_handler = NULL; qp->event_handler = NULL;
if (nt->max_qps % mw_max && mw_num < nt->max_qps % mw_max) if (nt->max_qps % mw_max && mw_num + 1 < nt->max_qps / mw_max)
num_qps_mw = nt->max_qps / mw_max + 1; num_qps_mw = nt->max_qps / mw_max + 1;
else else
num_qps_mw = nt->max_qps / mw_max; num_qps_mw = nt->max_qps / mw_max;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment