Skip to content
This repository has been archived by the owner on Aug 29, 2024. It is now read-only.

Commit

Permalink
ASoC: lsm: Do not create any wakeup_source for keyword detection
Browse files Browse the repository at this point in the history
This commit was creating unnecessary wakeup sources in root with illegal names containing spaces
For example "Listen [0-9] Audio Service"

Listen [0-9] Audio Service are common dai links defined in individual SOC specific codec files
and as these dai links are registed on msm-lse-client platform they were being created as a file
in linux root with illegal spaces in their name.

So, avoid creating wakeup sources with such names as they are not needed for anything critical

Fixes: wakeup_stats denials
Side Effects: None

This reverts commit b8348e7cb7a90a82ef9d75cc605b039f6bf7e7e9.

Change-Id: I7a36172c48d91afbc90e4e3058e178982db0ff27
Signed-off-by: UtsavBalar1231 <utsavbalar1231@gmail.com>
  • Loading branch information
UtsavBalar1231 committed Dec 6, 2022
1 parent 6cf7ef3 commit 1a041f0
Showing 1 changed file with 3 additions and 35 deletions.
38 changes: 3 additions & 35 deletions techpack/audio/asoc/msm-lsm-client.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@
#define CAPTURE_MIN_PERIOD_SIZE 320
#define LISTEN_MAX_STATUS_PAYLOAD_SIZE 256

#define WAKELOCK_TIMEOUT 2000

#define LAB_BUFFER_ALLOC 1
#define LAB_BUFFER_DEALLOC 0

Expand Down Expand Up @@ -93,7 +91,6 @@ struct lsm_priv {
int xrun_count;
int xrun_index;
spinlock_t xrun_lock;
struct wakeup_source *ws;
};

