linux/drivers/net/ethernet/qualcomm/rmnet
Subash Abhinov Kasiviswanathan b37f78f234 net: qualcomm: rmnet: Fix crash on real dev unregistration
With CONFIG_DEBUG_PREEMPT enabled, a crash with the following call
stack was observed when removing a real dev which had rmnet devices
attached to it.
To fix this, remove the netdev_upper link APIs and instead use the
existing information in rmnet_port and rmnet_priv to get the
association between real and rmnet devs.

BUG: sleeping function called from invalid context
in_atomic(): 0, irqs_disabled(): 0, pid: 5762, name: ip
Preemption disabled at:
[<ffffff9d49043564>] debug_object_active_state+0xa4/0x16c
Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
Modules linked in:
PC is at ___might_sleep+0x13c/0x180
LR is at ___might_sleep+0x17c/0x180
[<ffffff9d48ce0924>] ___might_sleep+0x13c/0x180
[<ffffff9d48ce09c0>] __might_sleep+0x58/0x8c
[<ffffff9d49d6253c>] mutex_lock+0x2c/0x48
[<ffffff9d48ed4840>] kernfs_remove_by_name_ns+0x48/0xa8
[<ffffff9d48ed6ec8>] sysfs_remove_link+0x30/0x58
[<ffffff9d49b05840>] __netdev_adjacent_dev_remove+0x14c/0x1e0
[<ffffff9d49b05914>] __netdev_adjacent_dev_unlink_lists+0x40/0x68
[<ffffff9d49b08820>] netdev_upper_dev_unlink+0xb4/0x1fc
[<ffffff9d494a29f0>] rmnet_dev_walk_unreg+0x6c/0xc8
[<ffffff9d49b00b40>] netdev_walk_all_lower_dev_rcu+0x58/0xb4
[<ffffff9d494a30fc>] rmnet_config_notify_cb+0xf4/0x134
[<ffffff9d48cd21b4>] raw_notifier_call_chain+0x58/0x78
[<ffffff9d49b028a4>] call_netdevice_notifiers_info+0x48/0x78
[<ffffff9d49b0b568>] rollback_registered_many+0x230/0x3c8
[<ffffff9d49b0b738>] unregister_netdevice_many+0x38/0x94
[<ffffff9d49b1e110>] rtnl_delete_link+0x58/0x88
[<ffffff9d49b201dc>] rtnl_dellink+0xbc/0x1cc
[<ffffff9d49b2355c>] rtnetlink_rcv_msg+0xb0/0x244
[<ffffff9d49b5230c>] netlink_rcv_skb+0xb4/0xdc
[<ffffff9d49b204f4>] rtnetlink_rcv+0x34/0x44
[<ffffff9d49b51af0>] netlink_unicast+0x1ec/0x294
[<ffffff9d49b51fdc>] netlink_sendmsg+0x320/0x390
[<ffffff9d49ae6858>] sock_sendmsg+0x54/0x60
[<ffffff9d49ae6f94>] ___sys_sendmsg+0x298/0x2b0
[<ffffff9d49ae98f8>] SyS_sendmsg+0xb4/0xf0
[<ffffff9d48c83770>] el0_svc_naked+0x24/0x28

Fixes: ceed73a2cf ("drivers: net: ethernet: qualcomm: rmnet: Initial implementation")
Fixes: 60d58f971c ("net: qualcomm: rmnet: Implement bridge mode")
Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2018-02-19 11:17:33 -05:00
..
Kconfig net: qualcomm: rmnet: Add support for GRO 2017-10-28 00:10:23 +09:00
Makefile
rmnet_config.c net: qualcomm: rmnet: Fix crash on real dev unregistration 2018-02-19 11:17:33 -05:00
rmnet_config.h net: qualcomm: rmnet: Rename ingress data format to data format 2018-01-08 13:58:49 -05:00
rmnet_handlers.c net: qualcomm: rmnet: Add support for TX checksum offload 2018-01-08 13:58:49 -05:00
rmnet_handlers.h net: qualcomm: rmnet: Remove duplicate setting of rmnet private info 2017-10-11 20:05:30 -07:00
rmnet_map_command.c net: qualcomm: rmnet: Handle command packets with checksum trailer 2018-01-08 13:58:49 -05:00
rmnet_map_data.c net: qualcomm: rmnet: Add support for TX checksum offload 2018-01-08 13:58:49 -05:00
rmnet_map.h net: qualcomm: rmnet: Add support for TX checksum offload 2018-01-08 13:58:49 -05:00
rmnet_private.h net: qualcomm: rmnet: Define the MAPv4 packet formats 2018-01-08 13:58:49 -05:00
rmnet_vnd.c net: qualcomm: rmnet: Add support for GSO 2018-01-08 13:58:50 -05:00
rmnet_vnd.h net: qualcomm: rmnet: Convert the muxed endpoint to hlist 2017-10-11 20:05:30 -07:00