From patchwork Fri Dec 9 11:44:40 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 101425 Delivered-To: patch@linaro.org Received: by 10.140.20.101 with SMTP id 92csp260535qgi; Fri, 9 Dec 2016 03:45:13 -0800 (PST) X-Received: by 10.98.138.72 with SMTP id y69mr83535781pfd.52.1481283913537; Fri, 09 Dec 2016 03:45:13 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f1si33535003pld.130.2016.12.09.03.45.13; Fri, 09 Dec 2016 03:45:13 -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 S932992AbcLILpK (ORCPT + 25 others); Fri, 9 Dec 2016 06:45:10 -0500 Received: from mout.kundenserver.de ([217.72.192.73]:51407 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753610AbcLILpI (ORCPT ); Fri, 9 Dec 2016 06:45:08 -0500 Received: from wuerfel.lan ([78.43.21.235]) by mrelayeu.kundenserver.de (mreue104 [212.227.15.145]) with ESMTPA (Nemesis) id 0LuLSB-1cgVh60WpD-011nKM; Fri, 09 Dec 2016 12:44:59 +0100 From: Arnd Bergmann To: Greg Kroah-Hartman Cc: netdev@vger.kernel.org, Arnd Bergmann , "K. Y. Srinivasan" , Haiyang Zhang , Stephen Hemminger , devel@linuxdriverproject.org, linux-kernel@vger.kernel.org Subject: [PATCH] uio-hv-generic: store physical addresses instead of virtual Date: Fri, 9 Dec 2016 12:44:40 +0100 Message-Id: <20161209114456.3719619-1-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 X-Provags-ID: V03:K0:wf7/fza6aeUuRT+sx8qXa+/zhyIayqU6e0Btl1XYGMdbsRiLno5 dISJdozYwlKqdqn5mOBae+R2L+TM5ywCmsvIp7PpM4zaWlz+b+4Wek7Majs2IsI5wCItECx vcDnCAZ2jqJXQcVTyyLTWlK5Q0of76+GnlOItJ5TEnqF8vlK50hm8pZCaQH2PDuAXIHRo3f nU1gI/V9CiJa674CCUoNg== X-UI-Out-Filterresults: notjunk:1; V01:K0:iQuzeKT/qcA=:K+xcmBwIEjtSqZuLDSYUrI V/MltftVlTfH2Rah6HcEh/jAz3PIYffiYYaja4/GNrvAb9PSlkb317V0yK7NSbYMDEUQRgBBx SVxdyQkoD8o2SfJqVdxgtxl6o804slwHfveX1p6PjUe2SyWRjpwm0mUGdwDlQg23D0L8eUN1U yb9gAfodpzb3bOXuvIfAT5/ZgRoD4dub58pxxpcON+sPNlAZRqNSgKZna2JZUtCq5wQn+gpLC c3SQgnIUfO82oAslrB4YCob+C8r0V2GcXSG1W2z/QMDX7FHm62w364HkOq+T0y9tFZKS7pZa0 ZfUQrk41715FiMVQTazZ5bGWnDH7I6v1Mpt/c2NKpVZ6oeiC7J2x8RFGh2ZWjQuqJU7ACej4P CzWwhVJubG3gC1muaDfnFS/u5Zo0SwethKLGvNsrRSE0QpqfCjee8OP1doFRxos6n5ATE4PbG mgjDPGuyF+OW/dDkc3XBwxFZ97EhDlODz5YF2zAFCAhV4bbdoXWMDzlouchNi8l0UVhXAZbeL biIil0R/sdnb17k1NQLe5/km2YrK7nIlP9USl3scqVxrtbHsX5S2wTDRjAT++SB7dNvhGuuzO 0/Z0bTQEdNbtiG6MnA6is3UXZO2DnNdaB6GRactr2RA/siuUsFHZl3KjOkU0oKslvrf5h6Uya doDspTFq+kwHwUCQ2663Cn0QVUtQ+hWDFkIkkh17HCLk+O1XXqb7Dr4Y3DbRIZ5M6/CM= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org gcc warns about the newly added driver when phys_addr_t is wider than a pointer: drivers/uio/uio_hv_generic.c: In function 'hv_uio_mmap': drivers/uio/uio_hv_generic.c:71:17: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast] virt_to_phys((void *)info->mem[mi].addr) >> PAGE_SHIFT, drivers/uio/uio_hv_generic.c: In function 'hv_uio_probe': drivers/uio/uio_hv_generic.c:140:5: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] = (phys_addr_t)dev->channel->ringbuffer_pages; drivers/uio/uio_hv_generic.c:147:3: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] (phys_addr_t)vmbus_connection.int_page; drivers/uio/uio_hv_generic.c:153:3: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] (phys_addr_t)vmbus_connection.monitor_pages[1]; I can't see why we store a virtual address in a phys_addr_t here, as the only user of that variable converts it into a physical address anyway, so this moves the conversion to where it logically fits according to the types. Fixes: 95096f2fbd10 ("uio-hv-generic: new userspace i/o driver for VMBus") Signed-off-by: Arnd Bergmann --- drivers/uio/uio_hv_generic.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) -- 2.9.0 diff --git a/drivers/uio/uio_hv_generic.c b/drivers/uio/uio_hv_generic.c index ad3ab5805ad8..50958f167305 100644 --- a/drivers/uio/uio_hv_generic.c +++ b/drivers/uio/uio_hv_generic.c @@ -68,7 +68,7 @@ hv_uio_mmap(struct uio_info *info, struct vm_area_struct *vma) mi = (int)vma->vm_pgoff; return remap_pfn_range(vma, vma->vm_start, - virt_to_phys((void *)info->mem[mi].addr) >> PAGE_SHIFT, + info->mem[mi].addr >> PAGE_SHIFT, vma->vm_end - vma->vm_start, vma->vm_page_prot); } @@ -137,20 +137,20 @@ hv_uio_probe(struct hv_device *dev, /* mem resources */ pdata->info.mem[TXRX_RING_MAP].name = "txrx_rings"; pdata->info.mem[TXRX_RING_MAP].addr - = (phys_addr_t)dev->channel->ringbuffer_pages; + = virt_to_phys(dev->channel->ringbuffer_pages); pdata->info.mem[TXRX_RING_MAP].size = dev->channel->ringbuffer_pagecount * PAGE_SIZE; pdata->info.mem[TXRX_RING_MAP].memtype = UIO_MEM_LOGICAL; pdata->info.mem[INT_PAGE_MAP].name = "int_page"; pdata->info.mem[INT_PAGE_MAP].addr = - (phys_addr_t)vmbus_connection.int_page; + virt_to_phys(vmbus_connection.int_page); pdata->info.mem[INT_PAGE_MAP].size = PAGE_SIZE; pdata->info.mem[INT_PAGE_MAP].memtype = UIO_MEM_LOGICAL; pdata->info.mem[MON_PAGE_MAP].name = "monitor_pages"; pdata->info.mem[MON_PAGE_MAP].addr = - (phys_addr_t)vmbus_connection.monitor_pages[1]; + virt_to_phys(vmbus_connection.monitor_pages[1]); pdata->info.mem[MON_PAGE_MAP].size = PAGE_SIZE; pdata->info.mem[MON_PAGE_MAP].memtype = UIO_MEM_LOGICAL;