On 2011-01-10 13:14, David Brownell wrote:
quoted
I have just retested Michals patch but I have found another
lockdep failure.
It looks like rndis_msg_parser() can call dev_get_stats> too:
Can someone provide a fully working patch then?
Or maybe just revert the one that caused all the
breakage??
Rememeber that this driver was working fine for
years before netdev changes added multiple bugs
because (at least) they didn't update all callers.
Maybe I miss something, but if it's like Michal described something
like this should be enough (not tested nor compiled).
Jarek P.
---
drivers/usb/gadget/f_phonet.c | 6 ++++++
drivers/usb/gadget/u_ether.c | 6 ++++++
2 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/drivers/usb/gadget/f_phonet.c b/drivers/usb/gadget/f_phonet.c
index 3c6e1a0..bef4622 100644
--- a/drivers/usb/gadget/f_phonet.c
+++ b/drivers/usb/gadget/f_phonet.c
@@ -207,6 +207,11 @@ static int pn_net_close(struct net_device *dev)
return 0;
}
+static struct net_device_stats *pn_net_stats(struct net_device *dev)
+{
+ return &dev->stats;
+}
+
static void pn_tx_complete(struct usb_ep *ep, struct usb_request *req)
{
struct f_phonet *fp = ep->driver_data;@@ -279,6 +284,7 @@ static int pn_net_mtu(struct net_device *dev, int new_mtu)
static const struct net_device_ops pn_netdev_ops = {
.ndo_open = pn_net_open,
.ndo_stop = pn_net_close,
+ .ndo_get_stats = pn_net_stats,
.ndo_start_xmit = pn_net_xmit,
.ndo_change_mtu = pn_net_mtu,
};diff --git a/drivers/usb/gadget/u_ether.c b/drivers/usb/gadget/u_ether.c
index 1eda968..f21520f 100644
--- a/drivers/usb/gadget/u_ether.c
+++ b/drivers/usb/gadget/u_ether.c
@@ -702,6 +702,11 @@ static int eth_stop(struct net_device *net)
return 0;
}
+static struct net_device_stats *eth_get_stats(struct net_device *net)
+{
+ return &net->stats;
+}
+
/*-------------------------------------------------------------------------*/
/* initial value, changed by "ifconfig usb0 hw ether xx:xx:xx:xx:xx:xx" */@@ -740,6 +745,7 @@ static struct eth_dev *the_dev;
static const struct net_device_ops eth_netdev_ops = {
.ndo_open = eth_open,
.ndo_stop = eth_stop,
+ .ndo_get_stats = eth_get_stats,
.ndo_start_xmit = eth_start_xmit,
.ndo_change_mtu = ueth_change_mtu,
.ndo_set_mac_address = eth_mac_addr,