Re: backlight mystery

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2007-03-06 at 12:10 -0500, Dave Jones wrote:
> On Tue, Mar 06, 2007 at 03:58:01PM +0800, Zhao Forrest wrote:
>  > On 3/6/07, Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote:
>  > > On Tue, 6 Mar 2007 02:43:12 -0500 Dave Jones <davej@xxxxxxxxxx> wrote:
>  > >
>  > > > On Mon, Mar 05, 2007 at 11:30:37PM -0800, Andrew Morton wrote:
>  > > >  >
>  > > >  > I always get stuff like this coming out when I boot my x86_64 machine:
>  > > >  >
>  > > >  > asus_acpi: Unknown symbol backlight_device_unregister
>  > > >  > asus_acpi: Unknown symbol backlight_device_register
>  > > >  > ibm_acpi: Unknown symbol backlight_device_unregister
>  > > >  > ibm_acpi: Unknown symbol backlight_device_register
>  > > >  > toshiba_acpi: Unknown symbol backlight_device_unregister
>  > > >  > toshiba_acpi: Unknown symbol backlight_device_register
>  > > >  > video: Unknown symbol backlight_device_unregister
>  > > >  > video: Unknown symbol backlight_device_register
>  > > >  >
>  > > >  > This is a nocoma server, not a laptop.  I'm not sure how those modules are
>  > > >  > even getting loaded.  The distro is FC4, which might be doing something
>  > > >  > peculiar.
>  > > >
>  > > > I covered this on the list last week.  There's no way to
>  > > > have a module autoload based on dmi strings or the like,
>  > > > (Which is the only sane way these modules can determine
>  > > >  if they need to run).
>  > > >
>  > > > Given the absense of mechanism, there's a pretty gross hack
>  > > > in Fedora's rc.sysinit which loads every module in drivers/acpi/*/*
>  > > > that it finds.  Shameful I know.
>  > >
>  > > I thought it might be something like that.  I'm a bit surprised that we
>  > > can't get at the DMI stuff from userspace, or export it from the kernel.
>  > > But whatever.
>  > 
>  > I have a question: why can't we get at the DMI stuff from userspace
>  > since "dmidecode" is a tool in userspace?
> 
> We can, but we could do better.
> What's missing is an *event* that udev can see, so that it
> knows what to do.
> 
> Imagine: asus_acpi gets a MODULE_DMI("ASUS") or whatever, and then
> at boottime, we register a sysfs modalias of the system DMI string.
> Suddenly we have two pieces of the puzzle, and udev will see the
> modalias and happily pull in any modules that match the alias.
> 
> All without any changes to userspace at all.

I also saw asus_acpi module loaded on a server.
rmmodding it results in (sorry about escape chars):


BUG: at lib/kref.c:32 kref_get()

Call Trace:
 [<ffffffff80232ed2>] kref_get+0x2f/0x34
 [<ffffffff802501ed>] kobject_get+0x12/0x17
 [<ffffffff80386422>] get_driver+0x14/0x1a
 [<ffffffff80386439>] driver_remove_file+0x11/0x32
 [<ffffffff803858e8>] bus_remove_driver+0x1c/0x90
 [<ffffffff8038637e>] driver_unregister+0xd/0x16
 [<ffffffff8829e79d>] :asus_acpi:asus_acpi_exit+0x21/0x35
Starting D-Bus d [<ffffffff802981ad>] sys_delete_module+0x1b1/0x1e0
aemonESC7ESC[?25l^MESC[ [<ffffffff80220069>] dma_alloc_coherent
+0x57/0x23f
80CESC[10DESC[1;32md [<ffffffff8025511e>] system_call+0x7e/0x83
oneESC[m^OESC8ESC[?25h^M

BUG: at lib/kref.c:32 kref_get()

Call Trace:
 [<ffffffff80232ed2>] kref_get+0x2f/0x34
 [<ffffffff802501ed>] kobject_get+0x12/0x17
Starting irqbala [<ffffffff80386422>] get_driver+0x14/0x1a
nce ESC7ESC[?25l^MESC[8 [<ffffffff803115bb>] kobject_release+0x0/0x9
0CESC[10DESC[1;32mdo [<ffffffff80386439>] driver_remove_file+0x11/0x32
neESC[m^OESC8ESC[?25h^M^M [<ffffffff803858f7>] bus_remove_driver
+0x2b/0x90

acpid: loading  [<ffffffff8038637e>] driver_unregister+0xd/0x16
ACPI modules ( a [<ffffffff8829e79d>] :asus_acpi:asus_acpi_exit
+0x21/0x35
c battery button [<ffffffff802981ad>] sys_delete_module+0x1b1/0x1e0
 ) ESC7ESC[?25l^MESC[80 [<ffffffff80220069>] dma_alloc_coherent
+0x57/0x23f
CESC[10DESC[1;32mdon [<ffffffff8025511e>] system_call+0x7e/0x83
eESC[m^OESC8ESC[?25h^M

acpid: will not Unable to handle kernel NULL pointer dereference at
0000000000000020 RIP: 
 [<ffffffff803f8a02>] klist_del+0xa/0x46
PGD 21f3d0067 PUD 21efa9067 PMD 0 
Oops: 0000 [1] SMP 
CPU 0 


This patch fixes it (Len, can you apply this?):

Do not load asus_acpi if no device has been found

Do not rely on acpi_bus_register_driver() return value which
is always zero, even no device has been found.

---
 drivers/acpi/asus_acpi.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: linux-2.6.21-rc3/drivers/acpi/asus_acpi.c
===================================================================
--- linux-2.6.21-rc3.orig/drivers/acpi/asus_acpi.c
+++ linux-2.6.21-rc3/drivers/acpi/asus_acpi.c
@@ -1398,7 +1398,7 @@ static int __init asus_acpi_init(void)
 	if (!asus_hotk_found) {
 		acpi_bus_unregister_driver(&asus_hotk_driver);
 		remove_proc_entry(PROC_ASUS, acpi_root_dir);
-		return result;
+		return -ENODEV;
 	}
 
 	asus_backlight_device = backlight_device_register("asus",NULL,NULL,


-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux