From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932989AbcLILpK (ORCPT ); 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 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 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(-) 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; -- 2.9.0