All of lore.kernel.org
 help / color / mirror / Atom feed
From: Denys Vlasenko <vda.linux@googlemail.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: linux-kernel@vger.kernel.org
Subject: Re: sound: -EPERM on first mplayer invocation
Date: Wed, 5 Aug 2009 04:32:34 +0200	[thread overview]
Message-ID: <200908050432.35016.vda.linux@googlemail.com> (raw)
In-Reply-To: <s5hskg8aqhr.wl%tiwai@suse.de>

On Tuesday 04 August 2009 11:16, Takashi Iwai wrote:
> > > > For a long time I observe the following nuisance:
> > > > when I run mplayer for the very first time after boot,
> > > > I can't adjust the volume. mplayer spews this to stderr:
> > > > 
> > > > alsa-control: error setting left channel, Operation not permitted
> > > > 
> > > > This happens even if I login as root and run mplayer as root.
> > > > 
> > > > I tracked it down to snd_ctl_elem_write in sound/core/control.c
> > > > 
> > ...
> > > > 
> > > > Thus, vd->owner != file.
> > > > 
> > > > As I said, it only happens on very first run of mplayer,
> > > > and it isn't a recent change, I think I saw it at least
> > > > for one year with different kernels.
> > > > 
> > > > Takashi, any idea what might be happening here?
> > > > How can I help you more with tracking it down?
> > > 
> > > This implies that another process (e.g. a sound daemon like PA)
> > > already opened the device and locked this specific control element.
> > > If so, this is no bug but the right behavior.
> > > Check "fuser /dev/snd/controlC*".
> > 
> > Nothing uses them:
> > 
> > shadow:~# lsof -nP | grep '/dev/.*control'
> > shadow:~# fuser /dev/snd/controlC*
> > shadow:~#
> > 
> > I tried running bare X with only xterm and mplayer,
> 
> Hm, but according to your debug session, the vd->owner is set
> to a different value, right?  Check vd->owner_pid in the error path.
> It'll show the pid blocking that control element.

I modified 2.6.31-rc2 source as follows:

static int snd_ctl_elem_write(struct snd_card *card, struct snd_ctl_file *file,
                              struct snd_ctl_elem_value *control)
{
        struct snd_kcontrol *kctl;
        struct snd_kcontrol_volatile *vd;
        unsigned int index_offset;
        int result;

        down_read(&card->controls_rwsem);
        kctl = snd_ctl_find_id(card, &control->id);
        if (kctl == NULL) {
                result = -ENOENT;
        } else {
                index_offset = snd_ctl_get_ioff(kctl, &control->id);
                vd = &kctl->vd[index_offset];
if (file && vd->owner)
 printk("file:%p vd->owner:%p\n", file, vd->owner);
                if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_WRITE) ||
                    kctl->put == NULL ||
                    (file && vd->owner && vd->owner != file)) {
if (file && vd->owner)
 printk("vd->owner_pid:%d vd->owner->pid:%d file->pid:%d\n", vd->owner_pid, vd->owner->pid, file->pid);
                        result = -EPERM;
                } else {
...

and when I start mplayer, I see this:

dmesg:
file:ffff8800798af940 vd->owner:ffff8800798af940
file:ffff8800798af940 vd->owner:ffff8800798af940

I assume it's some sort of initialization, no EPERM here.
Then I press "lower the volume" key (keypad "/")
in mplayer window, twice:

dmesg:
file:ffff8800798af8c0 vd->owner:ffff8800798af940
vd->owner_pid:0 vd->owner->pid:2067 file->pid:2067
file:ffff8800798af740 vd->owner:ffff8800798af940
vd->owner_pid:0 vd->owner->pid:2067 file->pid:2067

mplayer:
alsa-control: error setting left channel, Operation not permitted

The pid is mplayer's pid:

# ps -A | grep mpl
 2067 root       0:01 mplayer The_league_of_extraordinary_gentlemen.avi
 2081 root       0:00 grep mpl

It has one thread, btw, no funky multithreading stuff:

# ls -l /proc/2067/task
dr-xr-xr-x    4 root     root            0 Aug  5 04:28 2067

-- 
vda

  reply	other threads:[~2009-08-05  2:31 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-02 21:36 sound: -EPERM on first mplayer invocation Denys Vlasenko
2009-08-03  6:55 ` Takashi Iwai
2009-08-04  9:01   ` Denys Vlasenko
2009-08-04  9:16     ` Takashi Iwai
2009-08-05  2:32       ` Denys Vlasenko [this message]
2009-08-05  5:37         ` Takashi Iwai
2009-08-05  5:41           ` Takashi Iwai
2009-08-05  8:50             ` Clemens Ladisch
2009-08-05 22:00             ` Denys Vlasenko

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=200908050432.35016.vda.linux@googlemail.com \
    --to=vda.linux@googlemail.com \
    --cc=linux-kernel@vger.kernel.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.