From: Oliver Neukum <oneukum@suse.com>
To: netdev@vger.kernel.org, hayeswang@realtek.com, bjorn@mork.no,
o.rempel@pengutronix.de
Cc: Oliver Neukum <oneukum@suse.com>
Subject: [RFC net-next 3/3] net: usb: usbnet: remove driver_priv
Date: Tue, 10 Feb 2026 16:11:14 +0100 [thread overview]
Message-ID: <20260210151416.42254-4-oneukum@suse.com> (raw)
In-Reply-To: <20260210151416.42254-1-oneukum@suse.com>
With dynamic private area allocation there is no point in keeping
a second mechanism.
Signed-off-by: Oliver Neukum <oneukum@suse.com>
---
drivers/net/usb/aqc111.c | 45 ++++++++++----------
drivers/net/usb/asix.h | 2 +-
drivers/net/usb/asix_common.c | 2 +-
drivers/net/usb/asix_devices.c | 76 +++++++++++++++-------------------
drivers/net/usb/ax88172a.c | 26 ++++--------
drivers/net/usb/ax88179_178a.c | 54 +++++++++++++-----------
drivers/net/usb/cx82310_eth.c | 56 +++++++++++--------------
drivers/net/usb/lg-vl600.c | 15 ++-----
drivers/net/usb/smsc95xx.c | 60 ++++++++++++---------------
include/linux/usb/usbnet.h | 1 -
10 files changed, 149 insertions(+), 188 deletions(-)
diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c
index 0722050dbe32..0ff4ca58fbc5 100644
--- a/drivers/net/usb/aqc111.c
+++ b/drivers/net/usb/aqc111.c
@@ -201,7 +201,7 @@ static void aqc111_get_drvinfo(struct net_device *net,
struct ethtool_drvinfo *info)
{
struct usbnet *dev = netdev_priv(net);
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
/* Inherit standard device info */
usbnet_get_drvinfo(net, info);
@@ -215,7 +215,7 @@ static void aqc111_get_wol(struct net_device *net,
struct ethtool_wolinfo *wolinfo)
{
struct usbnet *dev = netdev_priv(net);
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
wolinfo->supported = WAKE_MAGIC;
wolinfo->wolopts = 0;
@@ -228,7 +228,7 @@ static int aqc111_set_wol(struct net_device *net,
struct ethtool_wolinfo *wolinfo)
{
struct usbnet *dev = netdev_priv(net);
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
if (wolinfo->wolopts & ~WAKE_MAGIC)
return -EINVAL;
@@ -267,7 +267,7 @@ static int aqc111_get_link_ksettings(struct net_device *net,
struct ethtool_link_ksettings *elk)
{
struct usbnet *dev = netdev_priv(net);
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
enum usb_device_speed usb_speed = dev->udev->speed;
u32 speed = SPEED_UNKNOWN;
@@ -320,7 +320,7 @@ static int aqc111_get_link_ksettings(struct net_device *net,
static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed)
{
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
aqc111_data->phy_cfg &= ~AQ_ADV_MASK;
aqc111_data->phy_cfg |= AQ_PAUSE;
@@ -369,7 +369,7 @@ static int aqc111_set_link_ksettings(struct net_device *net,
const struct ethtool_link_ksettings *elk)
{
struct usbnet *dev = netdev_priv(net);
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
enum usb_device_speed usb_speed = dev->udev->speed;
u8 autoneg = elk->base.autoneg;
u32 speed = elk->base.speed;
@@ -529,7 +529,7 @@ static int aqc111_vlan_rx_add_vid(struct net_device *net, __be16 proto, u16 vid)
static void aqc111_set_rx_mode(struct net_device *net)
{
struct usbnet *dev = netdev_priv(net);
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
int mc_count = 0;
mc_count = netdev_mc_count(net);
@@ -567,7 +567,7 @@ static int aqc111_set_features(struct net_device *net,
netdev_features_t features)
{
struct usbnet *dev = netdev_priv(net);
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
netdev_features_t changed = net->features ^ features;
u16 reg16 = 0;
u8 reg8 = 0;
@@ -703,13 +703,6 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf)
return ret;
}
- aqc111_data = kzalloc(sizeof(*aqc111_data), GFP_KERNEL);
- if (!aqc111_data)
- return -ENOMEM;
-
- /* store aqc111_data pointer in device data field */
- dev->driver_priv = aqc111_data;
-
/* Init the MAC address */
ret = aqc111_read_perm_mac(dev);
if (ret)
@@ -746,13 +739,12 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf)
return 0;
out:
- kfree(aqc111_data);
return ret;
}
static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf)
{
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
u16 reg16;
/* Force bz */
@@ -775,7 +767,7 @@ static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf)
static void aqc111_status(struct usbnet *dev, struct urb *urb)
{
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
u64 *event_data = NULL;
int link = 0;
@@ -900,7 +892,7 @@ static void aqc111_configure_csum_offload(struct usbnet *dev)
static int aqc111_link_reset(struct usbnet *dev)
{
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
u16 reg16 = 0;
u8 reg8 = 0;
@@ -989,7 +981,7 @@ static int aqc111_link_reset(struct usbnet *dev)
static int aqc111_reset(struct usbnet *dev)
{
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
u8 reg8 = 0;
dev->rx_urb_size = URB_SIZE;
@@ -1033,7 +1025,7 @@ static int aqc111_reset(struct usbnet *dev)
static int aqc111_stop(struct usbnet *dev)
{
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
u16 reg16 = 0;
aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE,
@@ -1071,7 +1063,7 @@ static void aqc111_rx_checksum(struct sk_buff *skb, u64 pkt_desc)
static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
{
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
struct sk_buff *new_skb = NULL;
u32 pkt_total_offset = 0;
u64 *pkt_desc_ptr = NULL;
@@ -1251,6 +1243,7 @@ static const struct driver_info aqc111_info = {
FLAG_AVOID_UNLINK_URBS | FLAG_MULTI_PACKET,
.rx_fixup = aqc111_rx_fixup,
.tx_fixup = aqc111_tx_fixup,
+ .required_room = sizeof(struct aqc111_data),
};
#define ASIX111_DESC \
@@ -1268,6 +1261,7 @@ static const struct driver_info asix111_info = {
FLAG_AVOID_UNLINK_URBS | FLAG_MULTI_PACKET,
.rx_fixup = aqc111_rx_fixup,
.tx_fixup = aqc111_tx_fixup,
+ .required_room = sizeof(struct aqc111_data),
};
#undef ASIX111_DESC
@@ -1287,6 +1281,7 @@ static const struct driver_info asix112_info = {
FLAG_AVOID_UNLINK_URBS | FLAG_MULTI_PACKET,
.rx_fixup = aqc111_rx_fixup,
.tx_fixup = aqc111_tx_fixup,
+ .required_room = sizeof(struct aqc111_data),
};
#undef ASIX112_DESC
@@ -1303,6 +1298,7 @@ static const struct driver_info trendnet_info = {
FLAG_AVOID_UNLINK_URBS | FLAG_MULTI_PACKET,
.rx_fixup = aqc111_rx_fixup,
.tx_fixup = aqc111_tx_fixup,
+ .required_room = sizeof(struct aqc111_data),
};
static const struct driver_info qnap_info = {
@@ -1317,12 +1313,13 @@ static const struct driver_info qnap_info = {
FLAG_AVOID_UNLINK_URBS | FLAG_MULTI_PACKET,
.rx_fixup = aqc111_rx_fixup,
.tx_fixup = aqc111_tx_fixup,
+ .required_room = sizeof(struct aqc111_data),
};
static int aqc111_suspend(struct usb_interface *intf, pm_message_t message)
{
struct usbnet *dev = usb_get_intfdata(intf);
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
u16 temp_rx_ctrl = 0x00;
u16 reg16;
u8 reg8;
@@ -1418,7 +1415,7 @@ static int aqc111_suspend(struct usb_interface *intf, pm_message_t message)
static int aqc111_resume(struct usb_interface *intf)
{
struct usbnet *dev = usb_get_intfdata(intf);
- struct aqc111_data *aqc111_data = dev->driver_priv;
+ struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->private;
u16 reg16;
u8 reg8;
diff --git a/drivers/net/usb/asix.h b/drivers/net/usb/asix.h
index cf97bc3d388b..9bcfeada7175 100644
--- a/drivers/net/usb/asix.h
+++ b/drivers/net/usb/asix.h
@@ -159,7 +159,6 @@
#define AX_EMBD_PHY_ADDR 0x10
-/* This structure cannot exceed sizeof(unsigned long [5]) AKA 20 bytes */
struct asix_data {
u8 multi_filter[AX_MCAST_FILTER_SIZE];
u8 mac_addr[ETH_ALEN];
@@ -182,6 +181,7 @@ struct asix_common_private {
u16 presvd_phy_advertise;
u16 presvd_phy_bmcr;
struct asix_rx_fixup_info rx_fixup_info;
+ struct asix_data asix_data;
struct mii_bus *mdio;
struct phy_device *phydev;
struct phy_device *phydev_int;
diff --git a/drivers/net/usb/asix_common.c b/drivers/net/usb/asix_common.c
index d97a1920cb6e..f10cdd7dba5e 100644
--- a/drivers/net/usb/asix_common.c
+++ b/drivers/net/usb/asix_common.c
@@ -241,7 +241,7 @@ int asix_rx_fixup_internal(struct usbnet *dev, struct sk_buff *skb,
int asix_rx_fixup_common(struct usbnet *dev, struct sk_buff *skb)
{
- struct asix_common_private *dp = dev->driver_priv;
+ struct asix_common_private *dp = (struct asix_common_private *)dev->private;
struct asix_rx_fixup_info *rx = &dp->rx_fixup_info;
return asix_rx_fixup_internal(dev, skb, rx);
diff --git a/drivers/net/usb/asix_devices.c b/drivers/net/usb/asix_devices.c
index 5100e0b31f1f..e21ed81bc6e4 100644
--- a/drivers/net/usb/asix_devices.c
+++ b/drivers/net/usb/asix_devices.c
@@ -118,7 +118,8 @@ static const struct ethtool_ops ax88172_ethtool_ops = {
static void ax88172_set_multicast(struct net_device *net)
{
struct usbnet *dev = netdev_priv(net);
- struct asix_data *data = (struct asix_data *)&dev->private;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
+ struct asix_data *data = &priv->asix_data;
u8 rx_ctl = 0x8c;
if (net->flags & IFF_PROMISC) {
@@ -129,10 +130,6 @@ static void ax88172_set_multicast(struct net_device *net)
} else if (netdev_mc_empty(net)) {
/* just broadcast and directed */
} else {
- /* We use the 20 byte dev->private
- * for our 8 byte filter buffer
- * to avoid allocating memory that
- * is tricky to free later */
struct netdev_hw_addr *ha;
u32 crc_bits;
@@ -295,7 +292,7 @@ static void ax88772_ethtool_get_pauseparam(struct net_device *ndev,
struct ethtool_pauseparam *pause)
{
struct usbnet *dev = netdev_priv(ndev);
- struct asix_common_private *priv = dev->driver_priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
phylink_ethtool_get_pauseparam(priv->phylink, pause);
}
@@ -304,7 +301,7 @@ static int ax88772_ethtool_set_pauseparam(struct net_device *ndev,
struct ethtool_pauseparam *pause)
{
struct usbnet *dev = netdev_priv(ndev);
- struct asix_common_private *priv = dev->driver_priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
return phylink_ethtool_set_pauseparam(priv->phylink, pause);
}
@@ -331,8 +328,8 @@ static const struct ethtool_ops ax88772_ethtool_ops = {
static int ax88772_reset(struct usbnet *dev)
{
- struct asix_data *data = (struct asix_data *)&dev->private;
- struct asix_common_private *priv = dev->driver_priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
+ struct asix_data *data = &priv->asix_data;
int ret;
/* Rewrite MAC address */
@@ -361,8 +358,8 @@ static int ax88772_reset(struct usbnet *dev)
static int ax88772_hw_reset(struct usbnet *dev, int in_pm)
{
- struct asix_data *data = (struct asix_data *)&dev->private;
- struct asix_common_private *priv = dev->driver_priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
+ struct asix_data *data = &priv->asix_data;
u16 rx_ctl;
int ret;
@@ -455,8 +452,8 @@ static int ax88772_hw_reset(struct usbnet *dev, int in_pm)
static int ax88772a_hw_reset(struct usbnet *dev, int in_pm)
{
- struct asix_data *data = (struct asix_data *)&dev->private;
- struct asix_common_private *priv = dev->driver_priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
+ struct asix_data *data = &priv->asix_data;
u16 rx_ctl, phy14h, phy15h, phy16h;
int ret;
@@ -595,7 +592,7 @@ static const struct net_device_ops ax88772_netdev_ops = {
static void ax88772_suspend(struct usbnet *dev)
{
- struct asix_common_private *priv = dev->driver_priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
u16 medium;
if (netif_running(dev->net)) {
@@ -631,9 +628,9 @@ static void ax88772_suspend(struct usbnet *dev)
static int asix_suspend(struct usb_interface *intf, pm_message_t message)
{
struct usbnet *dev = usb_get_intfdata(intf);
- struct asix_common_private *priv = dev->driver_priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
- if (priv && priv->suspend)
+ if (priv->suspend)
priv->suspend(dev);
return usbnet_suspend(intf, message);
@@ -641,7 +638,7 @@ static int asix_suspend(struct usb_interface *intf, pm_message_t message)
static void ax88772_resume(struct usbnet *dev)
{
- struct asix_common_private *priv = dev->driver_priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
int i;
for (i = 0; i < 3; i++)
@@ -658,7 +655,7 @@ static void ax88772_resume(struct usbnet *dev)
static int asix_resume(struct usb_interface *intf)
{
struct usbnet *dev = usb_get_intfdata(intf);
- struct asix_common_private *priv = dev->driver_priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
if (priv && priv->resume)
priv->resume(dev);
@@ -668,7 +665,7 @@ static int asix_resume(struct usb_interface *intf)
static int ax88772_init_mdio(struct usbnet *dev)
{
- struct asix_common_private *priv = dev->driver_priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
int ret;
priv->mdio = mdiobus_alloc();
@@ -702,7 +699,7 @@ static void ax88772_mdio_unregister(struct asix_common_private *priv)
static int ax88772_init_phy(struct usbnet *dev)
{
- struct asix_common_private *priv = dev->driver_priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
int ret;
priv->phydev = mdiobus_get_phy(priv->mdio, priv->phy_addr);
@@ -796,7 +793,7 @@ static const struct phylink_mac_ops ax88772_phylink_mac_ops = {
static int ax88772_phylink_setup(struct usbnet *dev)
{
- struct asix_common_private *priv = dev->driver_priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
phy_interface_t phy_if_mode;
struct phylink *phylink;
@@ -826,16 +823,10 @@ static int ax88772_phylink_setup(struct usbnet *dev)
static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
{
- struct asix_common_private *priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
u8 buf[ETH_ALEN] = {0};
int ret, i;
- priv = devm_kzalloc(&dev->udev->dev, sizeof(*priv), GFP_KERNEL);
- if (!priv)
- return -ENOMEM;
-
- dev->driver_priv = priv;
-
ret = usbnet_get_endpoints(dev, intf);
if (ret)
return ret;
@@ -943,7 +934,7 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
static int ax88772_stop(struct usbnet *dev)
{
- struct asix_common_private *priv = dev->driver_priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
phylink_stop(priv->phylink);
@@ -952,22 +943,23 @@ static int ax88772_stop(struct usbnet *dev)
static void ax88772_unbind(struct usbnet *dev, struct usb_interface *intf)
{
- struct asix_common_private *priv = dev->driver_priv;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
rtnl_lock();
phylink_disconnect_phy(priv->phylink);
rtnl_unlock();
phylink_destroy(priv->phylink);
ax88772_mdio_unregister(priv);
- asix_rx_fixup_common_free(dev->driver_priv);
+ asix_rx_fixup_common_free(priv);
/* Drop the PM usage ref taken in bind() */
pm_runtime_put(&intf->dev);
}
static void ax88178_unbind(struct usbnet *dev, struct usb_interface *intf)
{
- asix_rx_fixup_common_free(dev->driver_priv);
- kfree(dev->driver_priv);
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
+
+ asix_rx_fixup_common_free(priv);
}
static const struct ethtool_ops ax88178_ethtool_ops = {
@@ -987,7 +979,8 @@ static const struct ethtool_ops ax88178_ethtool_ops = {
static int marvell_phy_init(struct usbnet *dev)
{
- struct asix_data *data = (struct asix_data *)&dev->private;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
+ struct asix_data *data = &priv->asix_data;
u16 reg;
netdev_dbg(dev->net, "marvell_phy_init()\n");
@@ -1018,7 +1011,8 @@ static int marvell_phy_init(struct usbnet *dev)
static int rtl8211cl_phy_init(struct usbnet *dev)
{
- struct asix_data *data = (struct asix_data *)&dev->private;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
+ struct asix_data *data = &priv->asix_data;
netdev_dbg(dev->net, "rtl8211cl_phy_init()\n");
@@ -1065,7 +1059,8 @@ static int marvell_led_status(struct usbnet *dev, u16 speed)
static int ax88178_reset(struct usbnet *dev)
{
- struct asix_data *data = (struct asix_data *)&dev->private;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
+ struct asix_data *data = &priv->asix_data;
int ret;
__le16 eeprom;
u8 status;
@@ -1161,9 +1156,10 @@ static int ax88178_reset(struct usbnet *dev)
static int ax88178_link_reset(struct usbnet *dev)
{
- u16 mode;
+ struct asix_common_private *priv = (struct asix_common_private *)dev->private;
struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET };
- struct asix_data *data = (struct asix_data *)&dev->private;
+ struct asix_data *data = &priv->asix_data;
+ u16 mode;
u32 speed;
netdev_dbg(dev->net, "ax88178_link_reset()\n");
@@ -1314,10 +1310,6 @@ static int ax88178_bind(struct usbnet *dev, struct usb_interface *intf)
dev->rx_urb_size = 2048;
}
- dev->driver_priv = kzalloc(sizeof(struct asix_common_private), GFP_KERNEL);
- if (!dev->driver_priv)
- return -ENOMEM;
-
return 0;
}
diff --git a/drivers/net/usb/ax88172a.c b/drivers/net/usb/ax88172a.c
index 34884805730d..b7f7dd57e4c5 100644
--- a/drivers/net/usb/ax88172a.c
+++ b/drivers/net/usb/ax88172a.c
@@ -30,7 +30,7 @@ static void ax88172a_adjust_link(struct net_device *netdev)
{
struct phy_device *phydev = netdev->phydev;
struct usbnet *dev = netdev_priv(netdev);
- struct ax88172a_private *priv = dev->driver_priv;
+ struct ax88172a_private *priv = (struct ax88172a_private *)dev->private;
u16 mode = 0;
if (phydev->link) {
@@ -60,7 +60,7 @@ static void ax88172a_status(struct usbnet *dev, struct urb *urb)
/* use phylib infrastructure */
static int ax88172a_init_mdio(struct usbnet *dev)
{
- struct ax88172a_private *priv = dev->driver_priv;
+ struct ax88172a_private *priv = (struct ax88172a_private *)dev->private;
int ret;
priv->mdio = mdiobus_alloc();
@@ -93,7 +93,7 @@ static int ax88172a_init_mdio(struct usbnet *dev)
static void ax88172a_remove_mdio(struct usbnet *dev)
{
- struct ax88172a_private *priv = dev->driver_priv;
+ struct ax88172a_private *priv = (struct ax88172a_private *)dev->private;
netdev_info(dev->net, "deregistering mdio bus %s\n", priv->mdio->id);
mdiobus_unregister(priv->mdio);
@@ -159,18 +159,12 @@ static int ax88172a_bind(struct usbnet *dev, struct usb_interface *intf)
{
int ret;
u8 buf[ETH_ALEN];
- struct ax88172a_private *priv;
+ struct ax88172a_private *priv = (struct ax88172a_private *)dev->private;
ret = usbnet_get_endpoints(dev, intf);
if (ret)
return ret;
- priv = kzalloc(sizeof(*priv), GFP_KERNEL);
- if (!priv)
- return -ENOMEM;
-
- dev->driver_priv = priv;
-
/* Get the MAC address */
ret = asix_read_cmd(dev, AX_CMD_READ_NODE_ID, 0, 0, ETH_ALEN, buf, 0);
if (ret < ETH_ALEN) {
@@ -230,13 +224,12 @@ static int ax88172a_bind(struct usbnet *dev, struct usb_interface *intf)
return 0;
free:
- kfree(priv);
return ret;
}
static int ax88172a_stop(struct usbnet *dev)
-{
- struct ax88172a_private *priv = dev->driver_priv;
+ {
+ struct ax88172a_private *priv = (struct ax88172a_private *)dev->private;
netdev_dbg(dev->net, "Stopping interface\n");
@@ -252,16 +245,13 @@ static int ax88172a_stop(struct usbnet *dev)
static void ax88172a_unbind(struct usbnet *dev, struct usb_interface *intf)
{
- struct ax88172a_private *priv = dev->driver_priv;
-
ax88172a_remove_mdio(dev);
- kfree(priv);
}
static int ax88172a_reset(struct usbnet *dev)
{
+ struct ax88172a_private *priv = (struct ax88172a_private *)dev->private;
struct asix_data *data = (struct asix_data *)&dev->private;
- struct ax88172a_private *priv = dev->driver_priv;
int ret;
u16 rx_ctl;
@@ -338,7 +328,7 @@ static int ax88172a_reset(struct usbnet *dev)
static int ax88172a_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
{
- struct ax88172a_private *dp = dev->driver_priv;
+ struct ax88172a_private *dp = (struct ax88172a_private *)dev->private;
struct asix_rx_fixup_info *rx = &dp->rx_fixup_info;
return asix_rx_fixup_internal(dev, skb, rx);
diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c
index df7e3f1c3672..cc88f8faaca1 100644
--- a/drivers/net/usb/ax88179_178a.c
+++ b/drivers/net/usb/ax88179_178a.c
@@ -173,6 +173,7 @@ struct ax88179_data {
u8 in_pm;
u32 wol_supported;
u32 wolopts;
+ u8 m_filter[8];
u8 disconnecting;
};
@@ -192,14 +193,14 @@ static const struct {
static void ax88179_set_pm_mode(struct usbnet *dev, bool pm_mode)
{
- struct ax88179_data *ax179_data = dev->driver_priv;
+ struct ax88179_data *ax179_data = (struct ax88179_data *)dev->private;
ax179_data->in_pm = pm_mode;
}
static int ax88179_in_pm(struct usbnet *dev)
{
- struct ax88179_data *ax179_data = dev->driver_priv;
+ struct ax88179_data *ax179_data = (struct ax88179_data *)dev->private;
return ax179_data->in_pm;
}
@@ -209,7 +210,7 @@ static int __ax88179_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
{
int ret;
int (*fn)(struct usbnet *, u8, u8, u16, u16, void *, u16);
- struct ax88179_data *ax179_data = dev->driver_priv;
+ struct ax88179_data *ax179_data = (struct ax88179_data *)dev->private;
BUG_ON(!dev);
@@ -233,7 +234,7 @@ static int __ax88179_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
{
int ret;
int (*fn)(struct usbnet *, u8, u8, u16, u16, const void *, u16);
- struct ax88179_data *ax179_data = dev->driver_priv;
+ struct ax88179_data *ax179_data = (struct ax88179_data *)dev->private;
BUG_ON(!dev);
@@ -406,7 +407,7 @@ ax88179_phy_write_mmd_indirect(struct usbnet *dev, u16 prtad, u16 devad,
static int ax88179_suspend(struct usb_interface *intf, pm_message_t message)
{
struct usbnet *dev = usb_get_intfdata(intf);
- struct ax88179_data *priv = dev->driver_priv;
+ struct ax88179_data *priv = (struct ax88179_data *)dev->private;
u16 tmp16;
u8 tmp8;
@@ -504,7 +505,7 @@ static void ax88179_disconnect(struct usb_interface *intf)
if (!dev)
return;
- ax179_data = dev->driver_priv;
+ ax179_data = (struct ax88179_data *)dev->private;
ax179_data->disconnecting = 1;
usbnet_disconnect(intf);
@@ -514,7 +515,7 @@ static void
ax88179_get_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
{
struct usbnet *dev = netdev_priv(net);
- struct ax88179_data *priv = dev->driver_priv;
+ struct ax88179_data *priv = (struct ax88179_data *)dev->private;
wolinfo->supported = priv->wol_supported;
wolinfo->wolopts = priv->wolopts;
@@ -524,7 +525,7 @@ static int
ax88179_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
{
struct usbnet *dev = netdev_priv(net);
- struct ax88179_data *priv = dev->driver_priv;
+ struct ax88179_data *priv = (struct ax88179_data *)dev->private;
if (wolinfo->wolopts & ~(priv->wol_supported))
return -EINVAL;
@@ -708,7 +709,7 @@ ax88179_ethtool_set_eee(struct usbnet *dev, struct ethtool_keee *data)
static int ax88179_chk_eee(struct usbnet *dev)
{
struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET };
- struct ax88179_data *priv = dev->driver_priv;
+ struct ax88179_data *priv = (struct ax88179_data *)dev->private;
mii_ethtool_gset(&dev->mii, &ecmd);
@@ -811,7 +812,7 @@ static void ax88179_enable_eee(struct usbnet *dev)
static int ax88179_get_eee(struct net_device *net, struct ethtool_keee *edata)
{
struct usbnet *dev = netdev_priv(net);
- struct ax88179_data *priv = dev->driver_priv;
+ struct ax88179_data *priv = (struct ax88179_data *)dev->private;
edata->eee_enabled = priv->eee_enabled;
edata->eee_active = priv->eee_active;
@@ -822,7 +823,7 @@ static int ax88179_get_eee(struct net_device *net, struct ethtool_keee *edata)
static int ax88179_set_eee(struct net_device *net, struct ethtool_keee *edata)
{
struct usbnet *dev = netdev_priv(net);
- struct ax88179_data *priv = dev->driver_priv;
+ struct ax88179_data *priv = (struct ax88179_data *)dev->private;
int ret;
priv->eee_enabled = edata->eee_enabled;
@@ -867,8 +868,8 @@ static const struct ethtool_ops ax88179_ethtool_ops = {
static void ax88179_set_multicast(struct net_device *net)
{
struct usbnet *dev = netdev_priv(net);
- struct ax88179_data *data = dev->driver_priv;
- u8 *m_filter = ((u8 *)dev->private);
+ struct ax88179_data *data = (struct ax88179_data *)dev->private;
+ u8 *m_filter = data->m_filter;
data->rxctl = (AX_RX_CTL_START | AX_RX_CTL_AB | AX_RX_CTL_IPE);
@@ -1280,19 +1281,12 @@ static void ax88179_get_mac_addr(struct usbnet *dev)
static int ax88179_bind(struct usbnet *dev, struct usb_interface *intf)
{
- struct ax88179_data *ax179_data;
int ret;
ret = usbnet_get_endpoints(dev, intf);
if (ret < 0)
return ret;
- ax179_data = kzalloc(sizeof(*ax179_data), GFP_KERNEL);
- if (!ax179_data)
- return -ENOMEM;
-
- dev->driver_priv = ax179_data;
-
dev->net->netdev_ops = &ax88179_netdev_ops;
dev->net->ethtool_ops = &ax88179_ethtool_ops;
dev->net->needed_headroom = 8;
@@ -1321,7 +1315,6 @@ static int ax88179_bind(struct usbnet *dev, struct usb_interface *intf)
static void ax88179_unbind(struct usbnet *dev, struct usb_interface *intf)
{
- struct ax88179_data *ax179_data = dev->driver_priv;
u16 tmp16;
/* Configure RX control register => stop operation */
@@ -1334,8 +1327,6 @@ static void ax88179_unbind(struct usbnet *dev, struct usb_interface *intf)
/* Power down ethernet PHY */
tmp16 = 0;
ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL, 2, 2, &tmp16);
-
- kfree(ax179_data);
}
static void
@@ -1507,7 +1498,7 @@ ax88179_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags)
static int ax88179_link_reset(struct usbnet *dev)
{
- struct ax88179_data *ax179_data = dev->driver_priv;
+ struct ax88179_data *ax179_data = (struct ax88179_data *)dev->private;
u8 tmp[5], link_sts;
u16 mode, tmp16, delay = HZ / 10;
u32 tmp32 = 0x40000000;
@@ -1585,7 +1576,7 @@ static int ax88179_reset(struct usbnet *dev)
u8 buf[5];
u16 *tmp16;
u8 *tmp;
- struct ax88179_data *ax179_data = dev->driver_priv;
+ struct ax88179_data *ax179_data = (struct ax88179_data *)dev->private;
struct ethtool_keee eee_data;
tmp16 = (u16 *)buf;
@@ -1718,6 +1709,7 @@ static const struct driver_info ax88179_info = {
.flags = FLAG_ETHER | FLAG_FRAMING_AX,
.rx_fixup = ax88179_rx_fixup,
.tx_fixup = ax88179_tx_fixup,
+ .required_room = sizeof(struct ax88179_data),
};
static const struct driver_info ax88178a_info = {
@@ -1731,6 +1723,7 @@ static const struct driver_info ax88178a_info = {
.flags = FLAG_ETHER | FLAG_FRAMING_AX,
.rx_fixup = ax88179_rx_fixup,
.tx_fixup = ax88179_tx_fixup,
+ .required_room = sizeof(struct ax88179_data),
};
static const struct driver_info cypress_GX3_info = {
@@ -1744,6 +1737,7 @@ static const struct driver_info cypress_GX3_info = {
.flags = FLAG_ETHER | FLAG_FRAMING_AX,
.rx_fixup = ax88179_rx_fixup,
.tx_fixup = ax88179_tx_fixup,
+ .required_room = sizeof(struct ax88179_data),
};
static const struct driver_info dlink_dub1312_info = {
@@ -1757,6 +1751,7 @@ static const struct driver_info dlink_dub1312_info = {
.flags = FLAG_ETHER | FLAG_FRAMING_AX,
.rx_fixup = ax88179_rx_fixup,
.tx_fixup = ax88179_tx_fixup,
+ .required_room = sizeof(struct ax88179_data),
};
static const struct driver_info sitecom_info = {
@@ -1770,6 +1765,7 @@ static const struct driver_info sitecom_info = {
.flags = FLAG_ETHER | FLAG_FRAMING_AX,
.rx_fixup = ax88179_rx_fixup,
.tx_fixup = ax88179_tx_fixup,
+ .required_room = sizeof(struct ax88179_data),
};
static const struct driver_info samsung_info = {
@@ -1783,6 +1779,7 @@ static const struct driver_info samsung_info = {
.flags = FLAG_ETHER | FLAG_FRAMING_AX,
.rx_fixup = ax88179_rx_fixup,
.tx_fixup = ax88179_tx_fixup,
+ .required_room = sizeof(struct ax88179_data),
};
static const struct driver_info lenovo_info = {
@@ -1796,6 +1793,7 @@ static const struct driver_info lenovo_info = {
.flags = FLAG_ETHER | FLAG_FRAMING_AX,
.rx_fixup = ax88179_rx_fixup,
.tx_fixup = ax88179_tx_fixup,
+ .required_room = sizeof(struct ax88179_data),
};
static const struct driver_info belkin_info = {
@@ -1809,6 +1807,7 @@ static const struct driver_info belkin_info = {
.flags = FLAG_ETHER | FLAG_FRAMING_AX,
.rx_fixup = ax88179_rx_fixup,
.tx_fixup = ax88179_tx_fixup,
+ .required_room = sizeof(struct ax88179_data),
};
static const struct driver_info toshiba_info = {
@@ -1822,6 +1821,7 @@ static const struct driver_info toshiba_info = {
.flags = FLAG_ETHER | FLAG_FRAMING_AX,
.rx_fixup = ax88179_rx_fixup,
.tx_fixup = ax88179_tx_fixup,
+ .required_room = sizeof(struct ax88179_data),
};
static const struct driver_info mct_info = {
@@ -1835,6 +1835,7 @@ static const struct driver_info mct_info = {
.flags = FLAG_ETHER | FLAG_FRAMING_AX,
.rx_fixup = ax88179_rx_fixup,
.tx_fixup = ax88179_tx_fixup,
+ .required_room = sizeof(struct ax88179_data),
};
static const struct driver_info at_umc2000_info = {
@@ -1848,6 +1849,7 @@ static const struct driver_info at_umc2000_info = {
.flags = FLAG_ETHER | FLAG_FRAMING_AX,
.rx_fixup = ax88179_rx_fixup,
.tx_fixup = ax88179_tx_fixup,
+ .required_room = sizeof(struct ax88179_data),
};
static const struct driver_info at_umc200_info = {
@@ -1861,6 +1863,7 @@ static const struct driver_info at_umc200_info = {
.flags = FLAG_ETHER | FLAG_FRAMING_AX,
.rx_fixup = ax88179_rx_fixup,
.tx_fixup = ax88179_tx_fixup,
+ .required_room = sizeof(struct ax88179_data),
};
static const struct driver_info at_umc2000sp_info = {
@@ -1874,6 +1877,7 @@ static const struct driver_info at_umc2000sp_info = {
.flags = FLAG_ETHER | FLAG_FRAMING_AX,
.rx_fixup = ax88179_rx_fixup,
.tx_fixup = ax88179_tx_fixup,
+ .required_room = sizeof(struct ax88179_data),
};
static const struct usb_device_id products[] = {
diff --git a/drivers/net/usb/cx82310_eth.c b/drivers/net/usb/cx82310_eth.c
index ebbaee0575a8..05ba7c00a943 100644
--- a/drivers/net/usb/cx82310_eth.c
+++ b/drivers/net/usb/cx82310_eth.c
@@ -43,6 +43,10 @@ enum cx82310_status {
struct cx82310_priv {
struct work_struct reenable_work;
struct usbnet *dev;
+
+ unsigned int partial_len; /* length of partial packet data */
+ unsigned int partial_rem; /* remaining (missing) data length */
+ u8 *partial_data; /* partial packet data */
};
/*
@@ -134,10 +138,6 @@ static void cx82310_reenable_work(struct work_struct *work)
cx82310_enable_ethernet(priv->dev);
}
-#define partial_len private[0] /* length of partial packet data */
-#define partial_rem private[1] /* remaining (missing) data length */
-#define partial_data private[2] /* partial packet data */
-
static int cx82310_bind(struct usbnet *dev, struct usb_interface *intf)
{
int ret;
@@ -145,7 +145,7 @@ static int cx82310_bind(struct usbnet *dev, struct usb_interface *intf)
struct usb_device *udev = dev->udev;
u8 link[3];
int timeout = 50;
- struct cx82310_priv *priv;
+ struct cx82310_priv *priv = (struct cx82310_priv*)dev->private;
u8 addr[ETH_ALEN];
/* avoid ADSL modems - continue only if iProduct is "USB NET CARD" */
@@ -169,16 +169,10 @@ static int cx82310_bind(struct usbnet *dev, struct usb_interface *intf)
/* we can receive URBs up to 4KB from the device */
dev->rx_urb_size = 4096;
- dev->partial_data = (unsigned long) kmalloc(dev->hard_mtu, GFP_KERNEL);
- if (!dev->partial_data)
+ priv->partial_data = kmalloc(dev->hard_mtu, GFP_KERNEL);
+ if (!priv->partial_data)
return -ENOMEM;
- priv = kzalloc(sizeof(*priv), GFP_KERNEL);
- if (!priv) {
- ret = -ENOMEM;
- goto err_partial;
- }
- dev->driver_priv = priv;
INIT_WORK(&priv->reenable_work, cx82310_reenable_work);
priv->dev = dev;
@@ -217,19 +211,16 @@ static int cx82310_bind(struct usbnet *dev, struct usb_interface *intf)
return 0;
err:
- kfree(dev->driver_priv);
-err_partial:
- kfree((void *)dev->partial_data);
+ kfree(priv->partial_data);
return ret;
}
static void cx82310_unbind(struct usbnet *dev, struct usb_interface *intf)
{
- struct cx82310_priv *priv = dev->driver_priv;
+ struct cx82310_priv *priv = (struct cx82310_priv*)dev->private;
- kfree((void *)dev->partial_data);
+ kfree(priv->partial_data);
cancel_work_sync(&priv->reenable_work);
- kfree(dev->driver_priv);
}
/*
@@ -244,25 +235,25 @@ static int cx82310_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
{
int len;
struct sk_buff *skb2;
- struct cx82310_priv *priv = dev->driver_priv;
+ struct cx82310_priv *priv = (struct cx82310_priv*)dev->private;
/*
* If the last skb ended with an incomplete packet, this skb contains
* end of that packet at the beginning.
*/
- if (dev->partial_rem) {
- len = dev->partial_len + dev->partial_rem;
+ if (priv->partial_rem) {
+ len = priv->partial_len + priv->partial_rem;
skb2 = alloc_skb(len, GFP_ATOMIC);
if (!skb2)
return 0;
skb_put(skb2, len);
- memcpy(skb2->data, (void *)dev->partial_data,
- dev->partial_len);
- memcpy(skb2->data + dev->partial_len, skb->data,
- dev->partial_rem);
+ memcpy(skb2->data, (void *)priv->partial_data,
+ priv->partial_len);
+ memcpy(skb2->data + priv->partial_len, skb->data,
+ priv->partial_rem);
usbnet_skb_return(dev, skb2);
- skb_pull(skb, (dev->partial_rem + 1) & ~1);
- dev->partial_rem = 0;
+ skb_pull(skb, (priv->partial_rem + 1) & ~1);
+ priv->partial_rem = 0;
if (skb->len < 2)
return 1;
}
@@ -289,10 +280,10 @@ static int cx82310_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
/* incomplete packet, save it for the next skb */
if (len > skb->len) {
- dev->partial_len = skb->len;
- dev->partial_rem = len - skb->len;
- memcpy((void *)dev->partial_data, skb->data,
- dev->partial_len);
+ priv->partial_len = skb->len;
+ priv->partial_rem = len - skb->len;
+ memcpy((void *)priv->partial_data, skb->data,
+ priv->partial_len);
skb_pull(skb, skb->len);
break;
}
@@ -338,6 +329,7 @@ static const struct driver_info cx82310_info = {
.unbind = cx82310_unbind,
.rx_fixup = cx82310_rx_fixup,
.tx_fixup = cx82310_tx_fixup,
+ .required_room = sizeof(struct cx82310_priv),
};
#define USB_DEVICE_CLASS(vend, prod, cl, sc, pr) \
diff --git a/drivers/net/usb/lg-vl600.c b/drivers/net/usb/lg-vl600.c
index b2495fa80171..ed6dff959245 100644
--- a/drivers/net/usb/lg-vl600.c
+++ b/drivers/net/usb/lg-vl600.c
@@ -56,18 +56,10 @@ struct vl600_state {
static int vl600_bind(struct usbnet *dev, struct usb_interface *intf)
{
int ret;
- struct vl600_state *s = kzalloc(sizeof(struct vl600_state), GFP_KERNEL);
-
- if (!s)
- return -ENOMEM;
ret = usbnet_cdc_bind(dev, intf);
- if (ret) {
- kfree(s);
+ if (ret)
return ret;
- }
-
- dev->driver_priv = s;
/* ARP packets don't go through, but they're also of no use. The
* subnet has only two hosts anyway: us and the gateway / DHCP
@@ -85,7 +77,7 @@ static int vl600_bind(struct usbnet *dev, struct usb_interface *intf)
static void vl600_unbind(struct usbnet *dev, struct usb_interface *intf)
{
- struct vl600_state *s = dev->driver_priv;
+ struct vl600_state *s = (struct vl600_state *)dev->private;
dev_kfree_skb(s->current_rx_buf);
kfree(s);
@@ -101,7 +93,7 @@ static int vl600_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
int packet_len, count;
struct sk_buff *buf = skb;
struct sk_buff *clone;
- struct vl600_state *s = dev->driver_priv;
+ struct vl600_state *s = (struct vl600_state *)dev->private;
/* Frame lengths are generally 4B multiplies but every couple of
* hours there's an odd number of bytes sized yet correct frame,
@@ -306,6 +298,7 @@ static const struct driver_info vl600_info = {
.status = usbnet_cdc_status,
.rx_fixup = vl600_rx_fixup,
.tx_fixup = vl600_tx_fixup,
+ .required_room = sizeof(struct vl600_state),
};
static const struct usb_device_id products[] = {
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index 7ecf98d97493..a99d4363fd3f 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -84,7 +84,7 @@ MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");
static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,
u32 *data)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
u32 buf;
int ret;
int (*fn)(struct usbnet *, u8, u8, u16, u16, void *, u16);
@@ -115,7 +115,7 @@ static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,
static int __must_check smsc95xx_write_reg(struct usbnet *dev, u32 index,
u32 data)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
u32 buf;
int ret;
int (*fn)(struct usbnet *, u8, u8, u16, u16, const void *, u16);
@@ -265,7 +265,7 @@ static int smsc95xx_mdiobus_reset(struct mii_bus *bus)
int ret;
dev = bus->priv;
- pdata = dev->driver_priv;
+ pdata = (struct smsc95xx_priv *)dev->private;
if (pdata->is_internal_phy)
return 0;
@@ -481,7 +481,7 @@ static unsigned int smsc95xx_hash(char addr[ETH_ALEN])
static void smsc95xx_set_multicast(struct net_device *netdev)
{
struct usbnet *dev = netdev_priv(netdev);
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
unsigned long flags;
int ret;
@@ -539,7 +539,7 @@ static void smsc95xx_set_multicast(struct net_device *netdev)
static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
u32 flow = 0, afc_cfg;
int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg);
@@ -584,7 +584,7 @@ static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev)
static void smsc95xx_mac_update_fullduplex(struct usbnet *dev)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
unsigned long flags;
int ret;
@@ -613,7 +613,7 @@ static void smsc95xx_mac_update_fullduplex(struct usbnet *dev)
static void smsc95xx_status(struct usbnet *dev, struct urb *urb)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
unsigned long flags;
u32 intdata;
@@ -730,7 +730,7 @@ static void smsc95xx_ethtool_get_wol(struct net_device *net,
struct ethtool_wolinfo *wolinfo)
{
struct usbnet *dev = netdev_priv(net);
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
wolinfo->supported = SUPPORTED_WAKE;
wolinfo->wolopts = pdata->wolopts;
@@ -740,7 +740,7 @@ static int smsc95xx_ethtool_set_wol(struct net_device *net,
struct ethtool_wolinfo *wolinfo)
{
struct usbnet *dev = netdev_priv(net);
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
int ret;
if (wolinfo->wolopts & ~SUPPORTED_WAKE)
@@ -788,7 +788,7 @@ static void smsc95xx_get_pauseparam(struct net_device *ndev,
struct usbnet *dev;
dev = netdev_priv(ndev);
- pdata = dev->driver_priv;
+ pdata = (struct smsc95xx_priv *)dev->private;
pause->autoneg = pdata->pause_autoneg;
pause->rx_pause = pdata->pause_rx;
@@ -804,7 +804,7 @@ static int smsc95xx_set_pauseparam(struct net_device *ndev,
struct usbnet *dev;
dev = netdev_priv(ndev);
- pdata = dev->driver_priv;
+ pdata = (struct smsc95xx_priv *)dev->private;
phydev = ndev->phydev;
if (!phydev)
@@ -898,7 +898,7 @@ static int smsc95xx_set_mac_address(struct usbnet *dev)
/* starts the TX path */
static int smsc95xx_start_tx_path(struct usbnet *dev)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
unsigned long flags;
int ret;
@@ -918,7 +918,7 @@ static int smsc95xx_start_tx_path(struct usbnet *dev)
/* Starts the Receive path */
static int smsc95xx_start_rx_path(struct usbnet *dev)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
unsigned long flags;
spin_lock_irqsave(&pdata->mac_cr_lock, flags);
@@ -930,7 +930,7 @@ static int smsc95xx_start_rx_path(struct usbnet *dev)
static int smsc95xx_reset(struct usbnet *dev)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
u32 read_buf, burst_cap;
int ret = 0, timeout;
@@ -1146,7 +1146,7 @@ static void smsc95xx_handle_link_change(struct net_device *net)
static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
{
- struct smsc95xx_priv *pdata;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
char usb_path[64];
int ret, phy_irq;
u32 val;
@@ -1157,12 +1157,6 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
return ret;
}
- pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
- if (!pdata)
- return -ENOMEM;
-
- dev->driver_priv = pdata;
-
spin_lock_init(&pdata->mac_cr_lock);
/* LAN95xx devices do not alter the computed checksum of 0 to 0xffff.
@@ -1316,7 +1310,7 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface *intf)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
phy_disconnect(dev->net->phydev);
mdiobus_unregister(pdata->mdiobus);
@@ -1325,7 +1319,6 @@ static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface *intf)
irq_domain_remove(pdata->irqdomain);
irq_domain_free_fwnode(pdata->irqfwnode);
netif_dbg(dev, ifdown, dev->net, "free pdata\n");
- kfree(pdata);
}
static int smsc95xx_start_phy(struct usbnet *dev)
@@ -1350,7 +1343,7 @@ static u32 smsc_crc(const u8 *buffer, size_t len, int filter)
static int smsc95xx_link_ok(struct usbnet *dev)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
int ret;
/* first, a dummy read, needed to latch some MII phys */
@@ -1367,7 +1360,7 @@ static int smsc95xx_link_ok(struct usbnet *dev)
static int smsc95xx_enter_suspend0(struct usbnet *dev)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
u32 val;
int ret;
@@ -1406,7 +1399,7 @@ static int smsc95xx_enter_suspend0(struct usbnet *dev)
static int smsc95xx_enter_suspend1(struct usbnet *dev)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
int ret, phy_id = pdata->phydev->mdio.addr;
u32 val;
@@ -1453,7 +1446,7 @@ static int smsc95xx_enter_suspend1(struct usbnet *dev)
static int smsc95xx_enter_suspend2(struct usbnet *dev)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
u32 val;
int ret;
@@ -1475,7 +1468,7 @@ static int smsc95xx_enter_suspend2(struct usbnet *dev)
static int smsc95xx_enter_suspend3(struct usbnet *dev)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
u32 val;
int ret;
@@ -1514,7 +1507,7 @@ static int smsc95xx_enter_suspend3(struct usbnet *dev)
static int smsc95xx_autosuspend(struct usbnet *dev, u32 link_up)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
if (!netif_running(dev->net)) {
/* interface is ifconfig down so fully power down hw */
@@ -1544,7 +1537,7 @@ static int smsc95xx_autosuspend(struct usbnet *dev, u32 link_up)
static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
{
struct usbnet *dev = usb_get_intfdata(intf);
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
u32 val, link_up;
int ret;
@@ -1805,7 +1798,7 @@ static int smsc95xx_resume(struct usb_interface *intf)
u32 val;
BUG_ON(!dev);
- pdata = dev->driver_priv;
+ pdata = (struct smsc95xx_priv *)dev->private;
suspend_flags = pdata->suspend_flags;
netdev_dbg(dev->net, "resume suspend_flags=0x%02x\n", suspend_flags);
@@ -1854,7 +1847,7 @@ static int smsc95xx_resume(struct usb_interface *intf)
static int smsc95xx_reset_resume(struct usb_interface *intf)
{
struct usbnet *dev = usb_get_intfdata(intf);
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
int ret;
pdata->pm_task = current;
@@ -2038,7 +2031,7 @@ static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev,
static int smsc95xx_manage_power(struct usbnet *dev, int on)
{
- struct smsc95xx_priv *pdata = dev->driver_priv;
+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)dev->private;
dev->intf->needs_remote_wakeup = on;
@@ -2068,6 +2061,7 @@ static const struct driver_info smsc95xx_info = {
.status = smsc95xx_status,
.manage_power = smsc95xx_manage_power,
.flags = FLAG_ETHER | FLAG_SEND_ZLP | FLAG_LINK_INTR,
+ .required_room = sizeof(struct smsc95xx_priv),
};
static const struct usb_device_id products[] = {
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
index ba45a3e2be6a..ec90a12eb26c 100644
--- a/include/linux/usb/usbnet.h
+++ b/include/linux/usb/usbnet.h
@@ -35,7 +35,6 @@ struct usbnet {
struct usb_interface *intf;
const struct driver_info *driver_info;
const char *driver_name;
- void *driver_priv;
wait_queue_head_t wait;
struct mutex phy_mutex;
unsigned char suspend_count;
--
2.53.0
prev parent reply other threads:[~2026-02-10 15:14 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-10 15:11 [RFC net-next 0/3] cleanup of usbnet descriptor allocation Oliver Neukum
2026-02-10 15:11 ` [RFC net-next 1/3] net: usb: divorce private data and cdc state in usbnet Oliver Neukum
2026-02-10 16:27 ` Bjørn Mork
2026-02-10 17:11 ` Oliver Neukum
2026-02-17 18:23 ` Andrew Lunn
2026-02-18 9:53 ` Oliver Neukum
2026-02-17 18:31 ` Andrew Lunn
2026-02-10 15:11 ` [RFC net-next 2/3] net: usb: usbnet: switch to dynamic allocation of private data Oliver Neukum
2026-02-17 18:47 ` Andrew Lunn
2026-02-18 10:06 ` Oliver Neukum
2026-02-18 14:01 ` Andrew Lunn
2026-02-19 9:07 ` Oliver Neukum
2026-02-10 15:11 ` Oliver Neukum [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260210151416.42254-4-oneukum@suse.com \
--to=oneukum@suse.com \
--cc=bjorn@mork.no \
--cc=hayeswang@realtek.com \
--cc=netdev@vger.kernel.org \
--cc=o.rempel@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox