diff options
author | Arnd Bergmann <arnd@arndb.de> | 2016-12-09 06:44:40 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-12-10 08:57:58 -0500 |
commit | 190cc65e912de7e8f7ebddcecfbf55a610281a8c (patch) | |
tree | a4a006248cf123ca3498552213a33daba818f408 | |
parent | 2eb72d4b790c0798d077cd69739350e10288dbf1 (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.c | 8 |
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 | ||