From patchwork Mon Feb 29 11:47:05 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 102649 Delivered-To: patch@linaro.org Received: by 10.112.199.169 with SMTP id jl9csp1196294lbc; Mon, 29 Feb 2016 03:48:00 -0800 (PST) X-Received: by 10.66.150.170 with SMTP id uj10mr21083622pab.91.1456746480455; Mon, 29 Feb 2016 03:48:00 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ly8si42594914pab.89.2016.02.29.03.48.00; Mon, 29 Feb 2016 03:48:00 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754581AbcB2Lr6 (ORCPT + 30 others); Mon, 29 Feb 2016 06:47:58 -0500 Received: from mout.kundenserver.de ([212.227.126.134]:50672 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752054AbcB2Lr5 (ORCPT ); Mon, 29 Feb 2016 06:47:57 -0500 Received: from wuerfel.lan. ([78.42.132.4]) by mrelayeu.kundenserver.de (mreue002) with ESMTPA (Nemesis) id 0MEwG2-1ahTqV2vgw-00Fzwv; Mon, 29 Feb 2016 12:47:21 +0100 From: Arnd Bergmann To: Jon Mason , Dave Jiang , Allen Hubbe Cc: linux-arm-kernel@lists.infradead.org, Arnd Bergmann , linux-ntb@googlegroups.com, linux-kernel@vger.kernel.org Subject: [PATCH, RESEND] ntb: perf test: fix address space confusion Date: Mon, 29 Feb 2016 12:47:05 +0100 Message-Id: <1456746438-3842627-1-git-send-email-arnd@arndb.de> X-Mailer: git-send-email 2.7.0 X-Provags-ID: V03:K0:QDz5G185Qi+ylksk4Jzi4Uu9PpTvZZ7dH5EFMDfvTd1x9g7SnkJ GGvPuZSWwrPz0H+YPev8ywdXjOhGt2rmPlNzvpBKTmp4a0T9Z1XYl44bB3YmScqylHvV1BZ vZhgwAtCYP+QdT+ZQutrYBufFpVZ/4804oKqrffGqgjpoQlr1tWaNzgdgA+2+BtACyV+XSE Mk2VNesNBotY/RgmByMGA== X-UI-Out-Filterresults: notjunk:1; V01:K0:EL1nXtCq8Ag=:UikkT22irq9sXqDPXY5Ind vc6ZEBTI3F5aOPI/4MyRttBsc6ym2Wl21j4R8u4I5nJ3l5ZcEnEGIWeK7Aspg2o0gz01j3JAA Jo/3oBfWVgwoY6GTfsJ79WqM8unYYCAEJ/G35lO+3OCznIWpnEcbb5GgL0R81Gd6I7YDYUG/d qIOtXEFRBe46j7vBWNkKoIUYSjdxyYU/o01NuqRSpB7NrqFXuEGatnDE8FwlWoVr/y67Orlzz ofihSKzsMObNbTrYDZIYorXLtiAsh/U7h+Rg7xnXtnGD+ShtcUEMEUExAliJsPaJAalCLLhOh n0g8CB8fj2EuLdXqERSe2H1gndCWDfzld7neK+9kLg+idr0e9E13CqDIfSGj6dwOx4giUFMKh hAJqRqqC+4b/wevUrACnOytl/BkLzbJDJ9EKHMKVoJOnxPJ8J6tTfExALCcnx32xF7+Wm1Iwe 3lcDRa5M5UPnLTHQLKYeLUhZRLfGc0YteahcTEaDSvYe6TG4Bcmu7nXar9CNYqqIKVmAp/4v4 ge1XeUZO+kWGDZfCWZfYDwa/8joWH5TaHkTnk9d+qwBZPLfZDIefoB0/0Cb7qWOm2VLEOhzzy wHDrYEqUM5DQa6CdR5CZsXo7rstOWnpRG97uW7rkJY+mcuGc4TgjPTYojFcIzxhDZ8DooYvzu vWvHQy7/MUvJxwz+EOgOpngLtkocFsihBVOYuvZYfgKtPmnEyUictNbu83c+iTpHRLEM= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The ntb driver assigns between pointers an __iomem tokens, and also casts them to 64-bit integers, which results in compiler warnings on 32-bit systems: drivers/ntb/test/ntb_perf.c: In function 'perf_copy': drivers/ntb/test/ntb_perf.c:213:10: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] vbase = (u64)(u64 *)mw->vbase; ^ drivers/ntb/test/ntb_perf.c:214:14: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] dst_vaddr = (u64)(u64 *)dst; ^ This adds __iomem annotations where needed and changes the temporary variables to iomem pointers to avoid casting them to u64. I did not see the problem in linux-next earlier, but it show showed up in 4.5-rc1. Signed-off-by: Arnd Bergmann Acked-by: Dave Jiang Fixes: 8a7b6a778a85 ("ntb: ntb perf tool") --- I sent this out on Jan 26, but the problem still persists in linux-next as of Feb 29. drivers/ntb/test/ntb_perf.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) -- 2.7.0 diff --git a/drivers/ntb/test/ntb_perf.c b/drivers/ntb/test/ntb_perf.c index c8a37ba4b4f9..6bdc1e7b7503 100644 --- a/drivers/ntb/test/ntb_perf.c +++ b/drivers/ntb/test/ntb_perf.c @@ -178,7 +178,7 @@ static void perf_copy_callback(void *data) atomic_dec(&pctx->dma_sync); } -static ssize_t perf_copy(struct pthr_ctx *pctx, char *dst, +static ssize_t perf_copy(struct pthr_ctx *pctx, char __iomem *dst, char *src, size_t size) { struct perf_ctx *perf = pctx->perf; @@ -189,7 +189,8 @@ static ssize_t perf_copy(struct pthr_ctx *pctx, char *dst, dma_cookie_t cookie; size_t src_off, dst_off; struct perf_mw *mw = &perf->mw; - u64 vbase, dst_vaddr; + void __iomem *vbase; + void __iomem *dst_vaddr; dma_addr_t dst_phys; int retries = 0; @@ -204,14 +205,14 @@ static ssize_t perf_copy(struct pthr_ctx *pctx, char *dst, } device = chan->device; - src_off = (size_t)src & ~PAGE_MASK; - dst_off = (size_t)dst & ~PAGE_MASK; + src_off = (uintptr_t)src & ~PAGE_MASK; + dst_off = (uintptr_t __force)dst & ~PAGE_MASK; if (!is_dma_copy_aligned(device, src_off, dst_off, size)) return -ENODEV; - vbase = (u64)(u64 *)mw->vbase; - dst_vaddr = (u64)(u64 *)dst; + vbase = mw->vbase; + dst_vaddr = dst; dst_phys = mw->phys_addr + (dst_vaddr - vbase); unmap = dmaengine_get_unmap_data(device->dev, 1, GFP_NOWAIT); @@ -261,13 +262,13 @@ err_get_unmap: return 0; } -static int perf_move_data(struct pthr_ctx *pctx, char *dst, char *src, +static int perf_move_data(struct pthr_ctx *pctx, char __iomem *dst, char *src, u64 buf_size, u64 win_size, u64 total) { int chunks, total_chunks, i; int copied_chunks = 0; u64 copied = 0, result; - char *tmp = dst; + char __iomem *tmp = dst; u64 perf, diff_us; ktime_t kstart, kstop, kdiff; @@ -324,7 +325,7 @@ static int ntb_perf_thread(void *data) struct perf_ctx *perf = pctx->perf; struct pci_dev *pdev = perf->ntb->pdev; struct perf_mw *mw = &perf->mw; - char *dst; + char __iomem *dst; u64 win_size, buf_size, total; void *src; int rc, node, i; @@ -364,7 +365,7 @@ static int ntb_perf_thread(void *data) if (buf_size > MAX_TEST_SIZE) buf_size = MAX_TEST_SIZE; - dst = (char *)mw->vbase; + dst = (char __iomem *)mw->vbase; atomic_inc(&perf->tsync); while (atomic_read(&perf->tsync) != perf->perf_threads)