diff options
author | Subash Abhinov Kasiviswanathan <subashab@codeaurora.org> | 2019-09-26 11:57:08 -0700 |
---|---|---|
committer | Subash Abhinov Kasiviswanathan <subashab@codeaurora.org> | 2019-10-01 10:23:57 -0700 |
commit | c614b36db9e0ad44bee743cd73d5e88f2a983243 (patch) | |
tree | 93c0fa8b6570651724b4a69d5251e8bfe975ce38 /drivers/rmnet/shs/rmnet_shs_wq.c | |
parent | 7d824227d4cb1c0cc433c8d78bfe5d07a33e9bc6 (diff) | |
download | data-kernel-c614b36db9e0ad44bee743cd73d5e88f2a983243.tar.gz |
drivers: rmnet_shs: Change rmnet_port init
Rmnet_port was being collected previously from
the first saved instance of a phy_dev into a temporary variable.
This could cause issue if the phy_dev was incorrectly made.
This change causes the phy_dev to be collected at the time of
initialization when the 1st rmnet is brought up.
<6> Unable to handle kernel paging request at virtual address 6b6b6b6b6b6b6b
<6> Mem abort info:
<6> Exception class = DABT (current EL), IL = 32 bits
<6> SET = 0, FnV = 0
<6> EA = 0, S1PTW = 0
<6> FSC = 4
<6> Data abort info:
<6> ISV = 0, ISS = 0x00000004
<6> CM = 0, WnR = 0
<6> [006b6b6b6b6b6b6b] address between user and kernel address ranges
<6> Internal error: Oops: 96000004 [#1] PREEMPT SMP
<2> Call trace:
<2> rmnet_map_dl_ind_deregister+0x3c/0x84
<2> rmnet_shs_exit+0x40/0x74 [rmnet_shs]
<2> rmnet_shs_dev_notify_cb+0x100/0x48c [rmnet_shs]
<2> notifier_call_chain+0x8c/0xd0
<2> raw_notifier_call_chain+0x38/0x48
<2> call_netdevice_notifiers_info+0x40/0x70
<2> __dev_close_many+0x64/0x108
<2> dev_close_many+0x88/0x138
<2> rollback_registered_many+0x138/0x434
<2> rollback_registered+0x5c/0xa0
<2> unregister_netdevice_queue+0x94/0xac
<2> unregister_netdev+0x24/0x34
Change-Id: Idc2b3059cbcb9c1ccb1091c630d27bdcdc0e894d
Acked-by: Raul Martinez <mraul@qti.qualcomm.com>
Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org
Diffstat (limited to 'drivers/rmnet/shs/rmnet_shs_wq.c')
-rw-r--r-- | drivers/rmnet/shs/rmnet_shs_wq.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/rmnet/shs/rmnet_shs_wq.c b/drivers/rmnet/shs/rmnet_shs_wq.c index 19a78c9..31bcaca 100644 --- a/drivers/rmnet/shs/rmnet_shs_wq.c +++ b/drivers/rmnet/shs/rmnet_shs_wq.c @@ -1258,7 +1258,13 @@ void rmnet_shs_wq_update_ep_rps_msk(struct rmnet_shs_wq_ep_s *ep) } rcu_read_lock(); + if (!ep->ep || !ep->ep->egress_dev) { + pr_info(" rmnet_shs invalid state %p", ep->ep); + rmnet_shs_crit_err[RMNET_SHS_WQ_EP_ACCESS_ERR]++; + return; + } map = rcu_dereference(ep->ep->egress_dev->_rx->rps_map); + ep->rps_config_msk = 0; if (map != NULL) { for (len = 0; len < map->len; len++) |