From: Clemens Ladisch <clemens@ladisch.de>
To: Takashi Iwai <tiwai@suse.de>, Martin Koegler <martin.koegler@chello.at>
Cc: alsa-devel@alsa-project.org
Subject: Re: [PATCH v2 1/3] ALSA: seq: Provide card number / PID via sequencer client info
Date: Tue, 8 Mar 2016 10:00:37 +0100 [thread overview]
Message-ID: <56DE94B5.4080601@ladisch.de> (raw)
In-Reply-To: <s5h37s7sxq3.wl-tiwai@suse.de>
Takashi Iwai wrote:
> Martin Koegler wrote:
>> rawmidi devices expose the card number via IOCTLs, which allows to
>> find the corresponding device in sysfs.
>>
>> The sequencer provides no identifing data. Chromium works around this
>> issue by scanning rawmidi as well as sequencer devices and matching
>> them by using assumtions, how the kernel register sequencer devices.
>>
>> This changes adds support for exposing the card number for kernel clients
>> as well as the PID for user client.
>>
>> The minor of the API version is changed to distinguish between the zero
>> initialised reserved field and card number 0.
>>
>> Signed-off-by: Martin Koegler <martin.koegler@chello.at>
>
> This ABI change itself looks simple enough, so I have no big problem
> to merge if you can convince other people with it :)
Acked-by: Clemens Ladisch <clemens@ladisch.de>
>> ---
>> include/uapi/sound/asequencer.h | 6 ++++--
>> sound/core/seq/seq_clientmgr.c | 14 ++++++++++++++
>> sound/core/seq/seq_clientmgr.h | 2 ++
>> 3 files changed, 20 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/uapi/sound/asequencer.h b/include/uapi/sound/asequencer.h
>> index 5a5fa49..8c7da5a 100644
>> --- a/include/uapi/sound/asequencer.h
>> +++ b/include/uapi/sound/asequencer.h
>> @@ -25,7 +25,7 @@
>> #include <sound/asound.h>
>>
>> /** version of the sequencer */
>> -#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION (1, 0, 1)
>> +#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION (1, 0, 2)
>>
>> /**
>> * definition of sequencer event types
>> @@ -357,7 +357,9 @@ struct snd_seq_client_info {
>> unsigned char event_filter[32]; /* event filter bitmap */
>> int num_ports; /* RO: number of ports */
>> int event_lost; /* number of lost events */
>> - char reserved[64]; /* for future use */
>> + int card; /* RO: card number[kernel] */
>> + int pid; /* RO: pid[user] */
>> + char reserved[56]; /* for future use */
>> };
>>
>>
>> diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
>> index 58e79e0..d6d9419 100644
>> --- a/sound/core/seq/seq_clientmgr.c
>> +++ b/sound/core/seq/seq_clientmgr.c
>> @@ -364,6 +364,7 @@ static int snd_seq_open(struct inode *inode, struct file *file)
>> /* fill client data */
>> user->file = file;
>> sprintf(client->name, "Client-%d", c);
>> + client->data.user.owner = get_pid(task_pid(current));
>>
>> /* make others aware this new client */
>> snd_seq_system_client_ev_client_start(c);
>> @@ -380,6 +381,7 @@ static int snd_seq_release(struct inode *inode, struct file *file)
>> seq_free_client(client);
>> if (client->data.user.fifo)
>> snd_seq_fifo_delete(&client->data.user.fifo);
>> + put_pid(client->data.user.owner);
>> kfree(client);
>> }
>>
>> @@ -1197,6 +1199,17 @@ static void get_client_info(struct snd_seq_client *cptr,
>> info->event_lost = cptr->event_lost;
>> memcpy(info->event_filter, cptr->event_filter, 32);
>> info->num_ports = cptr->num_ports;
>> +
>> + if (cptr->type == USER_CLIENT)
>> + info->pid = pid_vnr(cptr->data.user.owner);
>> + else
>> + info->pid = -1;
>> +
>> + if (cptr->type == KERNEL_CLIENT)
>> + info->card = cptr->data.kernel.card ? cptr->data.kernel.card->number : -1;
>> + else
>> + info->card = -1;
>> +
>> memset(info->reserved, 0, sizeof(info->reserved));
>> }
>>
>> @@ -2271,6 +2284,7 @@ int snd_seq_create_kernel_client(struct snd_card *card, int client_index,
>>
>> client->accept_input = 1;
>> client->accept_output = 1;
>> + client->data.kernel.card = card;
>>
>> va_start(args, name_fmt);
>> vsnprintf(client->name, sizeof(client->name), name_fmt, args);
>> diff --git a/sound/core/seq/seq_clientmgr.h b/sound/core/seq/seq_clientmgr.h
>> index 20f0a72..031462e 100644
>> --- a/sound/core/seq/seq_clientmgr.h
>> +++ b/sound/core/seq/seq_clientmgr.h
>> @@ -33,6 +33,7 @@
>> struct snd_seq_user_client {
>> struct file *file; /* file struct of client */
>> /* ... */
>> + struct pid* owner;
>>
>> /* fifo */
>> struct snd_seq_fifo *fifo; /* queue for incoming events */
>> @@ -41,6 +42,7 @@ struct snd_seq_user_client {
>>
>> struct snd_seq_kernel_client {
>> /* ... */
>> + struct snd_card* card;
>> };
>>
>>
>> --
>> 2.1.4
>>
>> _______________________________________________
>> Alsa-devel mailing list
>> Alsa-devel@alsa-project.org
>> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
next prev parent reply other threads:[~2016-03-08 9:00 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-02 18:26 [PATCH v2 2/3] Provide sequencer sound card number / PID via alsa-lib Martin Koegler
2016-03-02 18:26 ` [PATCH v2 3/3] Show sequencer sound card numer/PID via aconnect Martin Koegler
2016-03-08 10:00 ` Takashi Iwai
2016-03-02 18:26 ` [PATCH v2 1/3] ALSA: seq: Provide card number / PID via sequencer client info Martin Koegler
2016-03-03 9:43 ` Takashi Iwai
2016-03-07 21:13 ` Martin Koegler
2016-03-08 9:00 ` Clemens Ladisch [this message]
2016-03-08 9:54 ` Takashi Iwai
2016-03-03 9:46 ` [PATCH v2 2/3] Provide sequencer sound card number / PID via alsa-lib Takashi Iwai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56DE94B5.4080601@ladisch.de \
--to=clemens@ladisch.de \
--cc=alsa-devel@alsa-project.org \
--cc=martin.koegler@chello.at \
--cc=tiwai@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).