| From 2f5281ba2a8feaf6f0aee93356f350855bb530fc Mon Sep 17 00:00:00 2001 |
| From: Paul Burton <paul.burton@imgtec.com> |
| Date: Fri, 2 Sep 2016 15:22:48 +0100 |
| Subject: net: ti: cpmac: Fix compiler warning due to type confusion |
| |
| From: Paul Burton <paul.burton@imgtec.com> |
| |
| commit 2f5281ba2a8feaf6f0aee93356f350855bb530fc upstream. |
| |
| cpmac_start_xmit() used the max() macro on skb->len (an unsigned int) |
| and ETH_ZLEN (a signed int literal). This led to the following compiler |
| warning: |
| |
| In file included from include/linux/list.h:8:0, |
| from include/linux/module.h:9, |
| from drivers/net/ethernet/ti/cpmac.c:19: |
| drivers/net/ethernet/ti/cpmac.c: In function 'cpmac_start_xmit': |
| include/linux/kernel.h:748:17: warning: comparison of distinct pointer |
| types lacks a cast |
| (void) (&_max1 == &_max2); \ |
| ^ |
| drivers/net/ethernet/ti/cpmac.c:560:8: note: in expansion of macro 'max' |
| len = max(skb->len, ETH_ZLEN); |
| ^ |
| |
| On top of this, it assigned the result of the max() macro to a signed |
| integer whilst all further uses of it result in it being cast to varying |
| widths of unsigned integer. |
| |
| Fix this up by using max_t to ensure the comparison is performed as |
| unsigned integers, and for consistency change the type of the len |
| variable to unsigned int. |
| |
| Signed-off-by: Paul Burton <paul.burton@imgtec.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Cc: Arnd Bergmann <arnd@arndb.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/net/ethernet/ti/cpmac.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/net/ethernet/ti/cpmac.c |
| +++ b/drivers/net/ethernet/ti/cpmac.c |
| @@ -547,7 +547,8 @@ fatal_error: |
| |
| static int cpmac_start_xmit(struct sk_buff *skb, struct net_device *dev) |
| { |
| - int queue, len; |
| + int queue; |
| + unsigned int len; |
| struct cpmac_desc *desc; |
| struct cpmac_priv *priv = netdev_priv(dev); |
| |
| @@ -557,7 +558,7 @@ static int cpmac_start_xmit(struct sk_bu |
| if (unlikely(skb_padto(skb, ETH_ZLEN))) |
| return NETDEV_TX_OK; |
| |
| - len = max(skb->len, ETH_ZLEN); |
| + len = max_t(unsigned int, skb->len, ETH_ZLEN); |
| queue = skb_get_queue_mapping(skb); |
| netif_stop_subqueue(dev, queue); |
| |