Re: [RFC PATCH v3 0/3] acpi: Introduce prepare_remove device operation

From: Rafael J. Wysocki
Date: Thu Dec 06 2012 - 15:25:09 EST


On Friday, December 07, 2012 12:40:48 AM Jiang Liu wrote:
> On 12/04/2012 08:10 AM, Toshi Kani wrote:
> > On Mon, 2012-12-03 at 12:25 +0800, Hanjun Guo wrote:
> >> On 2012/11/30 6:27, Toshi Kani wrote:
> >>> On Thu, 2012-11-29 at 12:48 +0800, Hanjun Guo wrote:
> >>>> On 2012/11/29 2:41, Toshi Kani wrote:
> >>>>> On Wed, 2012-11-28 at 19:05 +0800, Hanjun Guo wrote:
> >>>>>> On 2012/11/24 1:50, Vasilis Liaskovitis wrote:
> >>>>>> As you may know, the ACPI based hotplug framework we are working on already addressed
> >>>>>> this problem, and the way we slove this problem is a bit like yours.
> >>>>>>
> >>>>>> We introduce hp_ops in struct acpi_device_ops:
> >>>>>> struct acpi_device_ops {
> >>>>>> acpi_op_add add;
> >>>>>> acpi_op_remove remove;
> >>>>>> acpi_op_start start;
> >>>>>> acpi_op_bind bind;
> >>>>>> acpi_op_unbind unbind;
> >>>>>> acpi_op_notify notify;
> >>>>>> #ifdef CONFIG_ACPI_HOTPLUG
> >>>>>> struct acpihp_dev_ops *hp_ops;
> >>>>>> #endif /* CONFIG_ACPI_HOTPLUG */
> >>>>>> };
> >>>>>>
> >>>>>> in hp_ops, we divide the prepare_remove into six small steps, that is:
> >>>>>> 1) pre_release(): optional step to mark device going to be removed/busy
> >>>>>> 2) release(): reclaim device from running system
> >>>>>> 3) post_release(): rollback if cancelled by user or error happened
> >>>>>> 4) pre_unconfigure(): optional step to solve possible dependency issue
> >>>>>> 5) unconfigure(): remove devices from running system
> >>>>>> 6) post_unconfigure(): free resources used by devices
> >>>>>>
> >>>>>> In this way, we can easily rollback if error happens.
> >>>>>> How do you think of this solution, any suggestion ? I think we can achieve
> >>>>>> a better way for sharing ideas. :)
> >>>>>
> >>>>> Yes, sharing idea is good. :) I do not know if we need all 6 steps (I
> >>>>> have not looked at all your changes yet..), but in my mind, a hot-plug
> >>>>> operation should be composed with the following 3 phases.
> >>>>
> >>>> Good idea ! we also implement a hot-plug operation in 3 phases:
> >>>> 1) acpihp_drv_pre_execute
> >>>> 2) acpihp_drv_execute
> >>>> 3) acpihp_drv_post_execute
> >>>> you may refer to :
> >>>> https://lkml.org/lkml/2012/11/4/79
> >>>
> >>> Great. Yes, I will take a look.
> >>
> >> Thanks, any comments are welcomed :)
> >
> > If I read the code right, the framework calls ACPI drivers differently
> > at boot-time and hot-add as follows. That is, the new entry points are
> > called at hot-add only, but .add() is called at both cases. This
> > requires .add() to work differently.
> >
> > Boot : .add()
> > Hot-Add : .add(), .pre_configure(), configure(), etc.
> >
> > I think the boot-time and hot-add initialization should be done
> > consistently. While there is difficulty with the current boot sequence,
> > the framework should be designed to allow them consistent, not make them
> > diverged.
> Hi Toshi,
> We have separated hotplug operations from driver binding/unbinding interface
> due to following considerations.
> 1) Physical CPU and memory devices are initialized/used before the ACPI subsystem
> is initialized. So under normal case, .add() of processor and acpi_memhotplug only
> figures out information about device already in working state instead of starting
> the device.
> 2) It's impossible to rmmod the processor and acpi_memhotplug driver at runtime
> if .remove() of CPU and memory drivers do really remove the CPU/memory device
> from the system. And the ACPI processor driver also implements CPU PM funcitonality
> other than hotplug.
>
> And recently Rafael has mentioned that he has a long term view to get rid of the
> concept of "ACPI device". If that happens, we could easily move the hotplug
> logic from ACPI device drivers into the hotplug framework if the hotplug logic
> is separated from the .add()/.remove() callbacks. Actually we could even move all
> hotplug only logic into the hotplug framework and don't rely on any ACPI device
> driver any more. So we could get rid of all these messy things. We could achieve
> that by:
> 1) moving code shared by ACPI device drivers and the hotplug framework into the core.
> 2) moving hotplug only code to the framework.
>
> Hi Rafael, what's your thoughts here?

I think that sounds good at the high level, but we need to get there
incrementally. This way it will be easier to maintain backwards
compatibility and follow the changes. Also, it will be easier for all of
the interested people from different companies to participate in the
development and make sure that everyones needs are going to be met this
way.

At this point, I'd like to see where the Toshi Kani's proposal is going to
take us.

Thanks,
Rafael


--
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/