Re: [RFC PATCH] ACPI: Add _DEP(Operation Region Dependencies) support to fix battery issue on the Asus T100TA

From: Rafael J. Wysocki
Date: Fri Sep 26 2014 - 09:29:09 EST


On Friday, September 26, 2014 01:23:29 PM Lan Tianyu wrote:
> On 2014å09æ26æ 03:27, Rafael J. Wysocki wrote:
> > I'm not sure what you mean. "Dependent" means "depending on something", so the
> > question reads "This requires the devices with _DEP to have a list of devices
> > that depend on them" which is probably not what you meant.
> >
>
> Sorry, I didn't say clearly. The "dependent device" I meant is device
> pointed to by _DEP(the master you mentioned at the bottom). I thought
> master also needed a list to find its slave(device with _DEP).
>
> > For each device with _DEP we have dep_devices, so if you pass a pointer
> > (opregion_adev) to the device that has just installed an operation region
> > handler to acpi_walk_dep_device_list() as an argument, then you can do
> >
> > for (i = 0; i < adev->dep_devices.count; i++)
> > if (opregion_adev->handle == adev->dep_devices.handles[i]) {
> > adev->dep_unmet = false;
> > acpi_bus_attach(adev);
> > list_del(&dep->node);
> > kfree(dep);
> > }
> >
> > and of course appropriate locking needs to be there in case this races with
> > enumeration during hotplug after loading a new ACPI table on demand).
> >
>
> Yes, we can scan all devices on the list and match the opregion_adev
> with adev->dep_devices. This is comparatively simple solution.
>
> > I think you can even define
> >
> > struct acpi_dep_data {
> > struct list_head node;
> > struct acpi_device *master;
> > struct acpi_device *slave;
> > };
> >
> > and create that for every valid pair of master (device pointed to by _DEP)/slave
> > (device with _DEP) and create a list of these. Then, you won't need dep_devices
> > in struct acpi_device any more and your acpi_walk_dep_device_list() will only
> > need to walk the list until it finds the matching master/slave pair.
>
> One question is that when create struct acpi_dep_data for the dependency
> relationship between master and slave. If do this when slave's ACPI
> device is created during ACPI namespace scan, master's ACPI device maybe
> not created at that point. So acpi_handle maybe more suitable than
> struct acpi_device here.

Right. The handle is fine too and should be sufficient.

--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/