From e43583f3c1aee4abc25520b55a2fc53f1e0be1f3 Mon Sep 17 00:00:00 2001 From: Nandha Kishore Easwaran Date: Mon, 15 May 2017 21:01:13 +0530 Subject: [PATCH 1/3] qcacmn: Dptrace changes to take per pdev stats Initial changes for adding dp trace in common framework. Modified dp_trace record sturcture to include pdev_id as a member to take per_pdev stats. Dump command has been modified to dump stats per pdev. Change-Id: I8aede0bd8ab6f381c7fa0542d077bdd8bf66b3d2 CRs-fixed: 2038944 --- hif/src/ce/ce_main.c | 4 +- hif/src/ce/ce_service.c | 3 +- hif/src/ce/ce_service_srng.c | 1 + htc/htc_send.c | 8 +- qdf/inc/qdf_nbuf.h | 1 + qdf/inc/qdf_trace.h | 87 +++++++------ qdf/linux/src/i_qdf_nbuf.h | 129 +++++++++++++++++--- qdf/linux/src/i_qdf_trace.h | 3 +- qdf/linux/src/qdf_nbuf.c | 32 +++++ qdf/linux/src/qdf_trace.c | 229 ++++++++++++++++++++++++----------- 10 files changed, 364 insertions(+), 133 deletions(-) diff --git a/hif/src/ce/ce_main.c b/hif/src/ce/ce_main.c index 286c742d7c15..d91d991d126c 100644 --- a/hif/src/ce/ce_main.c +++ b/hif/src/ce/ce_main.c @@ -1445,8 +1445,8 @@ hif_send_head(struct hif_opaque_softc *hif_ctx, QDF_NBUF_UPDATE_TX_PKT_COUNT(nbuf, QDF_NBUF_TX_PKT_HIF); DPTRACE(qdf_dp_trace(nbuf, QDF_DP_TRACE_HIF_PACKET_PTR_RECORD, - qdf_nbuf_data_addr(nbuf), - sizeof(qdf_nbuf_data(nbuf)), QDF_TX)); + QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(nbuf), + sizeof(qdf_nbuf_data(nbuf)), QDF_TX)); status = ce_sendlist_send(ce_hdl, nbuf, &sendlist, transfer_id); QDF_ASSERT(status == QDF_STATUS_SUCCESS); diff --git a/hif/src/ce/ce_service.c b/hif/src/ce/ce_service.c index 136be8bd60c0..86cdcc8909d0 100644 --- a/hif/src/ce/ce_service.c +++ b/hif/src/ce/ce_service.c @@ -572,6 +572,7 @@ ce_sendlist_send_legacy(struct CE_handle *copyeng, QDF_NBUF_TX_PKT_CE); DPTRACE(qdf_dp_trace((qdf_nbuf_t)per_transfer_context, QDF_DP_TRACE_CE_PACKET_PTR_RECORD, + QDF_TRACE_DEFAULT_PDEV_ID, (uint8_t *)&(((qdf_nbuf_t)per_transfer_context)->data), sizeof(((qdf_nbuf_t)per_transfer_context)->data), QDF_TX)); @@ -756,7 +757,7 @@ int ce_send_fast(struct CE_handle *copyeng, qdf_nbuf_t msdu, DPTRACE(qdf_dp_trace(msdu, QDF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD, - qdf_nbuf_data_addr(msdu), + QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(msdu), sizeof(qdf_nbuf_data(msdu)), QDF_TX)); } diff --git a/hif/src/ce/ce_service_srng.c b/hif/src/ce/ce_service_srng.c index 51c841148573..c9e245831610 100644 --- a/hif/src/ce/ce_service_srng.c +++ b/hif/src/ce/ce_service_srng.c @@ -206,6 +206,7 @@ ce_sendlist_send_srng(struct CE_handle *copyeng, QDF_NBUF_TX_PKT_CE); DPTRACE(qdf_dp_trace((qdf_nbuf_t)per_transfer_context, QDF_DP_TRACE_CE_PACKET_PTR_RECORD, + QDF_TRACE_DEFAULT_PDEV_ID, (uint8_t *)(((qdf_nbuf_t)per_transfer_context)->data), sizeof(((qdf_nbuf_t)per_transfer_context)->data), QDF_TX)); } else { diff --git a/htc/htc_send.c b/htc/htc_send.c index 38e46a17e9f3..172a5c2a4d04 100644 --- a/htc/htc_send.c +++ b/htc/htc_send.c @@ -1636,8 +1636,8 @@ A_STATUS htc_send_data_pkt(HTC_HANDLE HTCHandle, qdf_nbuf_t netbuf, int Epid, QDF_NBUF_UPDATE_TX_PKT_COUNT(netbuf, QDF_NBUF_TX_PKT_HTC); DPTRACE(qdf_dp_trace(netbuf, QDF_DP_TRACE_HTC_PACKET_PTR_RECORD, - qdf_nbuf_data_addr(netbuf), - sizeof(qdf_nbuf_data(netbuf)), QDF_TX)); + QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(netbuf), + sizeof(qdf_nbuf_data(netbuf)), QDF_TX)); status = hif_send_head(target->hif_dev, pEndpoint->UL_PipeID, pEndpoint->Id, ActualLength, netbuf, data_attr); @@ -1793,8 +1793,8 @@ A_STATUS htc_send_data_pkt(HTC_HANDLE HTCHandle, HTC_PACKET *pPacket, } QDF_NBUF_UPDATE_TX_PKT_COUNT(netbuf, QDF_NBUF_TX_PKT_HTC); DPTRACE(qdf_dp_trace(netbuf, QDF_DP_TRACE_HTC_PACKET_PTR_RECORD, - qdf_nbuf_data_addr(netbuf), - sizeof(qdf_nbuf_data(netbuf)), QDF_TX)); + QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(netbuf), + sizeof(qdf_nbuf_data(netbuf)), QDF_TX)); /* send what we can */ while (true) { diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index 3eab871bbe62..19243d13826a 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -100,6 +100,7 @@ #define QDF_NBUF_TX_PKT_CE 8 #define QDF_NBUF_TX_PKT_FREE 9 #define QDF_NBUF_TX_PKT_STATE_MAX 10 +#define QDF_NBUF_TX_PKT_LI_DP 11 /* Enable flag to print TSO specific prints in datapath */ #ifdef TSO_DEBUG_LOG_ENABLE diff --git a/qdf/inc/qdf_trace.h b/qdf/inc/qdf_trace.h index 81d2d64c5880..9f9f0e063ede 100644 --- a/qdf/inc/qdf_trace.h +++ b/qdf/inc/qdf_trace.h @@ -69,7 +69,17 @@ typedef int (qdf_abstract_print)(void *priv, const char *fmt, ...); #define QDF_DEBUG_ERROR 0x20 #define QDF_DEBUG_CFG 0x40 + +/* DP Trace Implementation */ +#ifdef CONFIG_DP_TRACE +#define DPTRACE(p) p +#else +#define DPTRACE(p) +#endif + #ifdef CONFIG_MCL +void qdf_trace(uint8_t module, uint8_t code, uint16_t session, uint32_t data); +#endif /* By default Data Path module will have all log levels enabled, except debug * log level. Debug level will be left up to the framework or user space modules @@ -84,6 +94,7 @@ typedef int (qdf_abstract_print)(void *priv, const char *fmt, ...); /* Preprocessor definitions and constants */ #define ASSERT_BUFFER_SIZE (512) +#define QDF_TRACE_DEFAULT_PDEV_ID 0xff #define MAX_QDF_TRACE_RECORDS 4000 #define INVALID_QDF_TRACE_ADDR 0xffffffff #define DEFAULT_QDF_TRACE_DUMP_COUNT 0 @@ -142,12 +153,6 @@ typedef struct s_qdf_trace_data { #define CASE_RETURN_STRING(str) case ((str)): return (uint8_t *)(# str); -/* DP Trace Implementation */ -#ifdef FEATURE_DP_TRACE -#define DPTRACE(p) p -#else -#define DPTRACE(p) -#endif #define MAX_QDF_DP_TRACE_RECORDS 4000 #define QDF_DP_TRACE_RECORD_SIZE 16 @@ -170,12 +175,14 @@ typedef struct s_qdf_trace_data { * @QDF_DP_TRACE_HDD_TX_TIMEOUT - HDD tx timeout * @QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT- SOFTAP HDD tx timeout * @QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD - HDD layer ptr record + * @QDF_DP_TRACE_LI_DP_TX_PACKET_PTR_RECORD - Lithium DP layer ptr record * @QDF_DP_TRACE_CE_PACKET_PTR_RECORD - CE layer ptr record * @QDF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD- CE fastpath ptr record * @QDF_DP_TRACE_FREE_PACKET_PTR_RECORD - tx completion ptr record * @QDF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD - HTT RX record * @QDF_DP_TRACE_RX_OFFLOAD_HTT_PACKET_PTR_RECORD- HTT RX offload record * @QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD - HDD RX record + * @QDF_DP_TRACE_RX_LI_DP_PACKET_PTR_RECORD - Lithium DP RX record * @QDF_DP_TRACE_LOW_VERBOSITY - below this are part of low verbosity * @QDF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD -tx queue ptr record * @QDF_DP_TRACE_TXRX_PACKET_PTR_RECORD - txrx packet ptr record @@ -187,6 +194,10 @@ typedef struct s_qdf_trace_data { * @QDF_DP_TRACE_MED_VERBOSITY - below this are part of med verbosity * @QDF_DP_TRACE_HDD_TX_PACKET_RECORD - record 32 bytes of tx pkt at HDD * @QDF_DP_TRACE_HDD_RX_PACKET_RECORD - record 32 bytes of rx pkt at HDD + * @QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD - record 32 bytes of tx pkt at LI_DP + * @QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD - record 32 bytes of rx pkt at LI_DP + * @QDF_DP_TRACE_LI_DP_NULL_RX_PACKET_RECORD + * - record 32 bytes of rx null_queue pkt at LI_DP * @QDF_DP_TRACE_HIGH_VERBOSITY - below this are part of high verbosity */ enum QDF_DP_TRACE_ID { @@ -201,12 +212,14 @@ enum QDF_DP_TRACE_ID { QDF_DP_TRACE_HDD_TX_TIMEOUT, QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT, QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD, + QDF_DP_TRACE_LI_DP_TX_PACKET_PTR_RECORD, QDF_DP_TRACE_CE_PACKET_PTR_RECORD, QDF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD, QDF_DP_TRACE_FREE_PACKET_PTR_RECORD, QDF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD, QDF_DP_TRACE_RX_OFFLOAD_HTT_PACKET_PTR_RECORD, QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD, + QDF_DP_TRACE_RX_LI_DP_PACKET_PTR_RECORD, QDF_DP_TRACE_LOW_VERBOSITY, QDF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD, QDF_DP_TRACE_TXRX_PACKET_PTR_RECORD, @@ -218,6 +231,9 @@ enum QDF_DP_TRACE_ID { QDF_DP_TRACE_MED_VERBOSITY, QDF_DP_TRACE_HDD_TX_PACKET_RECORD, QDF_DP_TRACE_HDD_RX_PACKET_RECORD, + QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD, + QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD, + QDF_DP_TRACE_LI_DP_NULL_RX_PACKET_RECORD, QDF_DP_TRACE_HIGH_VERBOSITY, QDF_DP_TRACE_MAX }; @@ -302,6 +318,7 @@ struct qdf_dp_trace_record_s { uint8_t data[QDF_DP_TRACE_RECORD_SIZE]; uint8_t size; uint32_t pid; + uint8_t pdev_id; }; /** @@ -371,7 +388,6 @@ void qdf_register_debug_callback(QDF_MODULE_ID module_id, tp_qdf_state_info_cb qdf_state_infocb); QDF_STATUS qdf_state_info_dump_all(char *buf, uint16_t size, uint16_t *driver_dump_size); -void qdf_trace(uint8_t module, uint8_t code, uint16_t session, uint32_t data); void qdf_trace_register(QDF_MODULE_ID, tp_qdf_trace_cb); QDF_STATUS qdf_trace_spin_lock_init(void); void qdf_trace_init(void); @@ -379,46 +395,56 @@ void qdf_trace_enable(uint32_t, uint8_t enable); void qdf_trace_dump_all(void *, uint8_t, uint8_t, uint32_t, uint32_t); -#ifdef FEATURE_DP_TRACE +#ifdef CONFIG_DP_TRACE +void qdf_dp_set_proto_bitmap(uint32_t val); +void qdf_dp_trace_set_verbosity(uint32_t val); +void qdf_dp_set_no_of_record(uint32_t val); void qdf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb, - enum qdf_proto_dir dir); + enum qdf_proto_dir dir, uint8_t pdev_id); void qdf_dp_trace_init(void); void qdf_dp_trace_spin_lock_init(void); void qdf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_records, uint8_t verbosity); void qdf_dp_trace_set_track(qdf_nbuf_t nbuf, enum qdf_proto_dir dir); -void qdf_dp_trace(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, +void qdf_dp_trace(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, uint8_t pdev_id, uint8_t *data, uint8_t size, enum qdf_proto_dir dir); -void qdf_dp_trace_dump_all(uint32_t count); -typedef void (*tp_qdf_dp_trace_cb)(struct qdf_dp_trace_record_s* , uint16_t); +void qdf_dp_trace_dump_all(uint32_t count, uint8_t pdev_id); +typedef void (*tp_qdf_dp_trace_cb)(struct qdf_dp_trace_record_s*, + uint16_t, uint8_t); void qdf_dp_display_record(struct qdf_dp_trace_record_s *record, - uint16_t index); + uint16_t index, uint8_t pdev_id); void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, - uint8_t *data, uint8_t size, uint16_t msdu_id, uint16_t status); + uint8_t pdev_id, uint8_t *data, uint8_t size, uint16_t msdu_id, + uint16_t status); void qdf_dp_display_ptr_record(struct qdf_dp_trace_record_s *pRecord, - uint16_t recIndex); + uint16_t recIndex, uint8_t pdev_id); uint8_t qdf_dp_get_proto_bitmap(void); +uint8_t qdf_dp_get_verbosity(void); +uint8_t qdf_dp_get_no_of_record(void); void qdf_dp_trace_proto_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, - uint8_t *sa, uint8_t *da, enum qdf_proto_type type, - enum qdf_proto_subtype subtype, enum qdf_proto_dir dir); + uint8_t *sa, uint8_t *da, enum qdf_proto_type type, + enum qdf_proto_subtype subtype, enum qdf_proto_dir dir, + uint8_t pdev_id); void qdf_dp_display_proto_pkt(struct qdf_dp_trace_record_s *record, - uint16_t index); + uint16_t index, uint8_t pdev_id); void qdf_dp_trace_enable_live_mode(void); void qdf_dp_trace_clear_buffer(void); void qdf_dp_trace_mgmt_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, - enum qdf_proto_type type, enum qdf_proto_subtype subtype); + uint8_t pdev_id, enum qdf_proto_type type, + enum qdf_proto_subtype subtype); void qdf_dp_display_mgmt_pkt(struct qdf_dp_trace_record_s *record, - uint16_t index); + uint16_t index, uint8_t pdev_id); void qdf_dp_display_event_record(struct qdf_dp_trace_record_s *record, - uint16_t index); + uint16_t index, uint8_t pdev_id); void qdf_dp_trace_record_event(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, - enum qdf_proto_type type, enum qdf_proto_subtype subtype); + uint8_t pdev_id, enum qdf_proto_type type, + enum qdf_proto_subtype subtype); #else static inline void qdf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb, - enum qdf_proto_dir dir) + enum qdf_proto_dir dir, uint8_t pdev_id) { } static inline @@ -435,7 +461,7 @@ void qdf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_records, { } static inline -void qdf_dp_trace_dump_all(uint32_t count) +void qdf_dp_trace_dump_all(uint32_t count, uint8_t pdev_id) { } @@ -452,8 +478,6 @@ void qdf_dp_trace_clear_buffer(void) #endif -void qdf_trace_hex_dump(QDF_MODULE_ID module, QDF_TRACE_LEVEL level, - void *data, int buf_len); void qdf_trace_display(void); @@ -467,14 +491,6 @@ void __printf(3, 4) qdf_snprintf(char *str_buffer, unsigned int size, #define QDF_SNPRINTF qdf_snprintf -#else - -#define DPTRACE(x) -#define qdf_trace_hex_dump(x, y, z, q) - -#endif /* CONFIG_MCL */ - - #ifdef TSOSEG_DEBUG static inline int qdf_tso_seg_dbg_record(struct qdf_tso_seg_elem_t *tsoseg, @@ -531,6 +547,9 @@ qdf_tso_seg_dbg_zero(struct qdf_tso_seg_elem_t *tsoseg) #endif /* TSOSEG_DEBUG */ +void qdf_trace_hex_dump(QDF_MODULE_ID module, QDF_TRACE_LEVEL level, + void *data, int buf_len); + #define ERROR_CODE -1 #define QDF_MAX_NAME_SIZE 32 #define MAX_PRINT_CONFIG_SUPPORTED 32 diff --git a/qdf/linux/src/i_qdf_nbuf.h b/qdf/linux/src/i_qdf_nbuf.h index 727f96f58632..1812b8a2bd8e 100644 --- a/qdf/linux/src/i_qdf_nbuf.h +++ b/qdf/linux/src/i_qdf_nbuf.h @@ -177,10 +177,26 @@ struct qdf_nbuf_cb { } extra_frag; /* 19 bytes */ union { struct { - uint8_t ftype; - uint32_t submit_ts; + union { + struct { + uint8_t packet_state:7, + is_packet_priv:1; + uint8_t packet_track:4, + proto_type:4; + uint8_t dp_trace:1, + is_bcast:1, + is_mcast:1, + packet_type:3, + /* used only for hl*/ + htt2_frm:1, + print:1; + uint8_t vdev_id; + } trace; /* 4 bytes */ + uint32_t submit_ts; + } u; void *fctx; void *vdev_ctx; + uint8_t ftype; } win; /* 21 bytes*/ struct { uint32_t data_attr; /* 4 bytes */ @@ -281,6 +297,34 @@ struct qdf_nbuf_cb { ((skb)->cb))->u.tx.extra_frag.flags.bits.flag_nbuf) #define QDF_NBUF_CB_TX_DATA_ATTR(skb) \ (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.data_attr) +#define QDF_NBUF_UPDATE_TX_PKT_COUNT(skb, PACKET_STATE) \ + qdf_nbuf_set_state(skb, PACKET_STATE) + + +#define QDF_NBUF_CB_TX_IPA_OWNED(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ipa.owned) + +#define QDF_NBUF_CB_TX_IPA_PRIV(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ipa.priv) + +#define QDF_NBUF_CB_TX_FTYPE(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.ftype) + +#define QDF_NBUF_CB_TX_FCTX(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.fctx) + +#define QDF_NBUF_CB_TX_VDEV_CTX(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.vdev_ctx) + + +#ifndef CONFIG_WIN + +#define QDF_NBUF_CB_TX_IS_PACKET_PRIV(skb) \ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.mcl.trace.is_packet_priv) + +#define QDF_NBUF_CB_TX_DESC_ID(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.desc_id) #define QDF_NBUF_CB_TX_PACKET_STATE(skb) \ (((struct qdf_nbuf_cb *) \ ((skb)->cb))->u.tx.dev.mcl.trace.packet_state) @@ -290,8 +334,6 @@ struct qdf_nbuf_cb { #define QDF_NBUF_CB_TX_PROTO_TYPE(skb) \ (((struct qdf_nbuf_cb *) \ ((skb)->cb))->u.tx.dev.mcl.trace.proto_type) -#define QDF_NBUF_UPDATE_TX_PKT_COUNT(skb, PACKET_STATE) \ - qdf_nbuf_set_state(skb, PACKET_STATE) #define QDF_NBUF_GET_PACKET_TRACK(skb) \ (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.packet_track) #define QDF_NBUF_CB_TX_DP_TRACE(skb) \ @@ -302,27 +344,77 @@ struct qdf_nbuf_cb { (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.htt2_frm) #define QDF_NBUF_CB_TX_VDEV_ID(skb) \ (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.vdev_id) + #define QDF_NBUF_CB_GET_IS_BCAST(skb) \ (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.is_bcast) #define QDF_NBUF_CB_GET_IS_MCAST(skb) \ (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.is_mcast) #define QDF_NBUF_CB_GET_PACKET_TYPE(skb) \ (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.packet_type) -#define QDF_NBUF_CB_TX_IPA_OWNED(skb) \ - (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ipa.owned) -#define QDF_NBUF_CB_TX_IPA_PRIV(skb) \ - (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ipa.priv) -#define QDF_NBUF_CB_TX_DESC_ID(skb) \ - (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.desc_id) -#define QDF_NBUF_CB_TX_FTYPE(skb) \ - (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.ftype) -#define QDF_NBUF_CB_TX_SUBMIT_TS(skb) \ - (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.submit_ts) -#define QDF_NBUF_CB_TX_FCTX(skb) \ - (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.fctx) -#define QDF_NBUF_CB_TX_VDEV_CTX(skb) \ - (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.vdev_ctx) +#define QDF_NBUF_CB_SET_BCAST(skb) \ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.mcl.trace.is_bcast = true) +#define QDF_NBUF_CB_SET_MCAST(skb) \ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.mcl.trace.is_mcast = true) + +#else + +#define QDF_NBUF_CB_TX_DESC_ID(skb)\ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.desc_id) + +#define QDF_NBUF_CB_TX_PACKET_STATE(skb)\ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.win.u.trace.packet_state) + +#define QDF_NBUF_CB_TX_IS_PACKET_PRIV(skb) \ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.win.u.trace.is_packet_priv) + +#define QDF_NBUF_CB_TX_PACKET_TRACK(skb)\ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.win.u.trace.packet_track) + +#define QDF_NBUF_CB_TX_SUBMIT_TS(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.submit_ts) + +#define QDF_NBUF_CB_TX_PROTO_TYPE(skb)\ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.win.u.trace.proto_type) + +#define QDF_NBUF_GET_PACKET_TRACK(skb)\ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.trace.packet_track) + +#define QDF_NBUF_CB_TX_DP_TRACE(skb)\ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.dp_trace) + +#define QDF_NBUF_CB_DP_TRACE_PRINT(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.print) + +#define QDF_NBUF_CB_TX_HL_HTT2_FRM(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.htt2_frm) + +#define QDF_NBUF_CB_TX_VDEV_ID(skb)\ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.vdev_id) + +#define QDF_NBUF_CB_GET_IS_BCAST(skb)\ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.is_bcast) + +#define QDF_NBUF_CB_GET_IS_MCAST(skb)\ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.is_mcast) + +#define QDF_NBUF_CB_GET_PACKET_TYPE(skb)\ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.packet_type) + +#define QDF_NBUF_CB_SET_BCAST(skb) \ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.win.u.trace.is_bcast = true) + +#define QDF_NBUF_CB_SET_MCAST(skb) \ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.win.u.trace.is_mcast = true) +#endif /* assume the OS provides a single fragment */ #define __qdf_nbuf_get_num_frags(skb) \ @@ -538,6 +630,7 @@ void __qdf_nbuf_frag_info(struct sk_buff *skb, qdf_sglist_t *sg); QDF_STATUS __qdf_nbuf_frag_map( qdf_device_t osdev, __qdf_nbuf_t nbuf, int offset, qdf_dma_dir_t dir, int cur_frag); +void qdf_nbuf_classify_pkt(struct sk_buff *skb); bool __qdf_nbuf_is_ipv4_wapi_pkt(struct sk_buff *skb); bool __qdf_nbuf_data_is_ipv4_pkt(uint8_t *data); diff --git a/qdf/linux/src/i_qdf_trace.h b/qdf/linux/src/i_qdf_trace.h index 1ec827fe3927..5c53f1be1482 100644 --- a/qdf/linux/src/i_qdf_trace.h +++ b/qdf/linux/src/i_qdf_trace.h @@ -95,7 +95,8 @@ /* This code will be used for compilation if tracing is to be compiled out */ /* of the code so these functions/macros are 'do nothing' */ -static inline void qdf_trace_msg(QDF_MODULE_ID module, ...) +static inline void qdf_trace_msg(QDF_MODULE_ID module, QDF_TRACE_LEVEL level, + char *str_format, ...) { } diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c index 0ddc32058e62..88665521dc74 100644 --- a/qdf/linux/src/qdf_nbuf.c +++ b/qdf/linux/src/qdf_nbuf.c @@ -2788,3 +2788,35 @@ void __qdf_nbuf_reg_free_cb(qdf_nbuf_free_t cb_func_ptr) nbuf_free_cb = cb_func_ptr; return; } + +/** + * qdf_nbuf_classify_pkt() - classify packet + * @skb - sk buff + * + * Return: none + */ +void qdf_nbuf_classify_pkt(struct sk_buff *skb) +{ + struct ethhdr *eh = (struct ethhdr *)skb->data; + qdf_mem_set(skb->cb, sizeof(skb->cb), 0); + + /* check destination mac address is broadcast/multicast */ + if (is_broadcast_ether_addr((uint8_t *)eh)) + QDF_NBUF_CB_SET_BCAST(skb); + else if (is_multicast_ether_addr((uint8_t *)eh)) + QDF_NBUF_CB_SET_MCAST(skb); + + if (qdf_nbuf_is_ipv4_arp_pkt(skb)) + QDF_NBUF_CB_GET_PACKET_TYPE(skb) = + QDF_NBUF_CB_PACKET_TYPE_ARP; + else if (qdf_nbuf_is_ipv4_dhcp_pkt(skb)) + QDF_NBUF_CB_GET_PACKET_TYPE(skb) = + QDF_NBUF_CB_PACKET_TYPE_DHCP; + else if (qdf_nbuf_is_ipv4_eapol_pkt(skb)) + QDF_NBUF_CB_GET_PACKET_TYPE(skb) = + QDF_NBUF_CB_PACKET_TYPE_EAPOL; + else if (qdf_nbuf_is_ipv4_wapi_pkt(skb)) + QDF_NBUF_CB_GET_PACKET_TYPE(skb) = + QDF_NBUF_CB_PACKET_TYPE_WAPI; +} +EXPORT_SYMBOL(qdf_nbuf_classify_pkt); diff --git a/qdf/linux/src/qdf_trace.c b/qdf/linux/src/qdf_trace.c index 62552a267adf..188c0600f7f6 100644 --- a/qdf/linux/src/qdf_trace.c +++ b/qdf/linux/src/qdf_trace.c @@ -41,7 +41,6 @@ #include #include static int qdf_pidx = -1; -#ifdef CONFIG_MCL #include "qdf_time.h" #include "qdf_mc_timer.h" @@ -110,7 +109,7 @@ static tp_qdf_trace_cb qdf_trace_cb_table[QDF_MODULE_ID_MAX]; static tp_qdf_trace_cb qdf_trace_restore_cb_table[QDF_MODULE_ID_MAX]; static tp_qdf_state_info_cb qdf_state_info_table[QDF_MODULE_ID_MAX]; -#ifdef FEATURE_DP_TRACE +#ifdef CONFIG_DP_TRACE /* Static and Global variables */ static spinlock_t l_dp_trace_lock; @@ -441,6 +440,8 @@ void qdf_trace_init(void) } EXPORT_SYMBOL(qdf_trace_init); +#ifdef CONFIG_MCL + /** * qdf_trace() - puts the messages in to ring-buffer * @module: Enum of module, basically module id. @@ -510,6 +511,8 @@ void qdf_trace(uint8_t module, uint8_t code, uint16_t session, uint32_t data) } EXPORT_SYMBOL(qdf_trace); +#endif + /** * qdf_trace_spin_lock_init() - initializes the lock variable before use * @@ -567,7 +570,7 @@ EXPORT_SYMBOL(qdf_trace_register); * Return: None */ void qdf_trace_dump_all(void *p_mac, uint8_t code, uint8_t session, - uint32_t count, uint32_t bitmask_of_module) + uint32_t count, uint32_t bitmask_of_module) { qdf_trace_record_t p_record; int32_t i, tail; @@ -713,9 +716,9 @@ QDF_STATUS qdf_state_info_dump_all(char *buf, uint16_t size, } EXPORT_SYMBOL(qdf_state_info_dump_all); -#ifdef FEATURE_DP_TRACE +#ifdef CONFIG_DP_TRACE static void qdf_dp_unused(struct qdf_dp_trace_record_s *record, - uint16_t index) + uint16_t index, uint8_t pdev_id) { qdf_print("%s: QDF_DP_TRACE_MAX event should not be generated", __func__); @@ -784,6 +787,68 @@ void qdf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_record, } EXPORT_SYMBOL(qdf_dp_trace_set_value); +/** + * qdf_dp_trace_set_verbosity() - set verbosity value + * + * @val: Value to set + * + * Return: Null + */ +void qdf_dp_trace_set_verbosity(uint32_t val) +{ + g_qdf_dp_trace_data.verbosity = val; +} +EXPORT_SYMBOL(qdf_dp_trace_set_verbosity); + +/** + * qdf_dp_get_verbosity) - get verbosity value + * + * Return: int + */ +uint8_t qdf_dp_get_verbosity(void) +{ + return g_qdf_dp_trace_data.verbosity; +} +EXPORT_SYMBOL(qdf_dp_get_verbosity); + +/** + * qdf_dp_set_proto_bitmap() - set dp trace proto bitmap + * + * @val : unsigned bitmap to set + * + * Return: proto bitmap + */ +void qdf_dp_set_proto_bitmap(uint32_t val) +{ + g_qdf_dp_trace_data.proto_bitmap = val; +} +EXPORT_SYMBOL(qdf_dp_set_proto_bitmap); + +/** + * qdf_dp_set_no_of_record() - set dp trace no_of_record + * + * @val : unsigned no_of_record to set + * + * Return: null + */ +void qdf_dp_set_no_of_record(uint32_t val) +{ + g_qdf_dp_trace_data.no_of_record = val; +} +EXPORT_SYMBOL(qdf_dp_set_no_of_record); + +/** + * qdf_dp_get_no_of_record() - get dp trace no_of_record + * + * Return: number of records + */ +uint8_t qdf_dp_get_no_of_record(void) +{ + return g_qdf_dp_trace_data.no_of_record; +} +EXPORT_SYMBOL(qdf_dp_get_no_of_record); + + /** * qdf_dp_trace_enable_track() - enable the tracing for netbuf * @code: defines the event @@ -859,9 +924,13 @@ void qdf_dp_trace_set_track(qdf_nbuf_t nbuf, enum qdf_proto_dir dir) return; } EXPORT_SYMBOL(qdf_dp_trace_set_track); - +#if CONFIG_MCL #define DPTRACE_PRINT(args...) \ QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO, ## args) +#else +#define DPTRACE_PRINT(args...) \ + QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_NONE, ## args) +#endif /** * dump_hex_trace() - Display the data in buffer @@ -913,8 +982,12 @@ const char *qdf_dp_code_to_string(enum QDF_DP_TRACE_ID code) return "EVENT:"; case QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD: return "HDD: TX: PTR:"; + case QDF_DP_TRACE_LI_DP_TX_PACKET_PTR_RECORD: + return "LI_DP: TX: PTR:"; case QDF_DP_TRACE_HDD_TX_PACKET_RECORD: return "HDD: TX: DATA:"; + case QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD: + return "LI_DP: TX: DATA:"; case QDF_DP_TRACE_CE_PACKET_PTR_RECORD: return "CE: TX: PTR:"; case QDF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD: @@ -927,8 +1000,14 @@ const char *qdf_dp_code_to_string(enum QDF_DP_TRACE_ID code) return "HTT: RX: OF: PTR:"; case QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD: return "HDD: RX: PTR:"; + case QDF_DP_TRACE_RX_LI_DP_PACKET_PTR_RECORD: + return "LI_DP: RX: PTR:"; case QDF_DP_TRACE_HDD_RX_PACKET_RECORD: return "HDD: RX: DATA:"; + case QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD: + return "LI_DP: RX: DATA:"; + case QDF_DP_TRACE_LI_DP_NULL_RX_PACKET_RECORD: + return "LI_DP_NULL: RX: DATA:"; case QDF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD: return "TXRX: TX: Q: PTR:"; case QDF_DP_TRACE_TXRX_PACKET_PTR_RECORD: @@ -1081,12 +1160,13 @@ static bool qdf_dp_enable_check(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, * @code: dptrace code * @data: data pointer * @size: size of buffer + * @pdev_id: pdev_id * @print: true to print it in kmsg * * Return: none */ -static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code, - uint8_t *data, uint8_t size, bool print) +static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code, uint8_t *data, + uint8_t size, uint8_t pdev_id, bool print) { struct qdf_dp_trace_record_s *rec = NULL; int index; @@ -1119,6 +1199,7 @@ static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code, rec = &g_qdf_dp_trace_tbl[g_qdf_dp_trace_data.tail]; index = g_qdf_dp_trace_data.tail; rec->code = code; + rec->pdev_id = pdev_id; rec->size = 0; if (data != NULL && size > 0) { if (size > QDF_DP_TRACE_RECORD_SIZE) @@ -1134,7 +1215,8 @@ static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code, if ((g_qdf_dp_trace_data.live_mode || (print == true)) && (rec->code < QDF_DP_TRACE_MAX)) - qdf_dp_trace_cb_table[rec->code] (rec, index); + qdf_dp_trace_cb_table[rec->code] (rec, index, + QDF_TRACE_DEFAULT_PDEV_ID); } @@ -1143,11 +1225,12 @@ static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code, * @session_id: vdev_id * @skb: skb pointer * @dir: direction + * @pdev_id: pdev_id * * Return: true/false */ static bool qdf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb, - enum qdf_proto_dir dir) + enum qdf_proto_dir dir, uint8_t pdev_id) { enum qdf_proto_subtype subtype; @@ -1160,7 +1243,7 @@ static bool qdf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb, DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_EAPOL_PACKET_RECORD, session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET), (skb->data + QDF_NBUF_DEST_MAC_OFFSET), - QDF_PROTO_TYPE_EAPOL, subtype, dir)); + QDF_PROTO_TYPE_EAPOL, subtype, dir, pdev_id)); if (QDF_TX == dir) QDF_NBUF_CB_TX_DP_TRACE(skb) = 1; else if (QDF_RX == dir) @@ -1177,11 +1260,12 @@ static bool qdf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb, * @session_id: vdev_id * @skb: skb pointer * @dir: direction + * @pdev_id: pdev_id * * Return: true/false */ static bool qdf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb, - enum qdf_proto_dir dir) + enum qdf_proto_dir dir, uint8_t pdev_id) { enum qdf_proto_subtype subtype = QDF_PROTO_INVALID; @@ -1194,7 +1278,7 @@ static bool qdf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb, DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_DHCP_PACKET_RECORD, session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET), (skb->data + QDF_NBUF_DEST_MAC_OFFSET), - QDF_PROTO_TYPE_DHCP, subtype, dir)); + QDF_PROTO_TYPE_DHCP, subtype, dir, pdev_id)); if (QDF_TX == dir) QDF_NBUF_CB_TX_DP_TRACE(skb) = 1; else if (QDF_RX == dir) @@ -1211,11 +1295,12 @@ static bool qdf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb, * @session_id: vdev_id * @skb: skb pointer * @dir: direction + * @pdev_id: pdev_id * * Return: true/false */ static bool qdf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb, - enum qdf_proto_dir dir) + enum qdf_proto_dir dir, uint8_t pdev_id) { enum qdf_proto_subtype proto_subtype; @@ -1228,7 +1313,7 @@ static bool qdf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb, DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_ARP_PACKET_RECORD, session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET), (skb->data + QDF_NBUF_DEST_MAC_OFFSET), - QDF_PROTO_TYPE_ARP, proto_subtype, dir)); + QDF_PROTO_TYPE_ARP, proto_subtype, dir, pdev_id)); if (QDF_TX == dir) QDF_NBUF_CB_TX_DP_TRACE(skb) = 1; else if (QDF_RX == dir) @@ -1245,19 +1330,20 @@ static bool qdf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb, * @session_id: vdev_id * @skb: skb pointer * @dir: direction + * @pdev_id: pdev_id * * Return: none */ void qdf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb, - enum qdf_proto_dir dir) + enum qdf_proto_dir dir, uint8_t pdev_id) { if (qdf_dp_get_proto_bitmap()) { if (qdf_log_arp_pkt(session_id, - skb, dir) == false) { + skb, dir, pdev_id) == false) { if (qdf_log_dhcp_pkt(session_id, - skb, dir) == false) { + skb, dir, pdev_id) == false) { if (qdf_log_eapol_pkt(session_id, - skb, dir) == false) { + skb, dir, pdev_id) == false) { return; } } @@ -1274,7 +1360,7 @@ EXPORT_SYMBOL(qdf_dp_trace_log_pkt); * Return: none */ void qdf_dp_display_mgmt_pkt(struct qdf_dp_trace_record_s *record, - uint16_t index) + uint16_t index, uint8_t pdev_id) { struct qdf_dp_trace_mgmt_buf *buf = (struct qdf_dp_trace_mgmt_buf *)record->data; @@ -1291,13 +1377,15 @@ EXPORT_SYMBOL(qdf_dp_display_mgmt_pkt); * qdf_dp_trace_mgmt_pkt() - record mgmt packet * @code: dptrace code * @vdev_id: vdev id + * @pdev_id: pdev_id * @type: proto type * @subtype: proto subtype * * Return: none */ void qdf_dp_trace_mgmt_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, - enum qdf_proto_type type, enum qdf_proto_subtype subtype) + uint8_t pdev_id, enum qdf_proto_type type, + enum qdf_proto_subtype subtype) { struct qdf_dp_trace_mgmt_buf buf; int buf_size = sizeof(struct qdf_dp_trace_mgmt_buf); @@ -1311,7 +1399,7 @@ void qdf_dp_trace_mgmt_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, buf.type = type; buf.subtype = subtype; buf.vdev_id = vdev_id; - qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, true); + qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, pdev_id, true); } EXPORT_SYMBOL(qdf_dp_trace_mgmt_pkt); @@ -1323,7 +1411,7 @@ EXPORT_SYMBOL(qdf_dp_trace_mgmt_pkt); * Return: none */ void qdf_dp_display_event_record(struct qdf_dp_trace_record_s *record, - uint16_t index) + uint16_t index, uint8_t pdev_id) { struct qdf_dp_trace_event_buf *buf = (struct qdf_dp_trace_event_buf *)record->data; @@ -1340,13 +1428,15 @@ EXPORT_SYMBOL(qdf_dp_display_event_record); * qdf_dp_trace_record_event() - record events * @code: dptrace code * @vdev_id: vdev id + * @pdev_id: pdev_id * @type: proto type * @subtype: proto subtype * * Return: none */ void qdf_dp_trace_record_event(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, - enum qdf_proto_type type, enum qdf_proto_subtype subtype) + uint8_t pdev_id, enum qdf_proto_type type, + enum qdf_proto_subtype subtype) { struct qdf_dp_trace_event_buf buf; int buf_size = sizeof(struct qdf_dp_trace_event_buf); @@ -1360,7 +1450,7 @@ void qdf_dp_trace_record_event(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, buf.type = type; buf.subtype = subtype; buf.vdev_id = vdev_id; - qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, true); + qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, pdev_id, true); } EXPORT_SYMBOL(qdf_dp_trace_record_event); @@ -1372,7 +1462,7 @@ EXPORT_SYMBOL(qdf_dp_trace_record_event); * Return: none */ void qdf_dp_display_proto_pkt(struct qdf_dp_trace_record_s *record, - uint16_t index) + uint16_t index, uint8_t pdev_id) { struct qdf_dp_trace_proto_buf *buf = (struct qdf_dp_trace_proto_buf *)record->data; @@ -1398,12 +1488,14 @@ EXPORT_SYMBOL(qdf_dp_display_proto_pkt); * @type: proto type * @subtype: proto subtype * @dir: direction + * @pdev_id: pdev id * * Return: none */ void qdf_dp_trace_proto_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, uint8_t *sa, uint8_t *da, enum qdf_proto_type type, - enum qdf_proto_subtype subtype, enum qdf_proto_dir dir) + enum qdf_proto_subtype subtype, enum qdf_proto_dir dir, + uint8_t pdev_id) { struct qdf_dp_trace_proto_buf buf; int buf_size = sizeof(struct qdf_dp_trace_ptr_buf); @@ -1420,7 +1512,7 @@ void qdf_dp_trace_proto_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, buf.type = type; buf.subtype = subtype; buf.vdev_id = vdev_id; - qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, true); + qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, pdev_id, true); } EXPORT_SYMBOL(qdf_dp_trace_proto_pkt); @@ -1432,7 +1524,7 @@ EXPORT_SYMBOL(qdf_dp_trace_proto_pkt); * Return: none */ void qdf_dp_display_ptr_record(struct qdf_dp_trace_record_s *record, - uint16_t index) + uint16_t index, uint8_t pdev_id) { struct qdf_dp_trace_ptr_buf *buf = (struct qdf_dp_trace_ptr_buf *)record->data; @@ -1454,6 +1546,7 @@ EXPORT_SYMBOL(qdf_dp_display_ptr_record); /** * qdf_dp_trace_ptr() - record dptrace * @code: dptrace code + * @pdev_id: pdev_id * @data: data * @size: size of data * @msdu_id: msdu_id @@ -1462,7 +1555,8 @@ EXPORT_SYMBOL(qdf_dp_display_ptr_record); * Return: none */ void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, - uint8_t *data, uint8_t size, uint16_t msdu_id, uint16_t status) + uint8_t pdev_id, uint8_t *data, uint8_t size, + uint16_t msdu_id, uint16_t status) { struct qdf_dp_trace_ptr_buf buf; int buf_size = sizeof(struct qdf_dp_trace_ptr_buf); @@ -1476,7 +1570,7 @@ void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, qdf_mem_copy(&buf.cookie, data, size); buf.msdu_id = msdu_id; buf.status = status; - qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, + qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, pdev_id, QDF_NBUF_CB_DP_TRACE_PRINT(nbuf)); } EXPORT_SYMBOL(qdf_dp_trace_ptr); @@ -1489,23 +1583,31 @@ EXPORT_SYMBOL(qdf_dp_trace_ptr); * Return: None */ void qdf_dp_display_record(struct qdf_dp_trace_record_s *pRecord, - uint16_t recIndex) + uint16_t recIndex, uint8_t pdev_id) { - DPTRACE_PRINT("DPT: %04d: %s: %s", recIndex, - pRecord->time, qdf_dp_code_to_string(pRecord->code)); - switch (pRecord->code) { - case QDF_DP_TRACE_HDD_TX_TIMEOUT: - DPTRACE_PRINT("DPT: HDD TX Timeout\n"); - break; - case QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT: - DPTRACE_PRINT("DPT: HDD SoftAP TX Timeout\n"); - break; - case QDF_DP_TRACE_HDD_TX_PACKET_RECORD: - case QDF_DP_TRACE_HDD_RX_PACKET_RECORD: - dump_hex_trace("DATA", pRecord->data, pRecord->size); - break; - default: - dump_hex_trace("cookie", pRecord->data, pRecord->size); + if (pdev_id == QDF_TRACE_DEFAULT_PDEV_ID || + pdev_id == pRecord->pdev_id) { + + DPTRACE_PRINT("DPT: %04d: PDEV_ID = %d: %s: %s", recIndex, + pRecord->pdev_id, pRecord->time, + qdf_dp_code_to_string(pRecord->code)); + switch (pRecord->code) { + case QDF_DP_TRACE_HDD_TX_TIMEOUT: + DPTRACE_PRINT("DPT: HDD TX Timeout\n"); + break; + case QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT: + DPTRACE_PRINT("DPT: HDD SoftAP TX Timeout\n"); + break; + case QDF_DP_TRACE_HDD_TX_PACKET_RECORD: + case QDF_DP_TRACE_HDD_RX_PACKET_RECORD: + case QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD: + case QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD: + case QDF_DP_TRACE_LI_DP_NULL_RX_PACKET_RECORD: + dump_hex_trace("DATA", pRecord->data, pRecord->size); + break; + default: + dump_hex_trace("cookie", pRecord->data, pRecord->size); + } } } EXPORT_SYMBOL(qdf_dp_display_record); @@ -1515,19 +1617,20 @@ EXPORT_SYMBOL(qdf_dp_display_record); * qdf_dp_trace() - Stores the data in buffer * @nbuf : defines the netbuf * @code : defines the event + * @pdev_id: pdev_id * @data : defines the data to be stored * @size : defines the size of the data record * * Return: None */ -void qdf_dp_trace(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, - uint8_t *data, uint8_t size, enum qdf_proto_dir dir) +void qdf_dp_trace(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, uint8_t pdev_id, + uint8_t *data, uint8_t size, enum qdf_proto_dir dir) { if (qdf_dp_enable_check(nbuf, code, dir) == false) return; - qdf_dp_add_record(code, data, size, + qdf_dp_add_record(code, data, size, pdev_id, (nbuf != NULL) ? QDF_NBUF_CB_DP_TRACE_PRINT(nbuf) : false); } EXPORT_SYMBOL(qdf_dp_trace); @@ -1587,12 +1690,12 @@ EXPORT_SYMBOL(qdf_dp_trace_clear_buffer); /** * qdf_dp_trace_dump_all() - Dump data from ring buffer via call back functions * registered with QDF - * @code: Reason code * @count: Number of lines to dump starting from tail to head + * @pdev_id: pdev_id * * Return: None */ -void qdf_dp_trace_dump_all(uint32_t count) +void qdf_dp_trace_dump_all(uint32_t count, uint8_t pdev_id) { struct qdf_dp_trace_record_s p_record; int32_t i, tail; @@ -1632,7 +1735,7 @@ void qdf_dp_trace_dump_all(uint32_t count) for (;; ) { qdf_dp_trace_cb_table[p_record. - code] (&p_record, (uint16_t)i); + code] (&p_record, (uint16_t)i, pdev_id); if (i == tail) break; i += 1; @@ -1652,26 +1755,6 @@ EXPORT_SYMBOL(qdf_dp_trace_dump_all); #endif -#else /* CONFIG_MCL */ - -void qdf_trace_msg(QDF_MODULE_ID module, QDF_TRACE_LEVEL level, - char *str_format, ...) -{ - va_list val; - - va_start(val, str_format); - /* - * TODO: remove this hack when modules start using the qdf_print_ctrl - * framework. - * Any newly added code that wishes to use QDF_TRACE needs to adapt - * to the framework, and using it this way is not encouraged. - */ - qdf_trace_msg_cmn(qdf_pidx, module, level, str_format, val); - va_end(val); -} -EXPORT_SYMBOL(qdf_trace_msg); -#endif /* CONFIG_MCL */ - struct qdf_print_ctrl print_ctrl_obj[MAX_PRINT_CONFIG_SUPPORTED]; struct category_name_info g_qdf_category_name[MAX_SUPPORTED_CATEGORY] = { From 2c86b213c624fcaf0eb14a391b0c8e6093cc86f1 Mon Sep 17 00:00:00 2001 From: Vivek Date: Mon, 5 Jun 2017 00:02:11 +0530 Subject: [PATCH 2/3] qcacmn: Replacing qdf_print with QDF_TRACE Replace all object manager qdf_prints with obj_mgr_err/obj_mgr_info based on QDF_TRACE with the right log levels. Added additional debug information like Pdev_id Vdev id Peer MAC address Change-Id: I96d96182176d332b9fbdb202305d29c08ddc0d18 CRs-Fixed: 2026537 --- qdf/inc/qdf_types.h | 1 + qdf/linux/src/qdf_trace.c | 2 + .../obj_mgr/inc/wlan_objmgr_cmn.h | 24 ++++ .../obj_mgr/inc/wlan_objmgr_vdev_obj.h | 6 +- .../obj_mgr/src/wlan_objmgr_global_obj.c | 136 +++++++----------- .../obj_mgr/src/wlan_objmgr_pdev_obj.c | 63 +++++--- .../obj_mgr/src/wlan_objmgr_peer_obj.c | 99 ++++++++++--- .../obj_mgr/src/wlan_objmgr_psoc_obj.c | 69 +++++---- .../obj_mgr/src/wlan_objmgr_vdev_obj.c | 64 ++++++--- 9 files changed, 276 insertions(+), 188 deletions(-) diff --git a/qdf/inc/qdf_types.h b/qdf/inc/qdf_types.h index b217580ea9e1..c6ecefb89925 100644 --- a/qdf/inc/qdf_types.h +++ b/qdf/inc/qdf_types.h @@ -394,6 +394,7 @@ typedef enum { QDF_MODULE_ID_OFFCHAN_TXRX, QDF_MODULE_ID_SON, QDF_MODULE_ID_SPECTRAL, + QDF_MODULE_ID_OBJ_MGR, QDF_MODULE_ID_ANY, QDF_MODULE_ID_MAX, } QDF_MODULE_ID; diff --git a/qdf/linux/src/qdf_trace.c b/qdf/linux/src/qdf_trace.c index 188c0600f7f6..17b0495c71c2 100644 --- a/qdf/linux/src/qdf_trace.c +++ b/qdf/linux/src/qdf_trace.c @@ -1840,6 +1840,7 @@ struct category_name_info g_qdf_category_name[MAX_SUPPORTED_CATEGORY] = { [QDF_MODULE_ID_P2P] = {"P2P"}, [QDF_MODULE_ID_OFFCHAN_TXRX] = {"OFFCHAN"}, [QDF_MODULE_ID_REGULATORY] = {"REGULATORY"}, + [QDF_MODULE_ID_OBJ_MGR] = {"OBJMGR"}, [QDF_MODULE_ID_ANY] = {"ANY"}, }; EXPORT_SYMBOL(g_qdf_category_name); @@ -2256,6 +2257,7 @@ static void set_default_trace_levels(struct category_info *cinfo) [QDF_MODULE_ID_NAN] = QDF_TRACE_LEVEL_NONE, [QDF_MODULE_ID_P2P] = QDF_TRACE_LEVEL_NONE, [QDF_MODULE_ID_OFFCHAN_TXRX] = QDF_TRACE_LEVEL_NONE, + [QDF_MODULE_ID_OBJ_MGR] = QDF_TRACE_LEVEL_INFO, [QDF_MODULE_ID_ANY] = QDF_TRACE_LEVEL_NONE, }; diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_cmn.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_cmn.h index 37315a69098b..06acabeb4fd5 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_cmn.h +++ b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_cmn.h @@ -38,6 +38,28 @@ #define WLAN_PEER_HASH(addr) \ (((const uint8_t *)(addr))[WLAN_MACADDR_LEN - 1] % WLAN_PEER_HASHSIZE) +#define obj_mgr_log(level, args...) \ + QDF_TRACE(QDF_MODULE_ID_OBJ_MGR, level, ## args) + +#define obj_mgr_logfl(level, format, args...) \ + obj_mgr_log(level, FL(format), ## args) + +#define obj_mgr_alert(format, args...) \ + obj_mgr_logfl(QDF_TRACE_LEVEL_FATAL, format, ## args) + +#define obj_mgr_err(format, args...) \ + obj_mgr_logfl(QDF_TRACE_LEVEL_ERROR, format, ## args) + +#define obj_mgr_warn(format, args...) \ + obj_mgr_logfl(QDF_TRACE_LEVEL_WARN, format, ## args) + +#define obj_mgr_info(format, args...) \ + obj_mgr_logfl(QDF_TRACE_LEVEL_INFO, format, ## args) + +#define obj_mgr_debug(format, args...) \ + obj_mgr_logfl(QDF_TRACE_LEVEL_DEBUG, format, ## args) + + /** * enum WLAN_OBJ_STATE - State of Object * @WLAN_OBJ_STATE_CREATED: All component objects are created @@ -249,6 +271,8 @@ static inline char *string_from_dbgid(wlan_objmgr_ref_dbgid id) "WLAN_NAN_ID", "WLAN_REGULATORY_SB_ID", "WLAN_REGULATORY_NB_ID", + "WLAN_OFFCHAN_TXRX_ID", + "WLAN_POLICY_MGR_ID", "WLAN_SON_ID", "WLAN_SPECTRAL_ID", "WLAN_REF_ID_MAX" }; diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h index a7897160e19c..8d5e2da07403 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h +++ b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h @@ -762,12 +762,10 @@ static inline uint8_t *wlan_vdev_get_hw_macaddr(struct wlan_objmgr_vdev *vdev) struct wlan_objmgr_pdev *pdev = wlan_vdev_get_pdev(vdev); /* This API is invoked with lock acquired, do not add log prints */ - if (pdev != NULL) { + if (pdev != NULL) return wlan_pdev_get_hw_macaddr(pdev); - } else { - qdf_print("%s:pdev is NULL\n", __func__); + else return NULL; - } } /** diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c index a65a0bb78b20..41faa1f23825 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c @@ -26,7 +26,7 @@ /* Global object, it is declared globally */ struct wlan_objmgr_global *g_umac_glb_obj; /* Component Name table */ -const char *wlan_umac_component_name[] = { +const char *wlan_umac_Component_name[] = { "MLME", "SCAN_MGR", "SCAN_CACHE", @@ -42,7 +42,7 @@ QDF_STATUS wlan_objmgr_global_obj_init(void) /* If it is already created, ignore */ if (g_umac_glb_obj != NULL) { - qdf_print("%s: Global object is already created\n", __func__); + obj_mgr_err("Global object is already created"); return QDF_STATUS_E_FAILURE; } @@ -50,8 +50,7 @@ QDF_STATUS wlan_objmgr_global_obj_init(void) umac_global_obj = (struct wlan_objmgr_global *)qdf_mem_malloc( sizeof(*umac_global_obj)); if (umac_global_obj == NULL) { - qdf_print("%s: Global object alloc failed due to malloc\n", - __func__); + obj_mgr_err("Global object alloc failed due to malloc"); return QDF_STATUS_E_NOMEM; } /* Store Global object pointer in Global variable */ @@ -67,7 +66,7 @@ QDF_STATUS wlan_objmgr_global_obj_deinit(void) { /* If it is already destroyed */ if (g_umac_glb_obj == NULL) { - qdf_print("%s: Global object is not allocated\n", __func__); + obj_mgr_err("Global object is not allocated"); return QDF_STATUS_E_FAILURE; } @@ -76,7 +75,7 @@ QDF_STATUS wlan_objmgr_global_obj_deinit(void) qdf_mem_free(g_umac_glb_obj); g_umac_glb_obj = NULL; } else { - qdf_print("PSOCs are leaked can't free global objmgr ctx\n"); + obj_mgr_err("PSOCs are leaked can't free global objmgr ctx"); WLAN_OBJMGR_BUG(0); } @@ -94,7 +93,7 @@ QDF_STATUS wlan_objmgr_register_psoc_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } @@ -102,8 +101,7 @@ QDF_STATUS wlan_objmgr_register_psoc_create_handler( /* If there is a valid entry, return failure */ if (g_umac_glb_obj->psoc_create_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -122,15 +120,14 @@ QDF_STATUS wlan_objmgr_unregister_psoc_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->psoc_create_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -149,15 +146,14 @@ QDF_STATUS wlan_objmgr_register_psoc_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->psoc_destroy_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -176,15 +172,14 @@ QDF_STATUS wlan_objmgr_unregister_psoc_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->psoc_destroy_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -203,15 +198,14 @@ QDF_STATUS wlan_objmgr_register_psoc_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->psoc_status_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -229,15 +223,14 @@ QDF_STATUS wlan_objmgr_unregister_psoc_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->psoc_status_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -256,15 +249,14 @@ QDF_STATUS wlan_objmgr_register_pdev_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->pdev_create_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -283,15 +275,14 @@ QDF_STATUS wlan_objmgr_unregister_pdev_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->pdev_create_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -310,15 +301,14 @@ QDF_STATUS wlan_objmgr_register_pdev_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->pdev_destroy_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -337,15 +327,14 @@ QDF_STATUS wlan_objmgr_unregister_pdev_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->pdev_destroy_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for component %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for Component %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -364,15 +353,14 @@ QDF_STATUS wlan_objmgr_register_pdev_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->pdev_status_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -390,15 +378,14 @@ QDF_STATUS wlan_objmgr_unregister_pdev_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->pdev_status_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for component %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for Component %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -417,15 +404,14 @@ QDF_STATUS wlan_objmgr_register_vdev_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->vdev_create_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -443,15 +429,14 @@ QDF_STATUS wlan_objmgr_unregister_vdev_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->vdev_create_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -469,15 +454,14 @@ QDF_STATUS wlan_objmgr_register_vdev_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->vdev_destroy_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -495,15 +479,14 @@ QDF_STATUS wlan_objmgr_unregister_vdev_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->vdev_destroy_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -521,15 +504,14 @@ QDF_STATUS wlan_objmgr_register_vdev_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->vdev_status_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -547,15 +529,14 @@ QDF_STATUS wlan_objmgr_unregister_vdev_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->vdev_status_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for component %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for Component %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -574,15 +555,14 @@ QDF_STATUS wlan_objmgr_register_peer_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->peer_create_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -601,15 +581,14 @@ QDF_STATUS wlan_objmgr_unregister_peer_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->peer_create_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -627,15 +606,14 @@ QDF_STATUS wlan_objmgr_register_peer_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->peer_destroy_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -653,15 +631,14 @@ QDF_STATUS wlan_objmgr_unregister_peer_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->peer_destroy_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -679,15 +656,14 @@ QDF_STATUS wlan_objmgr_register_peer_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->peer_status_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -705,15 +681,14 @@ QDF_STATUS wlan_objmgr_unregister_peer_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->peer_status_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -789,12 +764,11 @@ void wlan_objmgr_print_ref_ids(qdf_atomic_t *id) uint32_t i; uint32_t pending_ref; - qdf_print(" Pending references of object\n"); + obj_mgr_info("Pending references of object"); for (i = 0; i < WLAN_REF_ID_MAX; i++) { pending_ref = qdf_atomic_read(&id[i]); if (pending_ref) - qdf_print(" %s -- %d\n", string_from_dbgid(i), pending_ref); + obj_mgr_info("%s -- %d", string_from_dbgid(i), pending_ref); } - return; } diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c index a9e49ec40cb6..67a0a1c1cf0d 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c @@ -66,10 +66,21 @@ static QDF_STATUS wlan_objmgr_pdev_object_status( static QDF_STATUS wlan_objmgr_pdev_obj_free(struct wlan_objmgr_pdev *pdev) { + + uint8_t pdev_id; + + if (pdev == NULL) { + obj_mgr_err("pdev obj is NULL"); + QDF_ASSERT(0); + return QDF_STATUS_E_FAILURE; + } + + pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev); + /* Detach PDEV from PSOC PDEV's list */ if (wlan_objmgr_psoc_pdev_detach(pdev->pdev_objmgr.wlan_psoc, pdev) == QDF_STATUS_E_FAILURE) { - qdf_print("%s: PSOC PDEV detach failed\n", __func__); + obj_mgr_err("PSOC PDEV detach failed: pdev-id: %d", pdev_id); return QDF_STATUS_E_FAILURE; } qdf_spinlock_destroy(&pdev->pdev_lock); @@ -90,19 +101,19 @@ struct wlan_objmgr_pdev *wlan_objmgr_pdev_obj_create( QDF_STATUS obj_status; if (psoc == NULL) { - qdf_print("%s:psoc is NULL\n", __func__); + obj_mgr_err("psoc is NULL"); return NULL; } /* Allocate PDEV object's memory */ pdev = qdf_mem_malloc(sizeof(*pdev)); if (pdev == NULL) { - qdf_print("%s:pdev alloc failed\n", __func__); + obj_mgr_err("pdev alloc failed"); return NULL; } /* Attach PDEV with PSOC */ if (wlan_objmgr_psoc_pdev_attach(psoc, pdev) != QDF_STATUS_SUCCESS) { - qdf_print("%s:pdev psoc attach failed\n", __func__); + obj_mgr_err("pdev psoc attach failed"); qdf_mem_free(pdev); return NULL; } @@ -150,8 +161,7 @@ struct wlan_objmgr_pdev *wlan_objmgr_pdev_obj_create( /* Component object failed to be created, clean up the object */ } else if (obj_status == QDF_STATUS_E_FAILURE) { /* Clean up the psoc */ - qdf_print("%s: PDEV component objects allocation failed\n", - __func__); + obj_mgr_err("PDEV component objects allocation failed"); wlan_objmgr_pdev_obj_delete(pdev); return NULL; } @@ -165,14 +175,17 @@ static QDF_STATUS wlan_objmgr_pdev_obj_destroy(struct wlan_objmgr_pdev *pdev) wlan_objmgr_pdev_destroy_handler handler; QDF_STATUS obj_status; void *arg; + uint8_t pdev_id; if (pdev == NULL) { - qdf_print("%s:pdev is NULL\n", __func__); + obj_mgr_err("pdev is NULL"); return QDF_STATUS_E_FAILURE; } + pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev); + if (pdev->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) { - qdf_print("%s:pdev object delete is not invoked\n", __func__); + obj_mgr_err("pdev object delete is not invoked: pdev-id:%d", pdev_id); WLAN_OBJMGR_BUG(0); } @@ -189,8 +202,8 @@ static QDF_STATUS wlan_objmgr_pdev_obj_destroy(struct wlan_objmgr_pdev *pdev) obj_status = wlan_objmgr_pdev_object_status(pdev); if (obj_status == QDF_STATUS_E_FAILURE) { - qdf_print("%s: PDEV component objects destroy failed\n", - __func__); + obj_mgr_err("PDEV component objects destroy failed: pdev-id:%d", + pdev_id); /* Ideally should not happen */ /* This leads to memleak ??? how to handle */ QDF_BUG(0); @@ -209,7 +222,7 @@ static QDF_STATUS wlan_objmgr_pdev_obj_destroy(struct wlan_objmgr_pdev *pdev) QDF_STATUS wlan_objmgr_pdev_obj_delete(struct wlan_objmgr_pdev *pdev) { if (pdev == NULL) { - qdf_print("%s:pdev is NULL\n", __func__); + obj_mgr_err("pdev is NULL"); return QDF_STATUS_E_FAILURE; } /* @@ -241,15 +254,13 @@ QDF_STATUS wlan_objmgr_pdev_component_obj_attach( /* component id is invalid */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component-id %d is not supported\n", - __func__, id); + obj_mgr_err("component-id %d is not supported", id); return QDF_STATUS_MAXCOMP_FAIL; } wlan_pdev_obj_lock(pdev); /* If there is a valid entry, return failure */ if (pdev->pdev_comp_priv_obj[id] != NULL) { - qdf_print("%s: component-%d already have valid pointer\n", - __func__, id); + obj_mgr_err("component-%d already have valid pointer", id); wlan_pdev_obj_unlock(pdev); return QDF_STATUS_E_FAILURE; } @@ -776,7 +787,7 @@ void wlan_objmgr_pdev_get_ref(struct wlan_objmgr_pdev *pdev, wlan_objmgr_ref_dbgid id) { if (pdev == NULL) { - qdf_print("%s: pdev obj is NULL\n", __func__); + obj_mgr_err("pdev obj is NULL"); QDF_ASSERT(0); return; } @@ -790,17 +801,20 @@ EXPORT_SYMBOL(wlan_objmgr_pdev_get_ref); QDF_STATUS wlan_objmgr_pdev_try_get_ref(struct wlan_objmgr_pdev *pdev, wlan_objmgr_ref_dbgid id) { + uint8_t pdev_id; + if (pdev == NULL) { - qdf_print("%s: pdev obj is NULL\n", __func__); + obj_mgr_err("pdev obj is NULL"); QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } wlan_pdev_obj_lock(pdev); + pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev); if (pdev->obj_state == WLAN_OBJ_STATE_LOGICALLY_DELETED) { wlan_pdev_obj_unlock(pdev); - qdf_print("%s: pdev obj is in Deletion Progress state\n", - __func__); + obj_mgr_err("pdev obj is in Deletion Progress state: pdev-id: %d", + pdev_id) ; return QDF_STATUS_E_RESOURCES; } @@ -814,21 +828,24 @@ EXPORT_SYMBOL(wlan_objmgr_pdev_try_get_ref); void wlan_objmgr_pdev_release_ref(struct wlan_objmgr_pdev *pdev, wlan_objmgr_ref_dbgid id) { + uint8_t pdev_id; + if (pdev == NULL) { - qdf_print("%s: pdev obj is NULL\n", __func__); + obj_mgr_err("pdev obj is NULL"); QDF_ASSERT(0); return; } + pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev); + if (!qdf_atomic_read(&pdev->pdev_objmgr.ref_id_dbg[id])) { - qdf_print("%s: pdev ref cnt was not taken by %d\n", - __func__, id); + obj_mgr_err("pdev (id:%d)ref cnt was not taken by %d", pdev_id, id); wlan_objmgr_print_ref_ids(pdev->pdev_objmgr.ref_id_dbg); WLAN_OBJMGR_BUG(0); } if (!qdf_atomic_read(&pdev->pdev_objmgr.ref_cnt)) { - qdf_print("%s: pdev ref cnt is 0\n", __func__); + obj_mgr_err("pdev ref cnt is 0: pdev-id:%d", pdev_id); WLAN_OBJMGR_BUG(0); return; } diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c index 7eb5692dd337..c59760accd03 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c @@ -69,17 +69,32 @@ static QDF_STATUS wlan_objmgr_peer_obj_free(struct wlan_objmgr_peer *peer) { struct wlan_objmgr_psoc *psoc; struct wlan_objmgr_vdev *vdev; + uint8_t *macaddr; + uint8_t vdev_id; + + if (peer == NULL) { + obj_mgr_err("PEER is NULL"); + return QDF_STATUS_E_FAILURE; + } + + macaddr = wlan_peer_get_macaddr(peer); vdev = wlan_peer_get_vdev(peer); if (vdev == NULL) { - qdf_print("%s: VDEV is NULL\n", __func__); + obj_mgr_err("VDEV is NULL for peer(%02x:%02x:%02x:%02x:%02x:%02x)", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); return QDF_STATUS_E_FAILURE; } + vdev_id = wlan_vdev_get_id(vdev); + /* get PSOC from VDEV, if it is NULL, return */ psoc = wlan_vdev_get_psoc(vdev); if (psoc == NULL) { - qdf_print("%s: PSOC is NULL\n", __func__); + obj_mgr_err("PSOC is NULL for peer(%02x:%02x:%02x:%02x:%02x:%02x)", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); return QDF_STATUS_E_FAILURE; } @@ -91,12 +106,17 @@ static QDF_STATUS wlan_objmgr_peer_obj_free(struct wlan_objmgr_peer *peer) /* Detach peer from VDEV's peer list */ if (wlan_objmgr_vdev_peer_detach(vdev, peer) == QDF_STATUS_E_FAILURE) { - qdf_print("%s: Peer VDEV detach failure\n", __func__); + obj_mgr_err("Peer(%02x:%02x:%02x:%02x:%02x:%02x) VDEV detach failure \ + for vdev-id: %d", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5], vdev_id); return QDF_STATUS_E_FAILURE; } /* Detach peer from PSOC's peer list */ if (wlan_objmgr_psoc_peer_detach(psoc, peer) == QDF_STATUS_E_FAILURE) { - qdf_print("%s: Peer PSOC detach failure\n", __func__); + obj_mgr_err("Peer(%02x:%02x:%02x:%02x:%02x:%02x) PSOC detach failure", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); return QDF_STATUS_E_FAILURE; } qdf_spinlock_destroy(&peer->peer_lock); @@ -120,19 +140,25 @@ struct wlan_objmgr_peer *wlan_objmgr_peer_obj_create( uint8_t id; if (vdev == NULL) { - qdf_print("%s: VDEV is NULL\n", __func__); + obj_mgr_err("VDEV is NULL for peer (%02x:%02x:%02x:%02x:%02x:%02x)", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); return NULL; } /* Get psoc, if psoc is NULL, return */ psoc = wlan_vdev_get_psoc(vdev); if (psoc == NULL) { - qdf_print("%s: PSOC is NULL\n", __func__); + obj_mgr_err("PSOC is NULL for peer (%02x:%02x:%02x:%02x:%02x:%02x)", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); return NULL; } /* Allocate memory for peer object */ peer = qdf_mem_malloc(sizeof(*peer)); if (peer == NULL) { - qdf_print("%s: Peer allocation failure\n", __func__); + obj_mgr_err("Peer(%02x:%02x:%02x:%02x:%02x:%02x) allocation failure", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); return NULL; } /* set vdev to peer */ @@ -148,14 +174,20 @@ struct wlan_objmgr_peer *wlan_objmgr_peer_obj_create( /* Attach peer to psoc, psoc maintains the node table for the device */ if (wlan_objmgr_psoc_peer_attach(psoc, peer) != QDF_STATUS_SUCCESS) { - qdf_print("%s: Peer PSOC attach failure\n", __func__); + obj_mgr_err("Peer(%02x:%02x:%02x:%02x:%02x:%02x) \ + PSOC attach failure", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); qdf_mem_free(peer); return NULL; } /* Attach peer to vdev peer table */ if (wlan_objmgr_vdev_peer_attach(vdev, peer) != QDF_STATUS_SUCCESS) { - qdf_print("%s: Peer VDEV attach failure\n", __func__); + obj_mgr_err("Peer(%02x:%02x:%02x:%02x:%02x:%02x) \ + VDEV attach failure", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); /* if attach fails, detach from psoc table before free */ wlan_objmgr_psoc_peer_detach(psoc, peer); qdf_mem_free(peer); @@ -196,8 +228,10 @@ struct wlan_objmgr_peer *wlan_objmgr_peer_obj_create( peer->obj_state = WLAN_OBJ_STATE_PARTIALLY_CREATED; } else if (obj_status == QDF_STATUS_E_FAILURE) { /* Clean up the peer */ - qdf_print("%s: Peer component object alloc failure\n", - __func__); + obj_mgr_err("Peer(%02x:%02x:%02x:%02x:%02x:%02x) \ + component object alloc failure", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); wlan_objmgr_peer_obj_delete(peer); return NULL; } @@ -210,14 +244,20 @@ static QDF_STATUS wlan_objmgr_peer_obj_destroy(struct wlan_objmgr_peer *peer) wlan_objmgr_peer_destroy_handler handler; QDF_STATUS obj_status; void *arg; + uint8_t *macaddr; if (peer == NULL) { - qdf_print("%s: PEER is NULL\n", __func__); + obj_mgr_err("PEER is NULL"); return QDF_STATUS_E_FAILURE; } + macaddr = wlan_peer_get_macaddr(peer); + if (peer->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) { - qdf_print("%s:peer object delete is not invoked\n", __func__); + obj_mgr_err("peer(%02x:%02x:%02x:%02x:%02x:%02x) \ + object delete is not invoked", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); WLAN_OBJMGR_BUG(0); } @@ -250,7 +290,7 @@ static QDF_STATUS wlan_objmgr_peer_obj_destroy(struct wlan_objmgr_peer *peer) QDF_STATUS wlan_objmgr_peer_obj_delete(struct wlan_objmgr_peer *peer) { if (peer == NULL) { - qdf_print("%s: PEER is NULL\n", __func__); + obj_mgr_err("PEER is NULL"); return QDF_STATUS_E_FAILURE; } @@ -501,7 +541,7 @@ void wlan_objmgr_peer_get_ref(struct wlan_objmgr_peer *peer, wlan_objmgr_ref_dbgid id) { if (peer == NULL) { - qdf_print("%s: peer obj is NULL\n", __func__); + obj_mgr_err("peer obj is NULL for %d", id); QDF_ASSERT(0); return; } @@ -516,17 +556,23 @@ EXPORT_SYMBOL(wlan_objmgr_peer_get_ref); QDF_STATUS wlan_objmgr_peer_try_get_ref(struct wlan_objmgr_peer *peer, wlan_objmgr_ref_dbgid id) { + + uint8_t *macaddr; + if (peer == NULL) { - qdf_print("%s: peer obj is NULL\n", __func__); + obj_mgr_err("peer obj is NULL for %d", id); QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } wlan_peer_obj_lock(peer); + macaddr = wlan_peer_get_macaddr(peer); if (peer->obj_state == WLAN_OBJ_STATE_LOGICALLY_DELETED) { wlan_peer_obj_unlock(peer); - qdf_print("%s: peer obj is in Deletion Progress state\n", - __func__); + obj_mgr_err("peer(%02x:%02x:%02x:%02x:%02x:%02x) obj \ + is in Deletion Progress state", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); return QDF_STATUS_E_RESOURCES; } @@ -540,21 +586,30 @@ EXPORT_SYMBOL(wlan_objmgr_peer_try_get_ref); void wlan_objmgr_peer_release_ref(struct wlan_objmgr_peer *peer, wlan_objmgr_ref_dbgid id) { + + uint8_t *macaddr; + if (peer == NULL) { - qdf_print("%s: peer obj is NULL\n", __func__); + obj_mgr_err("peer obj is NULL for %d", id); QDF_ASSERT(0); return; } + macaddr = wlan_peer_get_macaddr(peer); + if (!qdf_atomic_read(&peer->peer_objmgr.ref_id_dbg[id])) { - qdf_print("%s: peer ref cnt was not taken by %d\n", - __func__, id); + obj_mgr_err("peer(%02x:%02x:%02x:%02x:%02x:%02x) \ + ref cnt was not taken by %d", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5], id); wlan_objmgr_print_ref_ids(peer->peer_objmgr.ref_id_dbg); WLAN_OBJMGR_BUG(0); } if (!qdf_atomic_read(&peer->peer_objmgr.ref_cnt)) { - qdf_print("%s: peer ref cnt is 0\n", __func__); + obj_mgr_err("peer(%02x:%02x:%02x:%02x:%02x:%02x) ref cnt is 0", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); WLAN_OBJMGR_BUG(0); return; } diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c index baca628a1605..8f99154e62ec 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c @@ -95,7 +95,7 @@ static QDF_STATUS wlan_objmgr_psoc_obj_free(struct wlan_objmgr_psoc *psoc) /* Detach PSOC from global object's psoc list */ if (wlan_objmgr_psoc_object_detach(psoc) == QDF_STATUS_E_FAILURE) { - qdf_print("%s: PSOC object detach failed\n", __func__); + obj_mgr_err("PSOC object detach failed"); return QDF_STATUS_E_FAILURE; } wlan_objmgr_psoc_peer_list_deinit(&psoc->soc_objmgr.peer_list); @@ -120,7 +120,7 @@ struct wlan_objmgr_psoc *wlan_objmgr_psoc_obj_create(uint32_t phy_version, psoc = qdf_mem_malloc(sizeof(*psoc)); if (psoc == NULL) { - qdf_print("%s: PSOC allocation failed\n", __func__); + obj_mgr_err("PSOC allocation failed"); return NULL; } qdf_spinlock_create(&psoc->psoc_lock); @@ -167,8 +167,7 @@ struct wlan_objmgr_psoc *wlan_objmgr_psoc_obj_create(uint32_t phy_version, psoc->obj_state = WLAN_OBJ_STATE_PARTIALLY_CREATED; } else if (obj_status == QDF_STATUS_E_FAILURE) { /* Component object failed to be created, clean up the object */ - qdf_print("%s: PSOC component objects allocation failed\n", - __func__); + obj_mgr_err("PSOC component objects allocation failed"); /* Clean up the psoc */ wlan_objmgr_psoc_obj_delete(psoc); return NULL; @@ -176,7 +175,7 @@ struct wlan_objmgr_psoc *wlan_objmgr_psoc_obj_create(uint32_t phy_version, if (wlan_objmgr_psoc_object_attach(psoc) != QDF_STATUS_SUCCESS) { - qdf_print("%s: PSOC object attach failed\n", __func__); + obj_mgr_err("PSOC object attach failed"); wlan_objmgr_psoc_obj_delete(psoc); return NULL; } @@ -193,12 +192,12 @@ static QDF_STATUS wlan_objmgr_psoc_obj_destroy(struct wlan_objmgr_psoc *psoc) void *arg; if (psoc == NULL) { - qdf_print("%s:psoc is NULL\n", __func__); + obj_mgr_err("psoc is NULL"); return QDF_STATUS_E_FAILURE; } if (psoc->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) { - qdf_print("%s:psoc object delete is not invoked\n", __func__); + obj_mgr_err("psoc object delete is not invoked"); WLAN_OBJMGR_BUG(0); } @@ -215,7 +214,7 @@ static QDF_STATUS wlan_objmgr_psoc_obj_destroy(struct wlan_objmgr_psoc *psoc) obj_status = wlan_objmgr_psoc_object_status(psoc); if (obj_status == QDF_STATUS_E_FAILURE) { - qdf_print("%s: PSOC component object free failed\n", __func__); + obj_mgr_err("PSOC component object free failed"); /* Ideally should not happen * This leads to memleak, BUG_ON to find which component * delete notification failed and fix it. @@ -237,7 +236,7 @@ static QDF_STATUS wlan_objmgr_psoc_obj_destroy(struct wlan_objmgr_psoc *psoc) QDF_STATUS wlan_objmgr_psoc_obj_delete(struct wlan_objmgr_psoc *psoc) { if (psoc == NULL) { - qdf_print("%s:psoc is NULL\n", __func__); + obj_mgr_err("psoc is NULL"); return QDF_STATUS_E_FAILURE; } /* @@ -1353,7 +1352,7 @@ QDF_STATUS wlan_objmgr_psoc_peer_detach(struct wlan_objmgr_psoc *psoc, QDF_STATUS_E_FAILURE) { qdf_spin_unlock_bh(&peer_list->peer_list_lock); wlan_psoc_obj_unlock(psoc); - qdf_print("%s: Failed to detach peer\n", __func__); + obj_mgr_err("Failed to detach peer"); return QDF_STATUS_E_FAILURE; } qdf_spin_unlock_bh(&peer_list->peer_list_lock); @@ -1622,7 +1621,7 @@ void wlan_objmgr_psoc_get_ref(struct wlan_objmgr_psoc *psoc, wlan_objmgr_ref_dbgid id) { if (psoc == NULL) { - qdf_print("%s: psoc obj is NULL\n", __func__); + obj_mgr_err("psoc obj is NULL for id:%d", id); QDF_ASSERT(0); return; } @@ -1637,7 +1636,7 @@ QDF_STATUS wlan_objmgr_psoc_try_get_ref(struct wlan_objmgr_psoc *psoc, wlan_objmgr_ref_dbgid id) { if (psoc == NULL) { - qdf_print("%s: psoc obj is NULL\n", __func__); + obj_mgr_err("psoc obj is NULL for id:%d", id); QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } @@ -1645,8 +1644,7 @@ QDF_STATUS wlan_objmgr_psoc_try_get_ref(struct wlan_objmgr_psoc *psoc, wlan_psoc_obj_lock(psoc); if (psoc->obj_state == WLAN_OBJ_STATE_LOGICALLY_DELETED) { wlan_psoc_obj_unlock(psoc); - qdf_print("%s: psoc obj is in Deletion Progress staet\n", - __func__); + obj_mgr_err("Called by %d, psoc obj is in Deletion Progress state", id); return QDF_STATUS_E_RESOURCES; } @@ -1662,20 +1660,19 @@ void wlan_objmgr_psoc_release_ref(struct wlan_objmgr_psoc *psoc, wlan_objmgr_ref_dbgid id) { if (psoc == NULL) { - qdf_print("%s: psoc obj is NULL\n", __func__); + obj_mgr_err("psoc obj is NULLi for id:%d", id); QDF_ASSERT(0); return; } if (!qdf_atomic_read(&psoc->soc_objmgr.ref_id_dbg[id])) { - qdf_print("%s: psoc ref cnt was not taken by %d\n", - __func__, id); + obj_mgr_err("psoc ref cnt was not taken by %d", id); wlan_objmgr_print_ref_ids(psoc->soc_objmgr.ref_id_dbg); WLAN_OBJMGR_BUG(0); } if (!qdf_atomic_read(&psoc->soc_objmgr.ref_cnt)) { - qdf_print("%s: psoc ref cnt is 0\n", __func__); + obj_mgr_err("psoc ref cnt is 0"); WLAN_OBJMGR_BUG(0); return; } @@ -1699,7 +1696,7 @@ static void wlan_objmgr_psoc_peer_ref_print(struct wlan_objmgr_psoc *psoc, macaddr = wlan_peer_get_macaddr(peer); wlan_peer_obj_unlock(peer); - qdf_print(" Peer MAC is %02x:%02x:%02x:%02x:%02x:%02x\n", + obj_mgr_info("Peer MAC is %02x:%02x:%02x:%02x:%02x:%02x", macaddr[0], macaddr[1], macaddr[2], macaddr[3], macaddr[4], macaddr[5]); wlan_objmgr_print_ref_ids(peer->peer_objmgr.ref_id_dbg); @@ -1714,7 +1711,7 @@ static void wlan_objmgr_psoc_vdev_ref_print(struct wlan_objmgr_psoc *psoc, wlan_vdev_obj_lock(vdev); id = wlan_vdev_get_id(vdev); wlan_vdev_obj_unlock(vdev); - qdf_print(" Vdev ID is %d\n", id); + obj_mgr_info("Vdev ID is %d", id); wlan_objmgr_print_ref_ids(vdev->vdev_objmgr.ref_id_dbg); } @@ -1726,9 +1723,9 @@ static void wlan_objmgr_psoc_pdev_ref_print(struct wlan_objmgr_psoc *psoc, uint8_t id; wlan_pdev_obj_lock(pdev); - id = pdev->pdev_objmgr.wlan_pdev_id; + id = wlan_objmgr_pdev_get_pdev_id(pdev); wlan_pdev_obj_unlock(pdev); - qdf_print(" pdev ID is %d\n", id); + obj_mgr_info("pdev ID is %d", id); wlan_objmgr_print_ref_ids(pdev->pdev_objmgr.ref_id_dbg); } @@ -1736,20 +1733,20 @@ static void wlan_objmgr_psoc_pdev_ref_print(struct wlan_objmgr_psoc *psoc, QDF_STATUS wlan_objmgr_print_ref_all_objects_per_psoc( struct wlan_objmgr_psoc *psoc) { - qdf_print(" Ref counts of PEER\n"); - wlan_objmgr_iterate_obj_list_all(psoc, WLAN_PEER_OP, - wlan_objmgr_psoc_peer_ref_print, NULL, 1, - WLAN_OBJMGR_ID); - qdf_print(" Ref counts of VDEV\n"); - wlan_objmgr_iterate_obj_list_all(psoc, WLAN_VDEV_OP, - wlan_objmgr_psoc_vdev_ref_print, NULL, 1, - WLAN_OBJMGR_ID); - qdf_print(" Ref counts of PDEV\n"); - wlan_objmgr_iterate_obj_list_all(psoc, WLAN_PDEV_OP, - wlan_objmgr_psoc_pdev_ref_print, NULL, 1, - WLAN_OBJMGR_ID); + obj_mgr_info("Ref counts of PEER"); + wlan_objmgr_iterate_obj_list(psoc, WLAN_PEER_OP, + wlan_objmgr_psoc_peer_ref_print, NULL, 1, + WLAN_OBJMGR_ID); + obj_mgr_info("Ref counts of VDEV"); + wlan_objmgr_iterate_obj_list(psoc, WLAN_VDEV_OP, + wlan_objmgr_psoc_vdev_ref_print, NULL, 1, + WLAN_OBJMGR_ID); + obj_mgr_info("Ref counts of PDEV"); + wlan_objmgr_iterate_obj_list(psoc, WLAN_PDEV_OP, + wlan_objmgr_psoc_pdev_ref_print, NULL, 1, + WLAN_OBJMGR_ID); - qdf_print(" Ref counts of PSOC\n"); + obj_mgr_info(" Ref counts of PSOC"); wlan_objmgr_print_ref_ids(psoc->soc_objmgr.ref_id_dbg); return QDF_STATUS_SUCCESS; @@ -1760,7 +1757,7 @@ QDF_STATUS wlan_objmgr_psoc_set_user_config(struct wlan_objmgr_psoc *psoc, struct wlan_objmgr_psoc_user_config *user_config_data) { if (user_config_data == NULL) { - qdf_print("%s:user_config_data is NULL\n", __func__); + obj_mgr_err("user_config_data is NULL"); QDF_BUG(0); return QDF_STATUS_E_FAILURE; } diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c index 510610a42c93..0e07247c0d96 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c @@ -75,10 +75,15 @@ static QDF_STATUS wlan_objmgr_vdev_obj_free(struct wlan_objmgr_vdev *vdev) { struct wlan_objmgr_pdev *pdev; + if (vdev == NULL) { + obj_mgr_err("vdev is NULL"); + return QDF_STATUS_E_FAILURE; + } /* if PDEV is NULL, return */ pdev = wlan_vdev_get_pdev(vdev); if (pdev == NULL) { - qdf_print("%s:pdev is NULL\n", __func__); + obj_mgr_err("pdev is NULL for vdev-id: %d", + vdev->vdev_objmgr.vdev_id); return QDF_STATUS_E_FAILURE; } @@ -113,26 +118,28 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create( QDF_STATUS obj_status; if (pdev == NULL) { - qdf_print("%s: pdev is NULL\n", __func__); + obj_mgr_err("pdev is NULL"); return NULL; } psoc = wlan_pdev_get_psoc(pdev); /* PSOC is NULL */ if (psoc == NULL) { - qdf_print("%s: psoc is NULL\n", __func__); + obj_mgr_err("psoc is NULL for pdev-id:%d", + pdev->pdev_objmgr.wlan_pdev_id); return NULL; } /* Allocate vdev object memory */ vdev = qdf_mem_malloc(sizeof(*vdev)); if (vdev == NULL) { - qdf_print("%s: Memory allocation failure\n", __func__); + obj_mgr_err("Memory allocation failure"); return NULL; } /* Attach VDEV to PSOC VDEV's list */ if (wlan_objmgr_psoc_vdev_attach(psoc, vdev) != QDF_STATUS_SUCCESS) { + obj_mgr_err("psoc vdev attach failed for vdev-id:%d", + vdev->vdev_objmgr.vdev_id); qdf_mem_free(vdev); - qdf_print("%s: psoc vdev attach failed\n", __func__); return NULL; } /* Store pdev in vdev */ @@ -140,7 +147,8 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create( /* Attach vdev to PDEV */ if (wlan_objmgr_pdev_vdev_attach(pdev, vdev) != QDF_STATUS_SUCCESS) { - qdf_print("%s: pdev vdev attach failed\n", __func__); + obj_mgr_err("pdev vdev attach failed for vdev-id:%d", + vdev->vdev_objmgr.vdev_id); wlan_objmgr_psoc_vdev_detach(psoc, vdev); qdf_mem_free(vdev); return NULL; @@ -207,8 +215,8 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create( } else if (obj_status == QDF_STATUS_E_FAILURE) { /* Clean up the psoc */ wlan_objmgr_vdev_obj_delete(vdev); - qdf_print("%s:VDEV component objects creation failed\n", - __func__); + obj_mgr_err("VDEV component objects creation failed for vdev-id:%d", + vdev->vdev_objmgr.vdev_id); return NULL; } return vdev; @@ -221,14 +229,18 @@ static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev) wlan_objmgr_vdev_destroy_handler handler; QDF_STATUS obj_status; void *arg; + uint8_t vdev_id; if (vdev == NULL) { - qdf_print("%s:vdev is NULL\n", __func__); + obj_mgr_err("vdev is NULL"); return QDF_STATUS_E_FAILURE; } + vdev_id = wlan_vdev_get_id(vdev); + if (vdev->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) { - qdf_print("%s:vdev object delete is not invoked\n", __func__); + obj_mgr_err("vdev object delete is not invoked: vdev-id:%d", + wlan_vdev_get_id(vdev)); WLAN_OBJMGR_BUG(0); } @@ -245,7 +257,7 @@ static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev) obj_status = wlan_objmgr_vdev_object_status(vdev); if (obj_status == QDF_STATUS_E_FAILURE) { - qdf_print("%s: VDEV object deletion failed\n", __func__); + obj_mgr_err("VDEV object deletion failed: vdev-id: %d", vdev_id); /* Ideally should not happen */ /* This leads to memleak ??? how to handle */ QDF_BUG(0); @@ -265,7 +277,7 @@ static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev) QDF_STATUS wlan_objmgr_vdev_obj_delete(struct wlan_objmgr_vdev *vdev) { if (vdev == NULL) { - qdf_print("%s:vdev is NULL\n", __func__); + obj_mgr_err("vdev is NULL"); return QDF_STATUS_E_FAILURE; } /* @@ -424,17 +436,19 @@ QDF_STATUS wlan_objmgr_iterate_peerobj_list( qdf_list_t *peer_list = NULL; struct wlan_objmgr_peer *peer = NULL; struct wlan_objmgr_peer *peer_next = NULL; + uint8_t vdev_id; if (vdev == NULL) { - qdf_print("%s: VDEV NULL\n", __func__); + obj_mgr_err("VDEV is NULL"); return QDF_STATUS_E_FAILURE; } wlan_vdev_obj_lock(vdev); + vdev_id = wlan_vdev_get_id(vdev); if (vdev->obj_state == WLAN_OBJ_STATE_LOGICALLY_DELETED) { wlan_vdev_obj_unlock(vdev); - qdf_print("%s: VDEV is in delete progress\n", __func__); + obj_mgr_err("VDEV is in delete progress: vdev-id:%d", vdev_id); return QDF_STATUS_E_FAILURE; } wlan_objmgr_vdev_get_ref(vdev, dbg_id); @@ -684,7 +698,7 @@ void wlan_objmgr_vdev_get_ref(struct wlan_objmgr_vdev *vdev, wlan_objmgr_ref_dbgid id) { if (vdev == NULL) { - qdf_print("%s: vdev obj is NULL\n", __func__); + obj_mgr_err("vdev obj is NULL for id:%d", id); QDF_ASSERT(0); return; } @@ -699,17 +713,20 @@ EXPORT_SYMBOL(wlan_objmgr_vdev_get_ref); QDF_STATUS wlan_objmgr_vdev_try_get_ref(struct wlan_objmgr_vdev *vdev, wlan_objmgr_ref_dbgid id) { + uint8_t vdev_id; + if (vdev == NULL) { - qdf_print("%s: vdev obj is NULL\n", __func__); + obj_mgr_err("vdev obj is NULL for id:%d", id); QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } wlan_vdev_obj_lock(vdev); + vdev_id = wlan_vdev_get_id(vdev); if (vdev->obj_state == WLAN_OBJ_STATE_LOGICALLY_DELETED) { wlan_vdev_obj_unlock(vdev); - qdf_print("%s: vdev obj is in Deletion Progress state\n", - __func__); + obj_mgr_err("called by %d, vdev obj is in Deletion Progress state: \ + vdev-id:%d", id, vdev_id); return QDF_STATUS_E_RESOURCES; } @@ -724,21 +741,24 @@ EXPORT_SYMBOL(wlan_objmgr_vdev_try_get_ref); void wlan_objmgr_vdev_release_ref(struct wlan_objmgr_vdev *vdev, wlan_objmgr_ref_dbgid id) { + uint8_t vdev_id; + if (vdev == NULL) { - qdf_print("%s: vdev obj is NULL\n", __func__); + obj_mgr_err("vdev obj is NULL for id:%d", id); QDF_ASSERT(0); return; } + vdev_id = wlan_vdev_get_id(vdev); + if (!qdf_atomic_read(&vdev->vdev_objmgr.ref_id_dbg[id])) { - qdf_print("%s: vdev ref cnt was not taken by %d\n", - __func__, id); + obj_mgr_err("vdev (id:%d)ref cnt was not taken by %d", vdev_id, id); wlan_objmgr_print_ref_ids(vdev->vdev_objmgr.ref_id_dbg); WLAN_OBJMGR_BUG(0); } if (!qdf_atomic_read(&vdev->vdev_objmgr.ref_cnt)) { - qdf_print("%s: vdev ref cnt is 0\n", __func__); + obj_mgr_err("vdev ref cnt is 0"); WLAN_OBJMGR_BUG(0); return; } From d9ac9a2abeb8c4aed7486047ee7421e49e4ac262 Mon Sep 17 00:00:00 2001 From: Sandeep Puligilla Date: Fri, 2 Jun 2017 18:45:07 -0700 Subject: [PATCH 3/3] qcacmn: Increase scan cancel sync time Scan command timeout value is 30secs and scan cancel sync waiting time is 5sec due to this in failure scenario scan timeout callback is getting triggered very late and causing crash in HDD. Increase scan cancel sync timeout value equal to scan command timeout value. Change-Id: I7b98d26ac5d97039714a431030e47c463d3a670e CRs-Fixed: 2048167 --- umac/scan/dispatcher/inc/wlan_scan_public_structs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/umac/scan/dispatcher/inc/wlan_scan_public_structs.h b/umac/scan/dispatcher/inc/wlan_scan_public_structs.h index 84f837896d06..d413547b7dfe 100644 --- a/umac/scan/dispatcher/inc/wlan_scan_public_structs.h +++ b/umac/scan/dispatcher/inc/wlan_scan_public_structs.h @@ -47,7 +47,7 @@ typedef uint32_t wlan_scan_id; #define SCM_BSS_CAP_VALUE_5GHZ 2 #define SCM_CANCEL_SCAN_WAIT_TIME 50 -#define SCM_CANCEL_SCAN_WAIT_ITERATION 100 +#define SCM_CANCEL_SCAN_WAIT_ITERATION 600 #define INVAL_SCAN_ID 0xFFFFFFFF #define INVAL_VDEV_ID 0xFFFFFFFF