2020-01-04 14:34:06

by Krzysztof Kozlowski

[permalink] [raw]
Subject: [PATCH 1/2] net: ethernet: 3c515: Fix cast from pointer to integer of different size

Pointer passed as integer should be cast to unsigned long to
avoid warning (compile testing on alpha architecture):

drivers/net/ethernet/3com/3c515.c: In function ‘corkscrew_start_xmit’:
drivers/net/ethernet/3com/3c515.c:1066:8: warning:
cast from pointer to integer of different size [-Wpointer-to-int-cast]

Signed-off-by: Krzysztof Kozlowski <[email protected]>

---

Only compile tested
---
drivers/net/ethernet/3com/3c515.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/3com/3c515.c b/drivers/net/ethernet/3com/3c515.c
index 1e233e2f0a5a..f5b4cacef07a 100644
--- a/drivers/net/ethernet/3com/3c515.c
+++ b/drivers/net/ethernet/3com/3c515.c
@@ -1063,7 +1063,7 @@ static netdev_tx_t corkscrew_start_xmit(struct sk_buff *skb,
#ifdef VORTEX_BUS_MASTER
if (vp->bus_master) {
/* Set the bus-master controller to transfer the packet. */
- outl((int) (skb->data), ioaddr + Wn7_MasterAddr);
+ outl((unsigned long)(skb->data), ioaddr + Wn7_MasterAddr);
outw((skb->len + 3) & ~3, ioaddr + Wn7_MasterLen);
vp->tx_skb = skb;
outw(StartDMADown, ioaddr + EL3_CMD);
--
2.17.1


2020-01-04 14:34:07

by Krzysztof Kozlowski

[permalink] [raw]
Subject: [PATCH 2/2] net: ethernet: ni65: Fix cast from pointer to integer of different size

"buffer" array is unsigned long so casting of pointer to u32 causes
warning (compile testing on alpha architecture):

drivers/net/ethernet/amd/ni65.c: In function ‘ni65_stop_start’:
drivers/net/ethernet/amd/ni65.c:751:16: warning:
cast from pointer to integer of different size [-Wpointer-to-int-cast]

Signed-off-by: Krzysztof Kozlowski <[email protected]>

---

Only compile tested
---
drivers/net/ethernet/amd/ni65.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/amd/ni65.c b/drivers/net/ethernet/amd/ni65.c
index c38edf6f03a3..60c194680bdf 100644
--- a/drivers/net/ethernet/amd/ni65.c
+++ b/drivers/net/ethernet/amd/ni65.c
@@ -748,7 +748,7 @@ static void ni65_stop_start(struct net_device *dev,struct priv *p)
#ifdef XMT_VIA_SKB
skb_save[i] = p->tmd_skb[i];
#endif
- buffer[i] = (u32) isa_bus_to_virt(tmdp->u.buffer);
+ buffer[i] = (unsigned long)isa_bus_to_virt(tmdp->u.buffer);
blen[i] = tmdp->blen;
tmdp->u.s.status = 0x0;
}
--
2.17.1

2020-01-06 21:33:01

by David Miller

[permalink] [raw]
Subject: Re: [PATCH 1/2] net: ethernet: 3c515: Fix cast from pointer to integer of different size

From: Krzysztof Kozlowski <[email protected]>
Date: Sat, 4 Jan 2020 15:33:05 +0100

> Pointer passed as integer should be cast to unsigned long to
> avoid warning (compile testing on alpha architecture):
>
> drivers/net/ethernet/3com/3c515.c: In function ?corkscrew_start_xmit?:
> drivers/net/ethernet/3com/3c515.c:1066:8: warning:
> cast from pointer to integer of different size [-Wpointer-to-int-cast]
>
> Signed-off-by: Krzysztof Kozlowski <[email protected]>
>
> ---
>
> Only compile tested

Sorry, I'm not applying these two.

It is clear that these drivers only work properly on 32-bit architectures
where virtual address equals the DMA address.

Making this warning goes away creates a false sense that they are in
fact 64-bit clean and capable, they are not.

2020-01-07 08:37:48

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH 1/2] net: ethernet: 3c515: Fix cast from pointer to integer of different size

On Mon, Jan 06, 2020 at 01:31:55PM -0800, David Miller wrote:
> From: Krzysztof Kozlowski <[email protected]>
> Date: Sat, 4 Jan 2020 15:33:05 +0100
>
> > Pointer passed as integer should be cast to unsigned long to
> > avoid warning (compile testing on alpha architecture):
> >
> > drivers/net/ethernet/3com/3c515.c: In function ‘corkscrew_start_xmit’:
> > drivers/net/ethernet/3com/3c515.c:1066:8: warning:
> > cast from pointer to integer of different size [-Wpointer-to-int-cast]
> >
> > Signed-off-by: Krzysztof Kozlowski <[email protected]>
> >
> > ---
> >
> > Only compile tested
>
> Sorry, I'm not applying these two.
>
> It is clear that these drivers only work properly on 32-bit architectures
> where virtual address equals the DMA address.
>
> Making this warning goes away creates a false sense that they are in
> fact 64-bit clean and capable, they are not.

The existing casts are clearly wrong - the convention is that pointer
should be cast to unsigned long, not int. In the second case it is even
weirder - the buffer array is actually unsigned long so the cast is
confusing.

However I understand your argument that these casts serve as a
documentation purpose of only 32-bit support, so let it be.

Thanks!

Best regards,
Krzysztof