enum { /* lsm session states */
Expand Down Expand Up @@ -221,8 +218,6 @@ static void lsm_event_handler(uint32_t opcode, uint32_t token,
}
rtd = substream->private_data;

pm_wakeup_ws_event(prtd->ws, WAKELOCK_TIMEOUT, true);
dev_dbg(rtd->dev, "%s: opcode %x\n", __func__, opcode);
switch (opcode) {
case LSM_DATA_EVENT_READ_DONE: {
int rc;
Expand All @@ -236,13 +231,11 @@ static void lsm_event_handler(uint32_t opcode, uint32_t token,
"%s: EVENT_READ_DONE invalid callback, session %d callback %d payload %pK",
__func__, prtd->lsm_client->session,
token, read_done);
__pm_relax(prtd->ws);
return;
}
if (atomic_read(&prtd->read_abort)) {
dev_dbg(rtd->dev,
"%s: read abort set skip data\n", __func__);
__pm_relax(prtd->ws);
return;
}
if (!lsm_lab_buffer_sanity(prtd, read_done, &buf_index)) {
Expand All @@ -255,7 +248,6 @@ static void lsm_event_handler(uint32_t opcode, uint32_t token,
"%s: Invalid index %d buf_index max cnt %d\n",
__func__, buf_index,
prtd->lsm_client->out_hw_params.period_count);
__pm_relax(prtd->ws);
return;
}
spin_lock_irqsave(&prtd->xrun_lock, flags);
Expand Down Expand Up @@ -293,7 +285,6 @@ static void lsm_event_handler(uint32_t opcode, uint32_t token,
dev_err(rtd->dev,
"%s: client_size has invalid size[%d]\n",
__func__, client_size);
__pm_relax(prtd->ws);
return;
}
status = (uint16_t)((uint8_t *)payload)[0];
Expand All @@ -309,14 +300,13 @@ static void lsm_event_handler(uint32_t opcode, uint32_t token,
dev_err(rtd->dev,
"%s: client_size has invalid size[%d]\n",
__func__, client_size);
__pm_relax(prtd->ws);
return;
}
status = (uint16_t)((uint8_t *)payload)[0];
payload_size = (uint16_t)((uint8_t *)payload)[1];
index = 2;
dev_dbg(rtd->dev,
"%s: event detect status_v2 = %d payload size = %d\n",
"%s: event detect status = %d payload size = %d\n",
__func__, status, payload_size);
break;

Expand All @@ -325,7 +315,6 @@ static void lsm_event_handler(uint32_t opcode, uint32_t token,
dev_err(rtd->dev,
"%s: client_size has invalid size[%d]\n",
__func__, client_size);
__pm_relax(prtd->ws);
return;
}
event_ts_lsw = ((uint32_t *)payload)[0];
Expand All @@ -345,7 +334,6 @@ static void lsm_event_handler(uint32_t opcode, uint32_t token,
dev_err(rtd->dev,
"%s: client_size has invalid size[%d]\n",
__func__, client_size);
__pm_relax(prtd->ws);
return;
}

Expand All @@ -365,7 +353,6 @@ static void lsm_event_handler(uint32_t opcode, uint32_t token,
"LSM_SESSION_DETECTION_ENGINE_GENERIC_EVENT",
sizeof(struct snd_lsm_event_status) +
payload_size);
__pm_relax(prtd->ws);
return;
}

Expand All @@ -380,7 +367,6 @@ static void lsm_event_handler(uint32_t opcode, uint32_t token,
dev_err(rtd->dev,
"%s: Failed to copy memory with invalid size = %d\n",
__func__, payload_size);
__pm_relax(prtd->ws);
return;
}
prtd->event_avail = 1;
Expand All @@ -405,14 +391,12 @@ static void lsm_event_handler(uint32_t opcode, uint32_t token,
opcode == LSM_SESSION_EVENT_DETECTION_STATUS_V2 ||
opcode == LSM_SESSION_EVENT_DETECTION_STATUS_V3) {
spin_lock_irqsave(&prtd->event_lock, flags);
dev_dbg(rtd->dev, "%s: detection status\n", __func__);
temp = krealloc(prtd->event_status,
sizeof(struct snd_lsm_event_status_v3) +
payload_size, GFP_ATOMIC);
if (!temp) {
dev_err(rtd->dev, "%s: no memory for event status\n",
__func__);
__pm_relax(prtd->ws);
return;
}
/*
Expand All @@ -432,14 +416,12 @@ static void lsm_event_handler(uint32_t opcode, uint32_t token,
payload_size);
prtd->event_avail = 1;
spin_unlock_irqrestore(&prtd->event_lock, flags);
dev_dbg(rtd->dev, "%s: wakeup event_wait\n", __func__);
wake_up(&prtd->event_wait);
} else {
spin_unlock_irqrestore(&prtd->event_lock, flags);
dev_err(rtd->dev,
"%s: Failed to copy memory with invalid size = %d\n",
__func__, payload_size);
__pm_relax(prtd->ws);
return;
}
} else {
Expand All @@ -451,7 +433,6 @@ static void lsm_event_handler(uint32_t opcode, uint32_t token,
if (substream->timer_running)
snd_timer_interrupt(substream->timer, 1);
}
dev_dbg(rtd->dev, "%s: leave\n", __func__);
}

static int msm_lsm_lab_buffer_alloc(struct lsm_priv *lsm, int alloc)
Expand Down Expand Up @@ -1091,7 +1072,6 @@ static int msm_lsm_ioctl_shared(struct snd_pcm_substream *substream,
prtd = runtime->private_data;
rtd = substream->private_data;

dev_dbg(rtd->dev, "%s: enter, cmd %x\n", __func__, cmd);
switch (cmd) {
case SNDRV_LSM_SET_SESSION_DATA:
case SNDRV_LSM_SET_SESSION_DATA_V2:
Expand Down Expand Up @@ -1157,7 +1137,6 @@ static int msm_lsm_ioctl_shared(struct snd_pcm_substream *substream,
dev_err(rtd->dev,
"%s: lsm open failed, %d\n",
__func__, ret);
__pm_relax(prtd->ws);
return ret;
}
prtd->lsm_client->opened = true;
Expand Down Expand Up @@ -1293,7 +1272,7 @@ static int msm_lsm_ioctl_shared(struct snd_pcm_substream *substream,
uint32_t ts_lsw, ts_msw;
uint16_t status = 0, payload_size = 0;

dev_dbg(rtd->dev, "%s: Get event status cmd %xx\n", __func__, cmd);
dev_dbg(rtd->dev, "%s: Get event status\n", __func__);
atomic_set(&prtd->event_wait_stop, 0);

/*
Expand All @@ -1306,7 +1285,6 @@ static int msm_lsm_ioctl_shared(struct snd_pcm_substream *substream,
(cmpxchg(&prtd->event_avail, 1, 0) ||
(xchg = atomic_cmpxchg(&prtd->event_wait_stop,
1, 0))));
dev_dbg(rtd->dev, "%s: wait event is done\n", __func__);
mutex_lock(&prtd->lsm_api_lock);
dev_dbg(rtd->dev, "%s: wait_event_freezable %d event_wait_stop %d\n",
__func__, rc, xchg);
Expand Down Expand Up @@ -1505,14 +1483,12 @@ static int msm_lsm_ioctl_shared(struct snd_pcm_substream *substream,
if (prtd->lsm_client->num_stages > 1) {
dev_err(rtd->dev, "%s: %s: not supported for multi stage session\n",
__func__, "LSM_LAB_CONTROL");
__pm_relax(prtd->ws);
return -EINVAL;
}

if (copy_from_user(&enable, arg, sizeof(enable))) {
dev_err(rtd->dev, "%s: %s: copy_frm_user failed\n",
__func__, "LSM_LAB_CONTROL");
__pm_relax(prtd->ws);
return -EFAULT;
}

Expand Down Expand Up @@ -1567,7 +1543,6 @@ static int msm_lsm_ioctl_shared(struct snd_pcm_substream *substream,
if (copy_from_user(&mode, arg, sizeof(mode))) {
dev_err(rtd->dev, "%s: %s: copy_frm_user failed\n",
__func__, "LSM_SET_FWK_MODE_CONFIG");
__pm_relax(prtd->ws);
return -EFAULT;
}

Expand Down Expand Up @@ -1598,7 +1573,6 @@ static int msm_lsm_ioctl_shared(struct snd_pcm_substream *substream,
if (copy_from_user(&params, arg, sizeof(params))) {
dev_err(rtd->dev, "%s: %s: copy_from_user failed\n",
__func__, "LSM_SET_INPUT_HW_PARAMS");
__pm_relax(prtd->ws);
return -EFAULT;
}

Expand All @@ -1625,7 +1599,6 @@ static int msm_lsm_ioctl_shared(struct snd_pcm_substream *substream,
dev_err(rtd->dev, "%s: cmd 0x%x failed %d\n",
__func__, cmd, rc);

__pm_relax(prtd->ws);
return rc;
}

Expand Down Expand Up @@ -2706,11 +2679,7 @@ static int msm_lsm_open(struct snd_pcm_substream *substream)
prtd->lsm_client->event_type = LSM_DET_EVENT_TYPE_LEGACY;
prtd->lsm_client->fe_id = rtd->dai_link->id;
prtd->lsm_client->unprocessed_data = 0;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 110))
prtd->ws = wakeup_source_register(rtd->dev, "lsm-client");
#else
prtd->ws = wakeup_source_register("lsm-client");
#endif

return 0;
}

Expand Down Expand Up @@ -2955,7 +2924,6 @@ static int msm_lsm_close(struct snd_pcm_substream *substream)

q6lsm_client_free(prtd->lsm_client);

wakeup_source_unregister(prtd->ws);
spin_lock_irqsave(&prtd->event_lock, flags);
kfree(prtd->event_status);
prtd->event_status = NULL;
Expand Down

0 comments on commit 1a041f0

Please sign in to comment.