int wlan_logging_sock_deactivate_svc(void) { unsigned long irq_flag; if (!gplog_msg) return 0; nl_srv_unregister(ANI_NL_MSG_LOG, wlan_logging_proc_sock_rx_msg); clear_default_logtoapp_log_level(); gapp_pid = INVALID_PID; gwlan_logging.exit = true; INIT_COMPLETION(gwlan_logging.shutdown_comp); wake_up_interruptible(&gwlan_logging.wait_queue); wait_for_completion_interruptible(&gwlan_logging.shutdown_comp); spin_lock_irqsave(&gwlan_logging.spin_lock, irq_flag); vfree(gplog_msg); gwlan_logging.pcur_node = NULL; spin_unlock_irqrestore(&gwlan_logging.spin_lock, irq_flag); pr_info("%s: Deactivate wlan_logging svc\n", __func__); return 0; }
int wlan_logging_sock_deactivate_svc(void) { unsigned long irq_flag; if (!gplog_msg) return 0; nl_srv_unregister(ANI_NL_MSG_LOG, wlan_logging_proc_sock_rx_msg); clear_default_logtoapp_log_level(); gapp_pid = INVALID_PID; INIT_COMPLETION(gwlan_logging.shutdown_comp); gwlan_logging.exit = true; gwlan_logging.is_active = false; vos_set_multicast_logging(0); wake_up_interruptible(&gwlan_logging.wait_queue); wait_for_completion(&gwlan_logging.shutdown_comp); spin_lock_irqsave(&gwlan_logging.spin_lock, irq_flag); vfree(gplog_msg); gplog_msg = NULL; gwlan_logging.pcur_node = NULL; spin_unlock_irqrestore(&gwlan_logging.spin_lock, irq_flag); wlan_logging_flush_pkt_queue(); return 0; }
int wlan_logging_sock_deactivate_svc(void) { unsigned long irq_flag; if (!gplog_msg) return 0; nl_srv_unregister(ANI_NL_MSG_LOG, wlan_logging_proc_sock_rx_msg); clear_default_logtoapp_log_level(); gapp_pid = INVALID_PID; INIT_COMPLETION(gwlan_logging.shutdown_comp); gwlan_logging.exit = true; gwlan_logging.is_active = false; vos_set_multicast_logging(0); gwlan_logging.is_flush_complete = false; clear_bit(HOST_LOG_DRIVER_MSG, &gwlan_logging.eventFlag); clear_bit(HOST_LOG_PER_PKT_STATS, &gwlan_logging.eventFlag); clear_bit(HOST_LOG_FW_FLUSH_COMPLETE, &gwlan_logging.eventFlag); wake_up_interruptible(&gwlan_logging.wait_queue); wait_for_completion(&gwlan_logging.shutdown_comp); spin_lock_irqsave(&gwlan_logging.spin_lock, irq_flag); gwlan_logging.pcur_node = NULL; spin_unlock_irqrestore(&gwlan_logging.spin_lock, irq_flag); vfree(gplog_msg); gplog_msg = NULL; pr_info("%s: Deactivate wlan_logging svc\n", __func__); return 0; }
int wlan_logging_sock_deactivate_svc(void) { nl_srv_unregister(ANI_NL_MSG_LOG, wlan_logging_proc_sock_rx_msg); clear_default_logtoapp_log_level(); gapp_pid = INVALID_PID; gwlan_logging.exit = true; INIT_COMPLETION(gwlan_logging.shutdown_comp); wake_up_interruptible(&gwlan_logging.wait_queue); wait_for_completion_interruptible(&gwlan_logging.shutdown_comp); vfree(gplog_msg); pr_info("%s: Deactivate wlan_logging svc\n", __func__); return 0; }
static int send_filled_buffers_to_user(void) { int ret = -1; struct log_msg *plog_msg; int payload_len; int tot_msg_len; tAniNlHdr *wnl; struct sk_buff *skb = NULL; struct nlmsghdr *nlh; static int nlmsg_seq; unsigned long flags; static int rate_limit; while (!list_empty(&gwlan_logging.filled_list) && !gwlan_logging.exit) { skb = dev_alloc_skb(MAX_LOGMSG_LENGTH); if (skb == NULL) { if (!rate_limit) { pr_err("%s: dev_alloc_skb() failed for msg size[%d] drop count = %u\n", __func__, MAX_LOGMSG_LENGTH, gwlan_logging.drop_count); } rate_limit = 1; ret = -ENOMEM; break; } rate_limit = 0; spin_lock_irqsave(&gwlan_logging.spin_lock, flags); plog_msg = (struct log_msg *) (gwlan_logging.filled_list.next); list_del_init(gwlan_logging.filled_list.next); spin_unlock_irqrestore(&gwlan_logging.spin_lock, flags); /* 4 extra bytes for the radio idx */ payload_len = plog_msg->filled_length + sizeof(wnl->radio) + sizeof(tAniHdr); tot_msg_len = NLMSG_SPACE(payload_len); nlh = nlmsg_put(skb, gapp_pid, nlmsg_seq++, ANI_NL_MSG_LOG, payload_len, NLM_F_REQUEST); if (NULL == nlh) { spin_lock_irqsave(&gwlan_logging.spin_lock, flags); list_add_tail(&plog_msg->node, &gwlan_logging.free_list); spin_unlock_irqrestore(&gwlan_logging.spin_lock, flags); pr_err("%s: drop_count = %u\n", __func__, ++gwlan_logging.drop_count); pr_err("%s: nlmsg_put() failed for msg size[%d]\n", __func__, tot_msg_len); dev_kfree_skb(skb); skb = NULL; ret = -EINVAL; continue; } wnl = (tAniNlHdr *) nlh; wnl->radio = plog_msg->radio; vos_mem_copy(&wnl->wmsg, plog_msg->logbuf, plog_msg->filled_length + sizeof(tAniHdr)); spin_lock_irqsave(&gwlan_logging.spin_lock, flags); list_add_tail(&plog_msg->node, &gwlan_logging.free_list); spin_unlock_irqrestore(&gwlan_logging.spin_lock, flags); ret = nl_srv_ucast(skb, gapp_pid, 0); if (ret < 0) { pr_err("%s: Send Failed %d drop_count = %u\n", __func__, ret, ++gwlan_logging.drop_count); skb = NULL; gapp_pid = INVALID_PID; clear_default_logtoapp_log_level(); wlan_logging_srv_nl_ready_indication(); } else { skb = NULL; ret = 0; } } return ret; }