qcacmn: pkt_log: Use qdf_spin_lock APIs debug infrastructure
Use QDF spin_lock APIs so that we can make use the debug infra. This will help to identify catch issue related to unbalanced lock operations or unexpectedely long locks. Change-Id: I318bcb90340d98813f19862fda14e6ada30bbed6 CRs-Fixed: 2349308
This commit is contained in:

committed by
nshrivas

parent
f8ccc18f6a
commit
c6e684b128
@@ -33,10 +33,11 @@
|
|||||||
#define NO_REG_FUNCS 4
|
#define NO_REG_FUNCS 4
|
||||||
|
|
||||||
/* Locking interface for pktlog */
|
/* Locking interface for pktlog */
|
||||||
#define PKTLOG_LOCK_INIT(_pl_info) spin_lock_init(&(_pl_info)->log_lock)
|
#define PKTLOG_LOCK_INIT(_pl_info) qdf_spinlock_create(&(_pl_info)->log_lock)
|
||||||
#define PKTLOG_LOCK_DESTROY(_pl_info)
|
#define PKTLOG_LOCK_DESTROY(_pl_info) \
|
||||||
#define PKTLOG_LOCK(_pl_info) spin_lock(&(_pl_info)->log_lock)
|
qdf_spinlock_destroy(&(_pl_info)->log_lock)
|
||||||
#define PKTLOG_UNLOCK(_pl_info) spin_unlock(&(_pl_info)->log_lock)
|
#define PKTLOG_LOCK(_pl_info) qdf_spin_lock_bh(&(_pl_info)->log_lock)
|
||||||
|
#define PKTLOG_UNLOCK(_pl_info) qdf_spin_unlock_bh(&(_pl_info)->log_lock)
|
||||||
|
|
||||||
#define PKTLOG_MODE_SYSTEM 1
|
#define PKTLOG_MODE_SYSTEM 1
|
||||||
#define PKTLOG_MODE_ADAPTER 2
|
#define PKTLOG_MODE_ADAPTER 2
|
||||||
|
@@ -99,7 +99,7 @@ struct ath_pktlog_info {
|
|||||||
|
|
||||||
/* Size of buffer in bytes */
|
/* Size of buffer in bytes */
|
||||||
int32_t buf_size;
|
int32_t buf_size;
|
||||||
spinlock_t log_lock;
|
qdf_spinlock_t log_lock;
|
||||||
struct mutex pktlog_mutex;
|
struct mutex pktlog_mutex;
|
||||||
|
|
||||||
/* Threshold of TCP SACK packets for triggered stop */
|
/* Threshold of TCP SACK packets for triggered stop */
|
||||||
|
@@ -112,13 +112,13 @@ int pktlog_alloc_buf(struct hif_opaque_softc *scn)
|
|||||||
|
|
||||||
page_cnt = (sizeof(*(pl_info->buf)) + pl_info->buf_size) / PAGE_SIZE;
|
page_cnt = (sizeof(*(pl_info->buf)) + pl_info->buf_size) / PAGE_SIZE;
|
||||||
|
|
||||||
spin_lock_bh(&pl_info->log_lock);
|
qdf_spin_lock_bh(&pl_info->log_lock);
|
||||||
if (pl_info->buf != NULL) {
|
if (pl_info->buf != NULL) {
|
||||||
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
printk(PKTLOG_TAG "Buffer is already in use\n");
|
printk(PKTLOG_TAG "Buffer is already in use\n");
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
|
|
||||||
buffer = vmalloc((page_cnt + 2) * PAGE_SIZE);
|
buffer = vmalloc((page_cnt + 2) * PAGE_SIZE);
|
||||||
if (buffer == NULL) {
|
if (buffer == NULL) {
|
||||||
@@ -139,12 +139,12 @@ int pktlog_alloc_buf(struct hif_opaque_softc *scn)
|
|||||||
SetPageReserved(vpg);
|
SetPageReserved(vpg);
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_bh(&pl_info->log_lock);
|
qdf_spin_lock_bh(&pl_info->log_lock);
|
||||||
if (pl_info->buf != NULL)
|
if (pl_info->buf != NULL)
|
||||||
pktlog_release_buf(scn);
|
pktlog_release_buf(scn);
|
||||||
|
|
||||||
pl_info->buf = buffer;
|
pl_info->buf = buffer;
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -514,13 +514,13 @@ static void pktlog_detach(struct hif_opaque_softc *scn)
|
|||||||
remove_proc_entry(WLANDEV_BASENAME, g_pktlog_pde);
|
remove_proc_entry(WLANDEV_BASENAME, g_pktlog_pde);
|
||||||
pktlog_sysctl_unregister(pl_dev);
|
pktlog_sysctl_unregister(pl_dev);
|
||||||
|
|
||||||
spin_lock_bh(&pl_info->log_lock);
|
qdf_spin_lock_bh(&pl_info->log_lock);
|
||||||
|
|
||||||
if (pl_info->buf) {
|
if (pl_info->buf) {
|
||||||
pktlog_release_buf(scn);
|
pktlog_release_buf(scn);
|
||||||
pl_dev->tgt_pktlog_alloced = false;
|
pl_dev->tgt_pktlog_alloced = false;
|
||||||
}
|
}
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
pktlog_cleanup(pl_info);
|
pktlog_cleanup(pl_info);
|
||||||
|
|
||||||
if (pl_dev) {
|
if (pl_dev) {
|
||||||
@@ -700,14 +700,14 @@ pktlog_read_proc_entry(char *buf, size_t nbytes, loff_t *ppos,
|
|||||||
int fold_offset, ppos_data, cur_rd_offset, cur_wr_offset;
|
int fold_offset, ppos_data, cur_rd_offset, cur_wr_offset;
|
||||||
struct ath_pktlog_buf *log_buf;
|
struct ath_pktlog_buf *log_buf;
|
||||||
|
|
||||||
spin_lock_bh(&pl_info->log_lock);
|
qdf_spin_lock_bh(&pl_info->log_lock);
|
||||||
log_buf = pl_info->buf;
|
log_buf = pl_info->buf;
|
||||||
|
|
||||||
*read_complete = false;
|
*read_complete = false;
|
||||||
|
|
||||||
if (log_buf == NULL) {
|
if (log_buf == NULL) {
|
||||||
*read_complete = true;
|
*read_complete = true;
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -824,7 +824,7 @@ rd_done:
|
|||||||
*read_complete = true;
|
*read_complete = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
return ret_val;
|
return ret_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -849,11 +849,11 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
|
|||||||
if (!pl_info)
|
if (!pl_info)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
spin_lock_bh(&pl_info->log_lock);
|
qdf_spin_lock_bh(&pl_info->log_lock);
|
||||||
log_buf = pl_info->buf;
|
log_buf = pl_info->buf;
|
||||||
|
|
||||||
if (log_buf == NULL) {
|
if (log_buf == NULL) {
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -862,7 +862,7 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
|
|||||||
* When issuing cat command, ensure to send
|
* When issuing cat command, ensure to send
|
||||||
* pktlog disable command first.
|
* pktlog disable command first.
|
||||||
*/
|
*/
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -880,14 +880,14 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
|
|||||||
|
|
||||||
if (*ppos < bufhdr_size) {
|
if (*ppos < bufhdr_size) {
|
||||||
count = QDF_MIN((bufhdr_size - *ppos), rem_len);
|
count = QDF_MIN((bufhdr_size - *ppos), rem_len);
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
if (copy_to_user(buf, ((char *)&log_buf->bufhdr) + *ppos,
|
if (copy_to_user(buf, ((char *)&log_buf->bufhdr) + *ppos,
|
||||||
count)) {
|
count)) {
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
rem_len -= count;
|
rem_len -= count;
|
||||||
ret_val += count;
|
ret_val += count;
|
||||||
spin_lock_bh(&pl_info->log_lock);
|
qdf_spin_lock_bh(&pl_info->log_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
start_offset = log_buf->rd_offset;
|
start_offset = log_buf->rd_offset;
|
||||||
@@ -929,7 +929,7 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
|
|||||||
goto rd_done;
|
goto rd_done;
|
||||||
|
|
||||||
count = QDF_MIN(rem_len, (end_offset - ppos_data + 1));
|
count = QDF_MIN(rem_len, (end_offset - ppos_data + 1));
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
|
|
||||||
if (copy_to_user(buf + ret_val,
|
if (copy_to_user(buf + ret_val,
|
||||||
log_buf->log_data + ppos_data, count)) {
|
log_buf->log_data + ppos_data, count)) {
|
||||||
@@ -938,11 +938,11 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
|
|||||||
|
|
||||||
ret_val += count;
|
ret_val += count;
|
||||||
rem_len -= count;
|
rem_len -= count;
|
||||||
spin_lock_bh(&pl_info->log_lock);
|
qdf_spin_lock_bh(&pl_info->log_lock);
|
||||||
} else {
|
} else {
|
||||||
if (ppos_data <= fold_offset) {
|
if (ppos_data <= fold_offset) {
|
||||||
count = QDF_MIN(rem_len, (fold_offset - ppos_data + 1));
|
count = QDF_MIN(rem_len, (fold_offset - ppos_data + 1));
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
if (copy_to_user(buf + ret_val,
|
if (copy_to_user(buf + ret_val,
|
||||||
log_buf->log_data + ppos_data,
|
log_buf->log_data + ppos_data,
|
||||||
count)) {
|
count)) {
|
||||||
@@ -950,7 +950,7 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
|
|||||||
}
|
}
|
||||||
ret_val += count;
|
ret_val += count;
|
||||||
rem_len -= count;
|
rem_len -= count;
|
||||||
spin_lock_bh(&pl_info->log_lock);
|
qdf_spin_lock_bh(&pl_info->log_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rem_len == 0)
|
if (rem_len == 0)
|
||||||
@@ -962,7 +962,7 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
|
|||||||
|
|
||||||
if (ppos_data <= end_offset) {
|
if (ppos_data <= end_offset) {
|
||||||
count = QDF_MIN(rem_len, (end_offset - ppos_data + 1));
|
count = QDF_MIN(rem_len, (end_offset - ppos_data + 1));
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
if (copy_to_user(buf + ret_val,
|
if (copy_to_user(buf + ret_val,
|
||||||
log_buf->log_data + ppos_data,
|
log_buf->log_data + ppos_data,
|
||||||
count)) {
|
count)) {
|
||||||
@@ -970,7 +970,7 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
|
|||||||
}
|
}
|
||||||
ret_val += count;
|
ret_val += count;
|
||||||
rem_len -= count;
|
rem_len -= count;
|
||||||
spin_lock_bh(&pl_info->log_lock);
|
qdf_spin_lock_bh(&pl_info->log_lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -981,7 +981,7 @@ rd_done:
|
|||||||
}
|
}
|
||||||
*ppos += ret_val;
|
*ppos += ret_val;
|
||||||
|
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
return ret_val;
|
return ret_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -688,7 +688,7 @@ static int __pktlog_enable(struct hif_opaque_softc *scn, int32_t log_state,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_bh(&pl_info->log_lock);
|
qdf_spin_lock_bh(&pl_info->log_lock);
|
||||||
pl_info->buf->bufhdr.version = CUR_PKTLOG_VER;
|
pl_info->buf->bufhdr.version = CUR_PKTLOG_VER;
|
||||||
pl_info->buf->bufhdr.magic_num = PKTLOG_MAGIC_NUM;
|
pl_info->buf->bufhdr.magic_num = PKTLOG_MAGIC_NUM;
|
||||||
pl_info->buf->wr_offset = 0;
|
pl_info->buf->wr_offset = 0;
|
||||||
@@ -697,7 +697,7 @@ static int __pktlog_enable(struct hif_opaque_softc *scn, int32_t log_state,
|
|||||||
pl_info->buf->bytes_written = 0;
|
pl_info->buf->bytes_written = 0;
|
||||||
pl_info->buf->msg_index = 1;
|
pl_info->buf->msg_index = 1;
|
||||||
pl_info->buf->offset = PKTLOG_READ_OFFSET;
|
pl_info->buf->offset = PKTLOG_READ_OFFSET;
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
|
|
||||||
pl_info->start_time_thruput = os_get_timestamp();
|
pl_info->start_time_thruput = os_get_timestamp();
|
||||||
pl_info->start_time_per = pl_info->start_time_thruput;
|
pl_info->start_time_per = pl_info->start_time_thruput;
|
||||||
@@ -833,14 +833,14 @@ static int __pktlog_setsize(struct hif_opaque_softc *scn, int32_t size)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_bh(&pl_info->log_lock);
|
qdf_spin_lock_bh(&pl_info->log_lock);
|
||||||
if (pl_info->buf != NULL) {
|
if (pl_info->buf != NULL) {
|
||||||
if (pl_dev->is_pktlog_cb_subscribed &&
|
if (pl_dev->is_pktlog_cb_subscribed &&
|
||||||
wdi_pktlog_unsubscribe(pdev, pl_info->log_state)) {
|
wdi_pktlog_unsubscribe(pdev, pl_info->log_state)) {
|
||||||
pl_info->curr_pkt_state =
|
pl_info->curr_pkt_state =
|
||||||
PKTLOG_OPR_NOT_IN_PROGRESS;
|
PKTLOG_OPR_NOT_IN_PROGRESS;
|
||||||
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
qdf_print("Cannot unsubscribe pktlog from the WDI");
|
qdf_print("Cannot unsubscribe pktlog from the WDI");
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
pktlog_release_buf(scn);
|
pktlog_release_buf(scn);
|
||||||
@@ -853,7 +853,7 @@ static int __pktlog_setsize(struct hif_opaque_softc *scn, int32_t size)
|
|||||||
pl_info->buf_size = size;
|
pl_info->buf_size = size;
|
||||||
}
|
}
|
||||||
pl_info->curr_pkt_state = PKTLOG_OPR_NOT_IN_PROGRESS;
|
pl_info->curr_pkt_state = PKTLOG_OPR_NOT_IN_PROGRESS;
|
||||||
spin_unlock_bh(&pl_info->log_lock);
|
qdf_spin_unlock_bh(&pl_info->log_lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user