From: Rene Herman <rene.herman@keyaccess.nl>
To: Andrew Morton <akpm@osdl.org>
Cc: torvalds@osdl.org, linux-kernel@vger.kernel.org, ambx1@neo.rr.com
Subject: Re: Linux v2.6.16-rc5
Date: Tue, 28 Feb 2006 02:05:17 +0100 [thread overview]
Message-ID: <4403A1CD.6030203@keyaccess.nl> (raw)
In-Reply-To: <44038BFE.6090907@keyaccess.nl>
Rene Herman wrote:
> All ALSA ISA card drivers, not just CS4236, use the same interface to
> PnP (the pnp_card_driver struct) meaning they would all appear to be
> broken in that exact same way as well. Or rather, _any_ ISA-PnP driver
> using that pnp_card_driver interface (there's also drivers using the
> pnp_driver interface -- those appear to be okay). CS4236 isn't doing
> anything special...
If it helps any, I can at least confirm that it's nothing ALSA or CS4236
specific. This is a minimal, skeleton, pnp_card driver:
=== foo.c
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pnp.h>
MODULE_LICENSE("GPL");
static struct pnp_card_device_id foo_pnp_card_device_id_table[] = {
{ .id = "CSCa836", .devs = { { "CSCa800" } } },
/* --- */
{ .id = "" }
};
MODULE_DEVICE_TABLE(pnp_card, foo_pnp_card_device_id_table);
static int foo_pnp_probe(struct pnp_card_link *pcard,
const struct pnp_card_device_id *pid)
{
struct pnp_dev *pdev;
printk(KERN_INFO "%s\n", __FUNCTION__);
pdev = pnp_request_card_device(pcard, pid->devs[0].id, NULL);
if (!pdev || pnp_activate_dev(pdev) < 0)
return -ENODEV;
// allocate, enable.
return 0;
}
static void foo_pnp_remove(struct pnp_card_link *pcard)
{
printk(KERN_INFO "%s\n", __FUNCTION__);
// disable, deallocate.
}
static struct pnp_card_driver foo_pnp_card_driver = {
.name = "foo",
.id_table = foo_pnp_card_device_id_table,
.flags = PNP_DRIVER_RES_DISABLE,
.probe = foo_pnp_probe,
.remove = foo_pnp_remove
};
int __init foo_init(void)
{
return pnp_register_card_driver(&foo_pnp_card_driver);
}
void __exit foo_exit(void)
{
pnp_unregister_card_driver(&foo_pnp_card_driver);
}
module_init(foo_init);
module_exit(foo_exit);
===
compile with
=== Makefile
ifneq ($(KERNELRELEASE),)
obj-m := foo.o
else
default:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd)
clean:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd)
clean
endif
===
This ofcourse needs ISA-PnP support in the kernel, and actually loading
it requires replacing the PnP IDs with IDs actually present (these are
from my CS4236 soundcard).
With 2.6.15.4 and with 2.6.16-rc with Adam's fix applied, an "insmod
foo.ko && rmmod foo" shows the following in dmesg (this needs the PnP
debug messages selectable in menuconfig):
pnp: the driver 'foo' has been registered
foo_pnp_probe
pnp: match found with the PnP device '01:01.00' and the driver 'foo'
pnp: Device 01:01.00 activated.
foo_pnp_remove
pnp: Device 01:01.00 disabled.
pnp: the driver 'foo' has been unregistered
which is as it should be. On 2.6.16-rc without Adam's fix, both the
"pnp: match found with" and the "foo_pnp_remove" lines are missing:
pnp: the driver 'foo' has been registered
foo_pnp_probe
pnp: Device 01:01.00 activated.
pnp: Device 01:01.00 disabled.
pnp: the driver 'foo' has been unregistered
Of course, with this skeleton driver that's not much of a problem, but
in real drivers it certainly is; in pnp_remove you'd deactivate and
deallocate anything that was allocated and activated in/through the
pnp_probe method -- all things associated with this instance of the
card, normally.
I can also confirm that a driver using the "pnp_driver" interface isn't
affected by the bug. Same skeleton-type driver:
=== bar.c
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pnp.h>
MODULE_LICENSE("GPL");
static struct pnp_device_id bar_pnp_device_id_table[] = {
{ .id = "CSCa800" },
/* --- */
{ .id = "" }
};
MODULE_DEVICE_TABLE(pnp, bar_pnp_device_id_table);
static int bar_pnp_probe(struct pnp_dev *pdev,
const struct pnp_device_id *pid)
{
printk(KERN_INFO "%s\n", __FUNCTION__);
if (pnp_activate_dev(pdev) < 0)
return -ENODEV;
// allocate, enable.
return 0;
}
static void bar_pnp_remove(struct pnp_dev *pdev)
{
printk(KERN_INFO "%s\n", __FUNCTION__);
// disable, deallocate.
}
static struct pnp_driver bar_pnp_driver = {
.name = "bar",
.id_table = bar_pnp_device_id_table,
.flags = PNP_DRIVER_RES_DISABLE,
.probe = bar_pnp_probe,
.remove = bar_pnp_remove
};
int __init bar_init(void)
{
return pnp_register_driver(&bar_pnp_driver);
}
void __exit bar_exit(void)
{
pnp_unregister_driver(&bar_pnp_driver);
}
module_init(bar_init);
module_exit(bar_exit);
===
2.6.15.4, 2.6.16-rc with or without Adam's fix:
pnp: the driver 'bar' has been registered
pnp: match found with the PnP device '01:01.00' and the driver 'bar'
bar_pnp_probe
pnp: Device 01:01.00 activated.
bar_pnp_remove
pnp: Device 01:01.00 disabled.
pnp: the driver 'bar' has been unregistered
So that's all fine. As said though, all ALSA drivers for one are using
the card_driver interface, and are therefore all broken currently.
Rene.
next prev parent reply other threads:[~2006-02-28 1:04 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-27 5:27 Linux v2.6.16-rc5 Linus Torvalds
2006-02-27 5:51 ` Jeff Garzik
2006-02-27 6:21 ` Randy.Dunlap
2006-02-27 6:52 ` Jeff Garzik
2006-02-27 8:13 ` Paul Rolland
2006-02-27 18:04 ` Francois Romieu
2006-02-27 18:38 ` Jeff Garzik
2006-02-27 22:24 ` Pull request for 'for-jeff' branch Francois Romieu
2006-02-27 6:13 ` 2.6.16-rc5: known regressions Adrian Bunk
2006-02-27 6:26 ` Ryan Phillips
2006-02-27 6:39 ` Vojtech Pavlik
2006-02-27 9:14 ` 2.6.16-rc5: known regressions (ps2 mouse/keyboard issues) Duncan
2006-02-27 6:54 ` 2.6.16-rc5: known regressions Jeff Garzik
2006-02-27 7:08 ` Adrian Bunk
2006-02-28 9:40 ` Jens Axboe
2006-03-01 0:17 ` Randy.Dunlap
2006-03-04 13:18 ` Adrian Bunk
2006-02-27 13:36 ` Mark Lord
2006-02-27 14:09 ` Pavel Machek
2006-03-02 14:00 ` [v4l-dvb-maintainer] " Mauro Carvalho Chehab
2006-03-04 13:27 ` Adrian Bunk
2006-03-04 13:39 ` Mauro Carvalho Chehab
[not found] ` <6dd519ae0603080313o4e7b8a61h5002125c33a0e008@mail.gmail.com>
2006-03-08 20:29 ` Mauro Carvalho Chehab
2006-03-08 22:52 ` Hartmut Hackmann
2006-02-27 7:28 ` Linux v2.6.16-rc5 Dave Jones
2006-02-27 11:20 ` Jens Axboe
2006-02-27 22:42 ` Neil Brown
2006-02-27 7:42 ` Dave Jones
2006-02-27 9:28 ` Nick Piggin
2006-02-27 19:52 ` Rene Herman
2006-02-27 22:51 ` Andrew Morton
2006-02-27 23:32 ` Rene Herman
2006-02-28 1:05 ` Rene Herman [this message]
2006-02-28 1:12 ` Andrew Morton
2006-02-28 9:38 ` Linux v2.6.16-rc5 - regression Peter Hagervall
2006-02-28 10:03 ` Andrew Morton
2006-02-28 11:41 ` Peter Hagervall
2006-02-28 11:49 ` Peter Hagervall
2006-02-28 12:43 ` Linux v2.6.16-rc5 Christoph Hellwig
2006-03-03 16:00 ` Mark Rosenstand
2006-03-03 23:01 ` 2.6.16-rc regression: m68k CONFIG_RMW_INSNS=n compile broken Adrian Bunk
2006-03-03 23:22 ` Linus Torvalds
2006-03-03 23:43 ` Adrian Bunk
2006-03-03 23:59 ` Andrew Morton
2006-03-04 14:01 ` Roman Zippel
2006-03-04 14:12 ` Nick Piggin
2006-03-04 20:28 ` Andrew Morton
2006-03-08 11:24 ` [2.6 patch] m68k: fix cmpxchg compile errors if CONFIG_RMW_INSNS=n Adrian Bunk
2006-03-05 14:09 ` Linux v2.6.16-rc5 Olaf Hering
2006-03-05 18:59 ` Olaf Hering
2006-03-05 20:02 ` Linus Torvalds
2006-03-05 20:42 ` Olaf Hering
2006-03-05 21:50 ` Paul Mackerras
2006-03-05 22:22 ` Olaf Hering
2006-03-05 22:44 ` Olaf Hering
2006-03-06 7:48 ` Olaf Hering
2006-03-06 16:48 ` Olaf Hering
2006-03-06 22:20 ` Olaf Hering
2006-03-06 23:02 ` Olaf Hering
2006-03-11 21:59 ` Olaf Hering
2006-03-05 22:03 ` Mathieu Chouquet-Stringer
2006-03-06 2:12 ` Linus Torvalds
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=4403A1CD.6030203@keyaccess.nl \
--to=rene.herman@keyaccess.nl \
--cc=akpm@osdl.org \
--cc=ambx1@neo.rr.com \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@osdl.org \
/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).