2001-11-27 07:11:52

by Alex Riesen

[permalink] [raw]
Subject: 2.4.16 alsa 0.5.12 mixer ioctl problem

Hi, all

just tried to compile the mentioned alsa drivers under 2.4.16.
Mixer doesnt work, yes. It compiles, installs, loads. And
any program trying to open mixer (through libasound) get EINVAL.

All is compiled with gcc-2.95.3,
single CPU, with APIC (is any sense to enable it on
uniprocessors?).

Does anybody know what to do about it?

-alex


2001-11-27 08:06:35

by Jochen Eisinger

[permalink] [raw]
Subject: Re: 2.4.16 alsa 0.5.12 mixer ioctl problem

Hi!

This appears to be a problem with fs/proc/inode.c. Reverting to the
version up to 2.4.15-pre6 will solve your problem.

regards
-- jochen

Alex Riesen wrote:

> Hi, all
>
> just tried to compile the mentioned alsa drivers under 2.4.16.
> Mixer doesnt work, yes. It compiles, installs, loads. And
> any program trying to open mixer (through libasound) get EINVAL.
>


--
"I'd rather die before using Micro$oft Word"
-- Donald E. Knuth
(asked whether he'd reinvent TeX in the light of M$ Word)

GnuGP public key for [email protected]:
http://home.nexgo.de/jochen.eisinger/pubkey.asc (0x8AEB7AE3)


2001-11-27 08:24:35

by Duncan Sands

[permalink] [raw]
Subject: Re: 2.4.16 alsa 0.5.12 mixer ioctl problem

This may be the same as a problem that just came
up on the alsa mailing list. I threw that email away,
but if I remember right there was a problem due to
a change in the proc interface around kernel 2.4.15.
The CVS version of alsa contains a fix.

Duncan.

PS: Try searching the alsa mailing list archive - better
than relying on my vague memories!
PPS: It came up very recently (yesterday?).

2001-11-27 08:50:45

by Alex Davis

[permalink] [raw]
Subject: Re: 2.4.16 alsa 0.5.12 mixer ioctl problem

Yeah, they changed/broke (depending on your point of view) the file fs/proc/inode.c in the kernel
source.
You're the third person to post about this problem.

There's a work-around for the problem. (I'm currently running ALSA 0.9beta9, so the file contents
may not exactly match up): in the ALSA driver source, edit the file kernel/info.c. Look for the
following lines

if (p) {
snd_info_device_entry_prepare(p,entry);
#ifdef LINUX_2_3
p->proc_fops = &snd_fops;
#else
p->ops = &snd_info_device_inode_operations;
#endif
} else {
up(&info_mutex);
snd_info_free_entry(entry);
return NULL;
}
}

they should be near line 890 or so.

Next, comment out the line
p->proc_fops = &snd_fops;

Rebuild. Everything should work now.

Hope this helps.
-Alex

Alex Reisen wrote
Hi, all

just tried to compile the mentioned alsa drivers under 2.4.16. Mixer doesnt work, yes. It
compiles, installs, loads. And
any program trying to open mixer (through libasound) get EINVAL.

All is compiled with gcc-2.95.3,
single CPU, with APIC (is any sense to enable it on
uniprocessors?).

Does anybody know what to do about it?

-alex

__________________________________________________
Do You Yahoo!?
Yahoo! GeoCities - quick and easy web site hosting, just $8.95/month.
http://geocities.yahoo.com/ps/info1

2001-11-27 09:08:26

by Helge Hafting

[permalink] [raw]
Subject: Re: 2.4.16 alsa 0.5.12 mixer ioctl problem

Alex Riesen wrote:
>
> Hi, all
>
> just tried to compile the mentioned alsa drivers under 2.4.16.
> Mixer doesnt work, yes. It compiles, installs, loads. And
> any program trying to open mixer (through libasound) get EINVAL.
>
> All is compiled with gcc-2.95.3,
> single CPU, with APIC (is any sense to enable it on
> uniprocessors?).
>
> Does anybody know what to do about it?
>
I recommend getting ALSA 0.9.0beta9. It works
well with 2.4.15 and 2.5.1-pre1, so it'll probably
work with 2.4.16 too.

Helge Hafting

2001-11-28 07:16:31

by Alex Riesen

[permalink] [raw]
Subject: RE: 2.4.16 alsa 0.5.12 mixer ioctl problem

Thanks, your patch fixed the problem.
BTW, 2.5.[0,1-pre1] contain this 'broken' code:
Maybe it is silently fixed at some other play,
but just for everyones information.

2.5.1-pre1:
struct inode * proc_get_inode(struct super_block * sb, int ino,
struct proc_dir_entry * de)
{
struct inode * inode;

/*
* Increment the use count so the dir entry can't disappear.
*/
de_get(de);
#if 1
/* shouldn't ever happen */
if (de && de->deleted)
printk("proc_iget: using deleted entry %s, count=%d\n", de->name,
atomic_read(&de->count));
#endif

inode = iget(sb, ino);
if (!inode)
goto out_fail;

inode->u.generic_ip = (void *) de;
if (de) {
if (de->mode) {
inode->i_mode = de->mode;
inode->i_uid = de->uid;
inode->i_gid = de->gid;
}
if (de->size)
inode->i_size = de->size;
if (de->nlink)
inode->i_nlink = de->nlink;
if (de->owner)
__MOD_INC_USE_COUNT(de->owner);
if (de->proc_iops) <<<<<<<<
inode->i_op = de->proc_iops; <<<<<<<<
if (de->proc_fops) <<<<<<<<
inode->i_fop = de->proc_fops; <<<<<<<<
-- this line looks like error, what has init_special_inode to do with
de->proc_fops?
else if (S_ISBLK(de->mode)||S_ISCHR(de->mode)||S_ISFIFO(de->mode))
init_special_inode(inode,de->mode,kdev_t_to_nr(de->rdev));
}

out:
return inode;

out_fail:
de_put(de);
goto out;
}

> -----Original Message-----
> From: Jochen Eisinger [mailto:[email protected]]
> Sent: Tuesday, November 27, 2001 09:05
> To: Alex Riesen
> Cc: [email protected]
> Subject: Re: 2.4.16 alsa 0.5.12 mixer ioctl problem
>
>
> Hi!
>
> This appears to be a problem with fs/proc/inode.c. Reverting to the
> version up to 2.4.15-pre6 will solve your problem.
>
> regards
> -- jochen
>
> Alex Riesen wrote:
>
> > Hi, all
> >
> > just tried to compile the mentioned alsa drivers under 2.4.16.
> > Mixer doesnt work, yes. It compiles, installs, loads. And
> > any program trying to open mixer (through libasound) get EINVAL.
> >
>