aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2016-12-09 06:44:40 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-12-10 08:57:58 -0500
commit190cc65e912de7e8f7ebddcecfbf55a610281a8c (patch)
treea4a006248cf123ca3498552213a33daba818f408
parent2eb72d4b790c0798d077cd69739350e10288dbf1 (diff)
uio-hv-generic: store physical addresses instead of virtual
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 <arnd@arndb.de> Acked-by: Stephen Hemminger <sthemmin@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/uio/uio_hv_generic.c8
1 files 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)
68 mi = (int)vma->vm_pgoff; 68 mi = (int)vma->vm_pgoff;
69 69
70 return remap_pfn_range(vma, vma->vm_start, 70 return remap_pfn_range(vma, vma->vm_start,
71 virt_to_phys((void *)info->mem[mi].addr) >> PAGE_SHIFT, 71 info->mem[mi].addr >> PAGE_SHIFT,
72 vma->vm_end - vma->vm_start, vma->vm_page_prot); 72 vma->vm_end - vma->vm_start, vma->vm_page_prot);
73} 73}
74 74
@@ -137,20 +137,20 @@ hv_uio_probe(struct hv_device *dev,
137 /* mem resources */ 137 /* mem resources */
138 pdata->info.mem[TXRX_RING_MAP].name = "txrx_rings"; 138 pdata->info.mem[TXRX_RING_MAP].name = "txrx_rings";
139 pdata->info.mem[TXRX_RING_MAP].addr 139 pdata->info.mem[TXRX_RING_MAP].addr
140 = (phys_addr_t)dev->channel->ringbuffer_pages; 140 = virt_to_phys(dev->channel->ringbuffer_pages);
141 pdata->info.mem[TXRX_RING_MAP].size 141 pdata->info.mem[TXRX_RING_MAP].size
142 = dev->channel->ringbuffer_pagecount * PAGE_SIZE; 142 = dev->channel->ringbuffer_pagecount * PAGE_SIZE;
143 pdata->info.mem[TXRX_RING_MAP].memtype = UIO_MEM_LOGICAL; 143 pdata->info.mem[TXRX_RING_MAP].memtype = UIO_MEM_LOGICAL;
144 144
145 pdata->info.mem[INT_PAGE_MAP].name = "int_page"; 145 pdata->info.mem[INT_PAGE_MAP].name = "int_page";
146 pdata->info.mem[INT_PAGE_MAP].addr = 146 pdata->info.mem[INT_PAGE_MAP].addr =
147 (phys_addr_t)vmbus_connection.int_page; 147 virt_to_phys(vmbus_connection.int_page);
148 pdata->info.mem[INT_PAGE_MAP].size = PAGE_SIZE; 148 pdata->info.mem[INT_PAGE_MAP].size = PAGE_SIZE;
149 pdata->info.mem[INT_PAGE_MAP].memtype = UIO_MEM_LOGICAL; 149 pdata->info.mem[INT_PAGE_MAP].memtype = UIO_MEM_LOGICAL;
150 150
151 pdata->info.mem[MON_PAGE_MAP].name = "monitor_pages"; 151 pdata->info.mem[MON_PAGE_MAP].name = "monitor_pages";
152 pdata->info.mem[MON_PAGE_MAP].addr = 152 pdata->info.mem[MON_PAGE_MAP].addr =
153 (phys_addr_t)vmbus_connection.monitor_pages[1]; 153 virt_to_phys(vmbus_connection.monitor_pages[1]);
154 pdata->info.mem[MON_PAGE_MAP].size = PAGE_SIZE; 154 pdata->info.mem[MON_PAGE_MAP].size = PAGE_SIZE;
155 pdata->info.mem[MON_PAGE_MAP].memtype = UIO_MEM_LOGICAL; 155 pdata->info.mem[MON_PAGE_MAP].memtype = UIO_MEM_LOGICAL;
156 156