Skip to content

Commit 190cc65

Browse files
arndbgregkh
authored andcommitted
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: 95096f2 ("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>
1 parent 2eb72d4 commit 190cc65

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

drivers/uio/uio_hv_generic.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ hv_uio_mmap(struct uio_info *info, struct vm_area_struct *vma)
6868
mi = (int)vma->vm_pgoff;
6969

7070
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,
7272
vma->vm_end - vma->vm_start, vma->vm_page_prot);
7373
}
7474

@@ -137,20 +137,20 @@ hv_uio_probe(struct hv_device *dev,
137137
/* mem resources */
138138
pdata->info.mem[TXRX_RING_MAP].name = "txrx_rings";
139139
pdata->info.mem[TXRX_RING_MAP].addr
140-
= (phys_addr_t)dev->channel->ringbuffer_pages;
140+
= virt_to_phys(dev->channel->ringbuffer_pages);
141141
pdata->info.mem[TXRX_RING_MAP].size
142142
= dev->channel->ringbuffer_pagecount * PAGE_SIZE;
143143
pdata->info.mem[TXRX_RING_MAP].memtype = UIO_MEM_LOGICAL;
144144

145145
pdata->info.mem[INT_PAGE_MAP].name = "int_page";
146146
pdata->info.mem[INT_PAGE_MAP].addr =
147-
(phys_addr_t)vmbus_connection.int_page;
147+
virt_to_phys(vmbus_connection.int_page);
148148
pdata->info.mem[INT_PAGE_MAP].size = PAGE_SIZE;
149149
pdata->info.mem[INT_PAGE_MAP].memtype = UIO_MEM_LOGICAL;
150150

151151
pdata->info.mem[MON_PAGE_MAP].name = "monitor_pages";
152152
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]);
154154
pdata->info.mem[MON_PAGE_MAP].size = PAGE_SIZE;
155155
pdata->info.mem[MON_PAGE_MAP].memtype = UIO_MEM_LOGICAL;
156156

0 commit comments

Comments
 (0)