2009-06-22 01:01:24

by Stephen Rothwell

[permalink] [raw]
Subject: linux-next: origin tree build warning

Hi all,

Today's linux-next build (powerpc ppc64_defconfig) produced this warning:

drivers/infiniband/hw/mthca/mthca_mr.c: In function 'mthca_arbel_write_mtt_seg':
drivers/infiniband/hw/mthca/mthca_mr.c:358: warning: 'dma_sync_single' is deprecated (declared at /scratch/sfr/next/include/linux/dma-mapping.h:113)
drivers/infiniband/hw/mthca/mthca_mr.c: In function 'mthca_arbel_map_phys_fmr':
drivers/infiniband/hw/mthca/mthca_mr.c:810: warning: 'dma_sync_single' is deprecated (declared at /scratch/sfr/next/include/linux/dma-mapping.h:113)

Introduced by commit dbe6f1869188b6e04e38aa861dd198befb08bcd7
("dma-mapping: mark dma_sync_single and dma_sync_sg as deprecated").

--
Cheers,
Stephen Rothwell [email protected]
http://www.canb.auug.org.au/~sfr/


Attachments:
(No filename) (779.00 B)
(No filename) (197.00 B)
Download all attachments

2009-06-22 03:11:32

by FUJITA Tomonori

[permalink] [raw]
Subject: Re: linux-next: origin tree build warning

On Mon, 22 Jun 2009 11:01:13 +1000
Stephen Rothwell <[email protected]> wrote:

> Hi all,
>
> Today's linux-next build (powerpc ppc64_defconfig) produced this warning:
>
> drivers/infiniband/hw/mthca/mthca_mr.c: In function 'mthca_arbel_write_mtt_seg':
> drivers/infiniband/hw/mthca/mthca_mr.c:358: warning: 'dma_sync_single' is deprecated (declared at /scratch/sfr/next/include/linux/dma-mapping.h:113)
> drivers/infiniband/hw/mthca/mthca_mr.c: In function 'mthca_arbel_map_phys_fmr':
> drivers/infiniband/hw/mthca/mthca_mr.c:810: warning: 'dma_sync_single' is deprecated (declared at /scratch/sfr/next/include/linux/dma-mapping.h:113)
>
> Introduced by commit dbe6f1869188b6e04e38aa861dd198befb08bcd7
> ("dma-mapping: mark dma_sync_single and dma_sync_sg as deprecated").

Thanks, here's a fix for this:

http://marc.info/?l=linux-kernel&m=124347325819016&w=2


The patch doesn't change the driver functionally but the driver looks
broken wrt DMA synchronization. I guess that this issue is on Roland's
todo list:

http://marc.info/?l=linux-kernel&m=124354923710600&w=2

2009-06-23 06:20:10

by Roland Dreier

[permalink] [raw]
Subject: Re: [ofa-general] Re: linux-next: origin tree build warning

Thanks, I queued up:

commit 99987bea474ceca8ec6fb05f81d7d188634cdffd
Author: Roland Dreier <[email protected]>
Date: Mon Jun 22 23:04:13 2009 -0700

IB/mthca: Replace dma_sync_single() use with proper functions

dma_sync_single() is deprecated now, and the use in mthca is wrong:
there should be a dma_sync_single_for_cpu() before touching the memory
from the CPU, and a dma_sync_single_for_device() afterwards. Fix
this, prompted by a kick in the pants from a patch from FUJITA
Tomonori <[email protected]>.

Signed-off-by: Roland Dreier <[email protected]>

diff --git a/drivers/infiniband/hw/mthca/mthca_mr.c b/drivers/infiniband/hw/mthca/mthca_mr.c
index d606edf..065b208 100644
--- a/drivers/infiniband/hw/mthca/mthca_mr.c
+++ b/drivers/infiniband/hw/mthca/mthca_mr.c
@@ -352,10 +352,14 @@ static void mthca_arbel_write_mtt_seg(struct mthca_dev *dev,

BUG_ON(!mtts);

+ dma_sync_single_for_cpu(&dev->pdev->dev, dma_handle,
+ list_len * sizeof (u64), DMA_TO_DEVICE);
+
for (i = 0; i < list_len; ++i)
mtts[i] = cpu_to_be64(buffer_list[i] | MTHCA_MTT_FLAG_PRESENT);

- dma_sync_single(&dev->pdev->dev, dma_handle, list_len * sizeof (u64), DMA_TO_DEVICE);
+ dma_sync_single_for_device(&dev->pdev->dev, dma_handle,
+ list_len * sizeof (u64), DMA_TO_DEVICE);
}

int mthca_write_mtt(struct mthca_dev *dev, struct mthca_mtt *mtt,
@@ -803,12 +807,15 @@ int mthca_arbel_map_phys_fmr(struct ib_fmr *ibfmr, u64 *page_list,

wmb();

+ dma_sync_single_for_cpu(&dev->pdev->dev, fmr->mem.arbel.dma_handle,
+ list_len * sizeof(u64), DMA_TO_DEVICE);
+
for (i = 0; i < list_len; ++i)
fmr->mem.arbel.mtts[i] = cpu_to_be64(page_list[i] |
MTHCA_MTT_FLAG_PRESENT);

- dma_sync_single(&dev->pdev->dev, fmr->mem.arbel.dma_handle,
- list_len * sizeof(u64), DMA_TO_DEVICE);
+ dma_sync_single_for_device(&dev->pdev->dev, fmr->mem.arbel.dma_handle,
+ list_len * sizeof(u64), DMA_TO_DEVICE);

fmr->mem.arbel.mpt->key = cpu_to_be32(key);
fmr->mem.arbel.mpt->lkey = cpu_to_be32(key);