mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
sound: pcm: record a substream's owner process
Record the pid of the task that opened a PCM substream. For sound cards with hardware mixing, this allows determining which process is associated with a specific substream's volume control. Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
91d12c485b
commit
e7373b702f
2 changed files with 7 additions and 0 deletions
|
@ -348,6 +348,8 @@ struct snd_pcm_group { /* keep linked substreams */
|
||||||
int count;
|
int count;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct pid;
|
||||||
|
|
||||||
struct snd_pcm_substream {
|
struct snd_pcm_substream {
|
||||||
struct snd_pcm *pcm;
|
struct snd_pcm *pcm;
|
||||||
struct snd_pcm_str *pstr;
|
struct snd_pcm_str *pstr;
|
||||||
|
@ -379,6 +381,7 @@ struct snd_pcm_substream {
|
||||||
atomic_t mmap_count;
|
atomic_t mmap_count;
|
||||||
unsigned int f_flags;
|
unsigned int f_flags;
|
||||||
void (*pcm_release)(struct snd_pcm_substream *);
|
void (*pcm_release)(struct snd_pcm_substream *);
|
||||||
|
struct pid *pid;
|
||||||
#if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
|
#if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
|
||||||
/* -- OSS things -- */
|
/* -- OSS things -- */
|
||||||
struct snd_pcm_oss_substream oss;
|
struct snd_pcm_oss_substream oss;
|
||||||
|
|
|
@ -435,6 +435,7 @@ static void snd_pcm_substream_proc_status_read(struct snd_info_entry *entry,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
snd_iprintf(buffer, "state: %s\n", snd_pcm_state_name(status.state));
|
snd_iprintf(buffer, "state: %s\n", snd_pcm_state_name(status.state));
|
||||||
|
snd_iprintf(buffer, "owner_pid : %d\n", pid_vnr(substream->pid));
|
||||||
snd_iprintf(buffer, "trigger_time: %ld.%09ld\n",
|
snd_iprintf(buffer, "trigger_time: %ld.%09ld\n",
|
||||||
status.trigger_tstamp.tv_sec, status.trigger_tstamp.tv_nsec);
|
status.trigger_tstamp.tv_sec, status.trigger_tstamp.tv_nsec);
|
||||||
snd_iprintf(buffer, "tstamp : %ld.%09ld\n",
|
snd_iprintf(buffer, "tstamp : %ld.%09ld\n",
|
||||||
|
@ -900,6 +901,7 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream,
|
||||||
substream->private_data = pcm->private_data;
|
substream->private_data = pcm->private_data;
|
||||||
substream->ref_count = 1;
|
substream->ref_count = 1;
|
||||||
substream->f_flags = file->f_flags;
|
substream->f_flags = file->f_flags;
|
||||||
|
substream->pid = get_pid(task_pid(current));
|
||||||
pstr->substream_opened++;
|
pstr->substream_opened++;
|
||||||
*rsubstream = substream;
|
*rsubstream = substream;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -921,6 +923,8 @@ void snd_pcm_detach_substream(struct snd_pcm_substream *substream)
|
||||||
kfree(runtime->hw_constraints.rules);
|
kfree(runtime->hw_constraints.rules);
|
||||||
kfree(runtime);
|
kfree(runtime);
|
||||||
substream->runtime = NULL;
|
substream->runtime = NULL;
|
||||||
|
put_pid(substream->pid);
|
||||||
|
substream->pid = NULL;
|
||||||
substream->pstr->substream_opened--;
|
substream->pstr->substream_opened--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue