Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sound: rawmidi: record a substream's owner process

Record the pid of the task that opened a RawMIDI substream.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>

authored by

Clemens Ladisch and committed by
Takashi Iwai
7584af10 e7373b70

+11
+2
include/sound/rawmidi.h
··· 46 46 struct snd_rawmidi; 47 47 struct snd_rawmidi_substream; 48 48 struct snd_seq_port_info; 49 + struct pid; 49 50 50 51 struct snd_rawmidi_ops { 51 52 int (*open) (struct snd_rawmidi_substream * substream); ··· 98 97 struct snd_rawmidi_str *pstr; 99 98 char name[32]; 100 99 struct snd_rawmidi_runtime *runtime; 100 + struct pid *pid; 101 101 /* hardware layer */ 102 102 struct snd_rawmidi_ops *ops; 103 103 };
+9
sound/core/rawmidi.c
··· 278 278 substream->active_sensing = 0; 279 279 if (mode & SNDRV_RAWMIDI_LFLG_APPEND) 280 280 substream->append = 1; 281 + substream->pid = get_pid(task_pid(current)); 281 282 rmidi->streams[substream->stream].substream_opened++; 282 283 } 283 284 substream->use_count++; ··· 489 488 snd_rawmidi_runtime_free(substream); 490 489 substream->opened = 0; 491 490 substream->append = 0; 491 + put_pid(substream->pid); 492 + substream->pid = NULL; 492 493 rmidi->streams[substream->stream].substream_opened--; 493 494 } 494 495 ··· 1339 1336 substream->number, 1340 1337 (unsigned long) substream->bytes); 1341 1338 if (substream->opened) { 1339 + snd_iprintf(buffer, 1340 + " Owner PID : %d\n", 1341 + pid_vnr(substream->pid)); 1342 1342 runtime = substream->runtime; 1343 1343 snd_iprintf(buffer, 1344 1344 " Mode : %s\n" ··· 1363 1357 substream->number, 1364 1358 (unsigned long) substream->bytes); 1365 1359 if (substream->opened) { 1360 + snd_iprintf(buffer, 1361 + " Owner PID : %d\n", 1362 + pid_vnr(substream->pid)); 1366 1363 runtime = substream->runtime; 1367 1364 snd_iprintf(buffer, 1368 1365 " Buffer size : %lu\n"