Message ID | 20171005112854.28115-1-msuchanek@suse.de (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | bootwrapper: mspsc.c: fix pointer-to-int-cast warnings | expand |
Hi Michal, Thanks for trying to fix this. Michal Suchanek <msuchanek@suse.de> 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
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;
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 <msuchanek@suse.de> --- arch/powerpc/boot/mpsc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)