Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 375679
b: refs/heads/master
c: b77b263
h: refs/heads/master
i:
  375677: f776599
  375675: 299c7e3
  375671: d42c62a
  375663: b4c31e9
  375647: 61a384e
  375615: d4ddef8
  375551: ce0d482
v: v3
  • Loading branch information
Jon Mason committed May 15, 2013
1 parent 5307f18 commit cfa98ba
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 13 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 113fc505b83b2d16e820ca74fa07f99a34877b1d
refs/heads/master: b77b2637b39ecc380bb08992380d7d48452b0872
32 changes: 20 additions & 12 deletions trunk/drivers/ntb/ntb_transport.c
Original file line number Diff line number Diff line change
Expand Up @@ -507,17 +507,37 @@ static void ntb_transport_setup_qp_mw(struct ntb_transport *nt,
qp->tx_pkts = 0;
}

static void ntb_free_mw(struct ntb_transport *nt, int num_mw)
{
struct ntb_transport_mw *mw = &nt->mw[num_mw];
struct pci_dev *pdev = ntb_query_pdev(nt->ndev);

if (!mw->virt_addr)
return;

dma_free_coherent(&pdev->dev, mw->size, mw->virt_addr, mw->dma_addr);
mw->virt_addr = NULL;
}

static int ntb_set_mw(struct ntb_transport *nt, int num_mw, unsigned int size)
{
struct ntb_transport_mw *mw = &nt->mw[num_mw];
struct pci_dev *pdev = ntb_query_pdev(nt->ndev);

/* No need to re-setup */
if (mw->size == ALIGN(size, 4096))
return 0;

if (mw->size != 0)
ntb_free_mw(nt, num_mw);

/* Alloc memory for receiving data. Must be 4k aligned */
mw->size = ALIGN(size, 4096);

mw->virt_addr = dma_alloc_coherent(&pdev->dev, mw->size, &mw->dma_addr,
GFP_KERNEL);
if (!mw->virt_addr) {
mw->size = 0;
dev_err(&pdev->dev, "Unable to allocate MW buffer of size %d\n",
(int) mw->size);
return -ENOMEM;
Expand All @@ -529,18 +549,6 @@ static int ntb_set_mw(struct ntb_transport *nt, int num_mw, unsigned int size)
return 0;
}

static void ntb_free_mw(struct ntb_transport *nt, int num_mw)
{
struct ntb_transport_mw *mw = &nt->mw[num_mw];
struct pci_dev *pdev = ntb_query_pdev(nt->ndev);

if (!mw->virt_addr)
return;

dma_free_coherent(&pdev->dev, mw->size, mw->virt_addr, mw->dma_addr);
mw->virt_addr = NULL;
}

static void ntb_qp_link_cleanup(struct work_struct *work)
{
struct ntb_transport_qp *qp = container_of(work,
Expand Down

0 comments on commit cfa98ba

Please sign in to comment.