Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1701936 > unrolled thread
| Started by | Michal Hocko <mhocko@kernel.org> |
|---|---|
| First post | 2017-08-02 11:10 +0200 |
| Last post | 2017-08-03 13:30 +0200 |
| Articles | 5 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: A udev rule to serve the change event of ACPI container? Michal Hocko <mhocko@kernel.org> - 2017-08-02 11:10 +0200
Re: A udev rule to serve the change event of ACPI container? joeyli <jlee@suse.com> - 2017-08-03 11:30 +0200
Re: A udev rule to serve the change event of ACPI container? Michal Hocko <mhocko@kernel.org> - 2017-08-03 11:40 +0200
Re: A udev rule to serve the change event of ACPI container? joeyli <jlee@suse.com> - 2017-08-03 12:00 +0200
Re: A udev rule to serve the change event of ACPI container? Michal Hocko <mhocko@kernel.org> - 2017-08-03 13:30 +0200
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-08-02 11:10 +0200 |
| Subject | Re: A udev rule to serve the change event of ACPI container? |
| Message-ID | <u9XPc-7SS-11@gated-at.bofh.it> |
On Mon 31-07-17 15:38:45, Joey Lee wrote: > Hi Michal, > > Sorry for my delay... > > On Tue, Jul 25, 2017 at 02:48:37PM +0200, Michal Hocko wrote: > > On Mon 24-07-17 17:29:21, Joey Lee wrote: [...] > > > For the success case, yes, we can clear the flag when the _EJ0 of container > > > is success. But for the fail case, we don't know when the operation is > > > terminated. > > > > Hmm, this is rather strange. What is the BIOS state in the meantime? > > Let's say it doesn't retry. Does it wait for the OS for ever? > > > > Unfortunately ACPI spec doesn't mention the detail of BIOS behavior for > container hot-removing. > > IMHO, if the BIOS doesn't retry, at least it should maintains a timer > to handle the OS layer time out then BIOS resets hardware(turns off > progress light or something else...). > > The old BIOS just treats the ejection event as a button event. BIOS > emits 0x103 ejection event to OS after user presses a button or UI. > Then BIOS hopes that OS(either kernel or userland) finishs all jobs, > calls _EJ0 to turn off power, and calls _OST to return state to BIOS. > > If the ejection event from BIOS doesn't trigger anything in upper OS > layer, old BIOS can not against this situation unless it has a timer. Right but I would consider that a BIOS problem. It is simply not feasible to expect that OS will react in instance. Especially when we are talking about resources like memory which takes time proportional to the size to tear down properly. > > > > [...] > > > > > Base on the above figure, if userspace didn't do anything or it > > > > > just performs part of offline jobs. Then the container's [eject] > > > > > state will be always _SET_ there, and kernel will always check > > > > > the the latest child offline state when any child be offlined > > > > > by userspace. > > > > > > > > What is a problem about that? The eject is simply in progress until all > > > > is set. Or maybe I just misunderstood. > > > > > > > > > > I agree, but it's only for success case. For fail case, kernel can not > > > wait forever. Can we? > > > > Well, this won't consume any additional resources so I wouldn't be all > > that worried. Maybe we can reset the flag as soon as somebody tries to > > online some part of the container? > > > > So, the behavior is: > > Kernel received ejection event, set _Eject_ flag on container object > -> Kernel sends offline events to all children devices > -> User space performs cleaning jobs and offlines each child device > -> Kernel detects all children offlined > -> Kernel removes objects and calls power off(_EJ0) Yes this is what I've had in mind. It is the "kernel detects..." part which is not implemented now and that requires us to do the explicit eject from userspace, correct? > If anyone onlined one of the children devices in the term of waiting > userland offlines all children, then the _Eject_ flag will be clean > and ejection process will be interrupted. In this situation, administrator > needs to trigger ejection event again. yes > Do you think that the race hurts anything? What kind of race? -- Michal Hocko SUSE Labs
[toc] | [next] | [standalone]
| From | joeyli <jlee@suse.com> |
|---|---|
| Date | 2017-08-03 11:30 +0200 |
| Message-ID | <uakC7-6qh-41@gated-at.bofh.it> |
| In reply to | #1701936 |
On Wed, Aug 02, 2017 at 11:01:43AM +0200, Michal Hocko wrote: > On Mon 31-07-17 15:38:45, Joey Lee wrote: > > Hi Michal, > > > > Sorry for my delay... > > > > On Tue, Jul 25, 2017 at 02:48:37PM +0200, Michal Hocko wrote: > > > On Mon 24-07-17 17:29:21, Joey Lee wrote: > [...] > > > > For the success case, yes, we can clear the flag when the _EJ0 of container > > > > is success. But for the fail case, we don't know when the operation is > > > > terminated. > > > > > > Hmm, this is rather strange. What is the BIOS state in the meantime? > > > Let's say it doesn't retry. Does it wait for the OS for ever? > > > > > > > Unfortunately ACPI spec doesn't mention the detail of BIOS behavior for > > container hot-removing. > > > > IMHO, if the BIOS doesn't retry, at least it should maintains a timer > > to handle the OS layer time out then BIOS resets hardware(turns off > > progress light or something else...). > > > > The old BIOS just treats the ejection event as a button event. BIOS > > emits 0x103 ejection event to OS after user presses a button or UI. > > Then BIOS hopes that OS(either kernel or userland) finishs all jobs, > > calls _EJ0 to turn off power, and calls _OST to return state to BIOS. > > > > If the ejection event from BIOS doesn't trigger anything in upper OS > > layer, old BIOS can not against this situation unless it has a timer. > > Right but I would consider that a BIOS problem. It is simply not > feasible to expect that OS will react in instance. Especially when we > are talking about resources like memory which takes time proportional to > the size to tear down properly. > I agree with you that old BIOS implementation is not enough to handle the situation from OS layer. But those old BIOS has been shipped. We still need to consider to work with them. > > > > > [...] > > > > > > Base on the above figure, if userspace didn't do anything or it > > > > > > just performs part of offline jobs. Then the container's [eject] > > > > > > state will be always _SET_ there, and kernel will always check > > > > > > the the latest child offline state when any child be offlined > > > > > > by userspace. > > > > > > > > > > What is a problem about that? The eject is simply in progress until all > > > > > is set. Or maybe I just misunderstood. > > > > > > > > > > > > > I agree, but it's only for success case. For fail case, kernel can not > > > > wait forever. Can we? > > > > > > Well, this won't consume any additional resources so I wouldn't be all > > > that worried. Maybe we can reset the flag as soon as somebody tries to > > > online some part of the container? > > > > > > > So, the behavior is: > > > > Kernel received ejection event, set _Eject_ flag on container object > > -> Kernel sends offline events to all children devices > > -> User space performs cleaning jobs and offlines each child device > > -> Kernel detects all children offlined > > -> Kernel removes objects and calls power off(_EJ0) > > Yes this is what I've had in mind. It is the "kernel detects..." part > which is not implemented now and that requires us to do the explicit > eject from userspace, correct? > Yes, the _Eject_ flag and _detects_ part are not implemented now. In this approach, kernel still relies on user space to trigger the offline. The ejection process is still not transparent to user space. Is it what you want? > > If anyone onlined one of the children devices in the term of waiting > > userland offlines all children, then the _Eject_ flag will be clean > > and ejection process will be interrupted. In this situation, administrator > > needs to trigger ejection event again. > > yes > > > Do you think that the race hurts anything? > > What kind of race? User space set a child online before all childreen offlined, then the _Eject_ flag is cleaned and the ejection process is interrupted. Thanks Joey Lee
[toc] | [prev] | [next] | [standalone]
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-08-03 11:40 +0200 |
| Message-ID | <uakLL-6tI-7@gated-at.bofh.it> |
| In reply to | #1702835 |
On Thu 03-08-17 17:22:37, Joey Lee wrote: > On Wed, Aug 02, 2017 at 11:01:43AM +0200, Michal Hocko wrote: > > On Mon 31-07-17 15:38:45, Joey Lee wrote: [...] > > > So, the behavior is: > > > > > > Kernel received ejection event, set _Eject_ flag on container object > > > -> Kernel sends offline events to all children devices > > > -> User space performs cleaning jobs and offlines each child device > > > -> Kernel detects all children offlined > > > -> Kernel removes objects and calls power off(_EJ0) > > > > Yes this is what I've had in mind. It is the "kernel detects..." part > > which is not implemented now and that requires us to do the explicit > > eject from userspace, correct? > > > > Yes, the _Eject_ flag and _detects_ part are not implemented now. > > In this approach, kernel still relies on user space to trigger the > offline. The ejection process is still not transparent to user space. > Is it what you want? But as long as there is no auto-offlining then there is no other choice no? Besides that userspace even shouldn't care about the fact that the eject is in progress. That is a BIOS->OS deal AFAIU. All the userspace cares about is the proper cleanup of the resources and that happens at the offline time. > > > If anyone onlined one of the children devices in the term of waiting > > > userland offlines all children, then the _Eject_ flag will be clean > > > and ejection process will be interrupted. In this situation, administrator > > > needs to trigger ejection event again. > > > > yes > > > > > Do you think that the race hurts anything? > > > > What kind of race? > > User space set a child online before all childreen offlined, then > the _Eject_ flag is cleaned and the ejection process is interrupted. Is this really a race though? Kernel will always have a full picture and if userspace wants to online some part then the eject cannot succeed. This is something that a userspace driver eject cannot possibly handle. -- Michal Hocko SUSE Labs
[toc] | [prev] | [next] | [standalone]
| From | joeyli <jlee@suse.com> |
|---|---|
| Date | 2017-08-03 12:00 +0200 |
| Message-ID | <ual58-6Bs-31@gated-at.bofh.it> |
| In reply to | #1702838 |
On Thu, Aug 03, 2017 at 11:31:53AM +0200, Michal Hocko wrote: > On Thu 03-08-17 17:22:37, Joey Lee wrote: > > On Wed, Aug 02, 2017 at 11:01:43AM +0200, Michal Hocko wrote: > > > On Mon 31-07-17 15:38:45, Joey Lee wrote: > [...] > > > > So, the behavior is: > > > > > > > > Kernel received ejection event, set _Eject_ flag on container object > > > > -> Kernel sends offline events to all children devices > > > > -> User space performs cleaning jobs and offlines each child device > > > > -> Kernel detects all children offlined > > > > -> Kernel removes objects and calls power off(_EJ0) > > > > > > Yes this is what I've had in mind. It is the "kernel detects..." part > > > which is not implemented now and that requires us to do the explicit > > > eject from userspace, correct? > > > > > > > Yes, the _Eject_ flag and _detects_ part are not implemented now. > > > > In this approach, kernel still relies on user space to trigger the > > offline. The ejection process is still not transparent to user space. > > Is it what you want? > > But as long as there is no auto-offlining then there is no other choice > no? Besides that userspace even shouldn't care about the fact that the If Yasuaki's problem is already fixed in mainline, then the auto-offlining will be possible. > eject is in progress. That is a BIOS->OS deal AFAIU. All the userspace > cares about is the proper cleanup of the resources and that happens at > the offline time. > I agree! User space doesn't need to know the detail of kobject cleaning and ejection stages. > > > > If anyone onlined one of the children devices in the term of waiting > > > > userland offlines all children, then the _Eject_ flag will be clean > > > > and ejection process will be interrupted. In this situation, administrator > > > > needs to trigger ejection event again. > > > > > > yes > > > > > > > Do you think that the race hurts anything? > > > > > > What kind of race? > > > > User space set a child online before all childreen offlined, then > > the _Eject_ flag is cleaned and the ejection process is interrupted. > > Is this really a race though? Kernel will always have a full picture and > if userspace wants to online some part then the eject cannot succeed. > This is something that a userspace driver eject cannot possibly handle. Then I agree. I am waiting Yasuaki's response and want to know Rafael's and Yasuaki's opinions about the _Eject_ flag approach. Thanks a lot! Joey Lee
[toc] | [prev] | [next] | [standalone]
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-08-03 13:30 +0200 |
| Message-ID | <uamue-7FZ-23@gated-at.bofh.it> |
| In reply to | #1702859 |
On Thu 03-08-17 17:52:57, Joey Lee wrote: > On Thu, Aug 03, 2017 at 11:31:53AM +0200, Michal Hocko wrote: > > On Thu 03-08-17 17:22:37, Joey Lee wrote: > > > On Wed, Aug 02, 2017 at 11:01:43AM +0200, Michal Hocko wrote: > > > > On Mon 31-07-17 15:38:45, Joey Lee wrote: > > [...] > > > > > So, the behavior is: > > > > > > > > > > Kernel received ejection event, set _Eject_ flag on container object > > > > > -> Kernel sends offline events to all children devices > > > > > -> User space performs cleaning jobs and offlines each child device > > > > > -> Kernel detects all children offlined > > > > > -> Kernel removes objects and calls power off(_EJ0) > > > > > > > > Yes this is what I've had in mind. It is the "kernel detects..." part > > > > which is not implemented now and that requires us to do the explicit > > > > eject from userspace, correct? > > > > > > > > > > Yes, the _Eject_ flag and _detects_ part are not implemented now. > > > > > > In this approach, kernel still relies on user space to trigger the > > > offline. The ejection process is still not transparent to user space. > > > Is it what you want? > > > > But as long as there is no auto-offlining then there is no other choice > > no? Besides that userspace even shouldn't care about the fact that the > > If Yasuaki's problem is already fixed in mainline, then the auto-offlining > will be possible. Kernel alone cannot do the memory offline in general. There might be resources which need an explicit userspace action. But that is not important. The eject process should be pretty much independent on who is doing the offline. The only thing that matters is that the kernel ejects _after_ all resources are offline. This is the case already so the only case we need to settle down is how is the offline done on a container which has multiple resources. I still maintain my opinion that all associated resources should be notified for offline from the kernel rather than relying on userspace do somehow find those resources and offline them manually. -- Michal Hocko SUSE Labs
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web