Message ID | 20241016-blackbird-le16-v1-1-97ba8de6b38f@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 4b726103796a9058ea77fd0905879ecc04951ef1 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] net: usb: sr9700: only store little-endian values in __le16 variable | expand |
Hello: This patch was applied to netdev/net-next.git (main) by Andrew Lunn <andrew@lunn.ch>: On Wed, 16 Oct 2024 15:31:14 +0100 you wrote: > In sr_mdio_read() the local variable res is used to store both > little-endian and host byte order values. This prevents Sparse > from helping us by flagging when endian miss matches occur - the > detection process hinges on the type of variables matching the > byte order of values stored in them. > > Address this by adding a new local variable, word, to store little-endian > values; change the type of res to int, and use it to store host-byte > order values. > > [...] Here is the summary with links: - [net-next] net: usb: sr9700: only store little-endian values in __le16 variable https://git.kernel.org/netdev/net-next/c/4b726103796a You are awesome, thank you!
diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c index cb7d2f798fb4..091bc2aca7e8 100644 --- a/drivers/net/usb/sr9700.c +++ b/drivers/net/usb/sr9700.c @@ -177,9 +177,9 @@ static int sr9700_get_eeprom(struct net_device *netdev, static int sr_mdio_read(struct net_device *netdev, int phy_id, int loc) { struct usbnet *dev = netdev_priv(netdev); - __le16 res; + int err, res; + __le16 word; int rc = 0; - int err; if (phy_id) { netdev_dbg(netdev, "Only internal phy supported\n"); @@ -197,14 +197,14 @@ static int sr_mdio_read(struct net_device *netdev, int phy_id, int loc) if (value & NSR_LINKST) rc = 1; } - err = sr_share_read_word(dev, 1, loc, &res); + err = sr_share_read_word(dev, 1, loc, &word); if (err < 0) return err; if (rc == 1) - res = le16_to_cpu(res) | BMSR_LSTATUS; + res = le16_to_cpu(word) | BMSR_LSTATUS; else - res = le16_to_cpu(res) & ~BMSR_LSTATUS; + res = le16_to_cpu(word) & ~BMSR_LSTATUS; netdev_dbg(netdev, "sr_mdio_read() phy_id=0x%02x, loc=0x%02x, returns=0x%04x\n", phy_id, loc, res);
In sr_mdio_read() the local variable res is used to store both little-endian and host byte order values. This prevents Sparse from helping us by flagging when endian miss matches occur - the detection process hinges on the type of variables matching the byte order of values stored in them. Address this by adding a new local variable, word, to store little-endian values; change the type of res to int, and use it to store host-byte order values. Flagged by Sparse as: .../sr9700.c:205:21: warning: incorrect type in assignment (different base types) .../sr9700.c:205:21: expected restricted __le16 [addressable] [usertype] res .../sr9700.c:205:21: got int .../sr9700.c:207:21: warning: incorrect type in assignment (different base types) .../sr9700.c:207:21: expected restricted __le16 [addressable] [usertype] res .../sr9700.c:207:21: got int .../sr9700.c:212:16: warning: incorrect type in return expression (different base types) .../sr9700.c:212:16: expected int .../sr9700.c:212:16: got restricted __le16 [addressable] [usertype] res Compile tested only. No functional change intended. Signed-off-by: Simon Horman <horms@kernel.org> --- drivers/net/usb/sr9700.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)