[PATCH] bootwrapper: mspsc.c: fix pointer-to-int-cast warnings

Subsystems: linux for powerpc (32-bit and 64-bit), the rest

STALE3188d

2 messages, 2 authors, 2017-11-13 · open the first message on its own page

[PATCH] bootwrapper: mspsc.c: fix pointer-to-int-cast warnings

From: Michal Suchanek <hidden>
Date: 2017-10-05 11:29:07

I get these warnings:

../arch/powerpc/boot/mpsc.c: In function 'mpsc_get_virtreg_of_phandle':
../arch/powerpc/boot/mpsc.c:113:35: warning: cast from pointer to
integer of different size [-Wpointer-to-int-cast]

../arch/powerpc/boot/mpsc.c: In function 'mpsc_console_init':
../arch/powerpc/boot/mpsc.c:147:12: warning: cast from pointer to
integer of different size [-Wpointer-to-int-cast]

Presumably the patch below fixes these, and presumably the DT defines
that pointes and integers have the same size in the DT so this is fine
regardless of 32bit/64bit target. I have not found a DT definition for
PowerPC, howewer. So any bugs in the property sizing and resulting
failures to read the properties are left as before.

Signed-off-by: Michal Suchanek <redacted>
---
 arch/powerpc/boot/mpsc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/boot/mpsc.c b/arch/powerpc/boot/mpsc.c
index 425ad88cce8d..ea740493277a 100644
--- a/arch/powerpc/boot/mpsc.c
+++ b/arch/powerpc/boot/mpsc.c
@@ -110,7 +110,7 @@ static volatile char *mpsc_get_virtreg_of_phandle(void *devp, char *prop)
 	if (n != sizeof(v))
 		goto err_out;
 
-	devp = find_node_by_linuxphandle((u32)v);
+	devp = find_node_by_linuxphandle((intptr_t)v);
 	if (devp == NULL)
 		goto err_out;
 
@@ -144,7 +144,7 @@ int mpsc_console_init(void *devp, struct serial_console_data *scdp)
 	n = getprop(devp, "cell-index", &v, sizeof(v));
 	if (n != sizeof(v))
 		goto err_out;
-	reg_set = (int)v;
+	reg_set = (intptr_t)v;
 
 	mpscintr_base += (reg_set == 0) ? 0x4 : 0xc;
 
-- 
2.10.2

Re: [PATCH] bootwrapper: mspsc.c: fix pointer-to-int-cast warnings

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2017-11-13 11:05:48

Hi Michal,

Thanks for trying to fix this.

Michal Suchanek [off-list ref] writes:
I get these warnings:

../arch/powerpc/boot/mpsc.c: In function 'mpsc_get_virtreg_of_phandle':
../arch/powerpc/boot/mpsc.c:113:35: warning: cast from pointer to
integer of different size [-Wpointer-to-int-cast]

../arch/powerpc/boot/mpsc.c: In function 'mpsc_console_init':
../arch/powerpc/boot/mpsc.c:147:12: warning: cast from pointer to
integer of different size [-Wpointer-to-int-cast]

Presumably the patch below fixes these, and presumably the DT defines
that pointes and integers have the same size in the DT so this is fine
Actually no it doesn't. A device tree doesn't contain pointers, and it
doesn't say anything about the size of a pointer on a platform that uses
that device tree.

phandles are not pointers, they are handles, and they are always 32-bit.
So this code is just wrong on 64-bit, you can't safely cast from a
64-bit pointer to a phandle.

But I think this warning has actually been fixed differently by commit:

  866bfc75f40e ("powerpc: conditionally compile platform-specific serial drivers")

If you're still seeing the warning let me know.

cheers
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help