Loading drivers/rmnet/shs/rmnet_shs.h +2 −2 Original line number Diff line number Diff line Loading @@ -299,7 +299,7 @@ extern int (*rmnet_shs_skb_entry)(struct sk_buff *skb, int rmnet_shs_is_lpwr_cpu(u16 cpu); void rmnet_shs_cancel_table(void); void rmnet_shs_rx_wq_init(void); void rmnet_shs_rx_wq_exit(void); unsigned int rmnet_shs_rx_wq_exit(void); int rmnet_shs_get_mask_len(u8 mask); int rmnet_shs_chk_and_flush_node(struct rmnet_shs_skbn_s *node, Loading @@ -314,7 +314,7 @@ void rmnet_shs_assign(struct sk_buff *skb, struct rmnet_port *port); void rmnet_shs_flush_table(u8 is_force_flush, u8 ctxt); void rmnet_shs_cpu_node_remove(struct rmnet_shs_skbn_s *node); void rmnet_shs_init(struct net_device *dev, struct net_device *vnd); void rmnet_shs_exit(void); void rmnet_shs_exit(unsigned int cpu_switch); void rmnet_shs_ps_on_hdlr(void *port); void rmnet_shs_ps_off_hdlr(void *port); void rmnet_shs_update_cpu_proc_q_all_cpus(void); Loading drivers/rmnet/shs/rmnet_shs_config.c +4 −2 Original line number Diff line number Diff line Loading @@ -99,14 +99,16 @@ static int rmnet_shs_dev_notify_cb(struct notifier_block *nb, * phy_dev is going down. */ if (!rmnet_vnd_total && rmnet_shs_cfg.rmnet_shs_init_complete) { unsigned int cpu_switch; pr_info("rmnet_shs deinit %s going down ", dev->name); RCU_INIT_POINTER(rmnet_shs_skb_entry, NULL); qmi_rmnet_ps_ind_deregister(rmnet_shs_cfg.port, &rmnet_shs_cfg.rmnet_idl_ind_cb); rmnet_shs_cancel_table(); rmnet_shs_rx_wq_exit(); cpu_switch = rmnet_shs_rx_wq_exit(); rmnet_shs_wq_exit(); rmnet_shs_exit(); rmnet_shs_exit(cpu_switch); trace_rmnet_shs_high(RMNET_SHS_MODULE, RMNET_SHS_MODULE_INIT_WQ, 0xDEF, 0xDEF, 0xDEF, Loading drivers/rmnet/shs/rmnet_shs_main.c +15 −4 Original line number Diff line number Diff line Loading @@ -1359,14 +1359,25 @@ void rmnet_shs_rx_wq_init(void) INIT_WORK(&shs_rx_work.work, rmnet_flush_buffered); } void rmnet_shs_rx_wq_exit(void) unsigned int rmnet_shs_rx_wq_exit(void) { unsigned int cpu_switch = rmnet_shs_inst_rate_switch; int i; for (i = 0; i < MAX_CPUS; i++) /* Disable any further core_flush timer starts untill cleanup * is complete. */ rmnet_shs_inst_rate_switch = 0; for (i = 0; i < MAX_CPUS; i++) { hrtimer_cancel(&GET_CTIMER(i)); cancel_work_sync(&rmnet_shs_cfg.core_flush[i].work); } cancel_work_sync(&shs_rx_work.work); return cpu_switch; } void rmnet_shs_ps_on_hdlr(void *port) Loading Loading @@ -1724,7 +1735,7 @@ void rmnet_shs_assign(struct sk_buff *skb, struct rmnet_port *port) /* Cancels the flushing timer if it has been armed * Deregisters DL marker indications */ void rmnet_shs_exit(void) void rmnet_shs_exit(unsigned int cpu_switch) { rmnet_shs_freq_exit(); rmnet_shs_cfg.dl_mrk_ind_cb.dl_hdr_handler = NULL; Loading @@ -1738,5 +1749,5 @@ void rmnet_shs_exit(void) memset(&rmnet_shs_cfg, 0, sizeof(rmnet_shs_cfg)); rmnet_shs_cfg.port = NULL; rmnet_shs_cfg.rmnet_shs_init_complete = 0; rmnet_shs_inst_rate_switch = cpu_switch; } Loading
drivers/rmnet/shs/rmnet_shs.h +2 −2 Original line number Diff line number Diff line Loading @@ -299,7 +299,7 @@ extern int (*rmnet_shs_skb_entry)(struct sk_buff *skb, int rmnet_shs_is_lpwr_cpu(u16 cpu); void rmnet_shs_cancel_table(void); void rmnet_shs_rx_wq_init(void); void rmnet_shs_rx_wq_exit(void); unsigned int rmnet_shs_rx_wq_exit(void); int rmnet_shs_get_mask_len(u8 mask); int rmnet_shs_chk_and_flush_node(struct rmnet_shs_skbn_s *node, Loading @@ -314,7 +314,7 @@ void rmnet_shs_assign(struct sk_buff *skb, struct rmnet_port *port); void rmnet_shs_flush_table(u8 is_force_flush, u8 ctxt); void rmnet_shs_cpu_node_remove(struct rmnet_shs_skbn_s *node); void rmnet_shs_init(struct net_device *dev, struct net_device *vnd); void rmnet_shs_exit(void); void rmnet_shs_exit(unsigned int cpu_switch); void rmnet_shs_ps_on_hdlr(void *port); void rmnet_shs_ps_off_hdlr(void *port); void rmnet_shs_update_cpu_proc_q_all_cpus(void); Loading
drivers/rmnet/shs/rmnet_shs_config.c +4 −2 Original line number Diff line number Diff line Loading @@ -99,14 +99,16 @@ static int rmnet_shs_dev_notify_cb(struct notifier_block *nb, * phy_dev is going down. */ if (!rmnet_vnd_total && rmnet_shs_cfg.rmnet_shs_init_complete) { unsigned int cpu_switch; pr_info("rmnet_shs deinit %s going down ", dev->name); RCU_INIT_POINTER(rmnet_shs_skb_entry, NULL); qmi_rmnet_ps_ind_deregister(rmnet_shs_cfg.port, &rmnet_shs_cfg.rmnet_idl_ind_cb); rmnet_shs_cancel_table(); rmnet_shs_rx_wq_exit(); cpu_switch = rmnet_shs_rx_wq_exit(); rmnet_shs_wq_exit(); rmnet_shs_exit(); rmnet_shs_exit(cpu_switch); trace_rmnet_shs_high(RMNET_SHS_MODULE, RMNET_SHS_MODULE_INIT_WQ, 0xDEF, 0xDEF, 0xDEF, Loading
drivers/rmnet/shs/rmnet_shs_main.c +15 −4 Original line number Diff line number Diff line Loading @@ -1359,14 +1359,25 @@ void rmnet_shs_rx_wq_init(void) INIT_WORK(&shs_rx_work.work, rmnet_flush_buffered); } void rmnet_shs_rx_wq_exit(void) unsigned int rmnet_shs_rx_wq_exit(void) { unsigned int cpu_switch = rmnet_shs_inst_rate_switch; int i; for (i = 0; i < MAX_CPUS; i++) /* Disable any further core_flush timer starts untill cleanup * is complete. */ rmnet_shs_inst_rate_switch = 0; for (i = 0; i < MAX_CPUS; i++) { hrtimer_cancel(&GET_CTIMER(i)); cancel_work_sync(&rmnet_shs_cfg.core_flush[i].work); } cancel_work_sync(&shs_rx_work.work); return cpu_switch; } void rmnet_shs_ps_on_hdlr(void *port) Loading Loading @@ -1724,7 +1735,7 @@ void rmnet_shs_assign(struct sk_buff *skb, struct rmnet_port *port) /* Cancels the flushing timer if it has been armed * Deregisters DL marker indications */ void rmnet_shs_exit(void) void rmnet_shs_exit(unsigned int cpu_switch) { rmnet_shs_freq_exit(); rmnet_shs_cfg.dl_mrk_ind_cb.dl_hdr_handler = NULL; Loading @@ -1738,5 +1749,5 @@ void rmnet_shs_exit(void) memset(&rmnet_shs_cfg, 0, sizeof(rmnet_shs_cfg)); rmnet_shs_cfg.port = NULL; rmnet_shs_cfg.rmnet_shs_init_complete = 0; rmnet_shs_inst_rate_switch = cpu_switch; }