Re: [Lhms-devel] [RFC] Patch [1/2] for acpi_memhotplug.c

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

 



On Thu, 2006-06-22 at 09:13 +0900, KAMEZAWA Hiroyuki wrote: 
> On Wed, 21 Jun 2006 16:23:47 -0700
> keith mannthey <kmannth@xxxxxxxxxx> wrote:
> > Update.  I have moved to 2.6.17-rc6-mm2 to work with the development
> > acpi_memhotplug driver there. I have added various debug statements and
> > this is what I know. 
> > 
> Thanks, looks informative.
> 
> >   acpi_memory_get_device calls acpi_bus_add
> >   acpi_bus_add calls acpi_add_single_object (fails)
> >   acpi_add_single_object passes acpi_bus_get_flags
> > 				finds the device present
> > 				passes acpi_device_set_context
> > 				calls acpi_device_register
> > 				after calling acpi_bus_find_driver
> > 				ends up 
> > 				if (!result) *child = device;
> > 				and returns. 
> >    
> 
> Then, "acpi_device" itself is added, but no driver data.
> acpi_add_single_object doesn't check return value of acpi_bus_find_driver(), 
> as you know. So...
> ===
> static int acpi_bus_find_driver(struct acpi_device *device)
> {
> <snip>
>         list_for_each_safe(node, next, &acpi_bus_drivers) {
> <snip>
>                 if (!acpi_bus_match(device, driver)) {
> (*)-----------      result = acpi_bus_driver_init(device, driver);
>                         if (!result)
>                                 goto Done;
>                 }
> ....
> }
> ===
> Next check point is:
> - acpi_bus_driver_init() is called or not
> - what acpi_bus_driver_init() returns

result = acpi_bus_driver_init(device, driver);
if (!result)
     goto Done;

I goto Done.  


> in acpi_bus_driver_init()
> - driver->ops.add() is called or not
> - what it retruns

It is called.  But that is not the whole story.  
In acpi_bus_driver_init it calls driver->ops.add(device). This ops.add
is not acpi_memory_device_add.  I do get not any printks that I would
expect from acpi_memory_device_add.   

If I print out in acpi_bus_driver_init
 printk(" device_add() about %s\n",acpi_device_name(device));
 result = driver->ops.add(device);

The device name is null.  I don't think the device / driver combo that
has been passed in are the right ones.  


> int acpi_memory_device_add()
> - it is called or not
> - why this  fails.
This is not called. 


After acpi_bus_driver_init calls the unknown .add it returns successfully. 
it sets 

device->driver = driver;
and
return 0;

Maybe I am picking the wrong driver from list_for_each_safe(node, next, &acpi_bus_drivers) 
in acpi_bus_find_driver?


Thanks for your help. 
-- 
keith mannthey <kmannth@xxxxxxxxxx>
Linux Technology Center IBM

-
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