Re: [PATCH] arm64: xen: Implement EFI reset_system callback
Hi, On 18/04/17 19:51, Juergen Gross wrote: On 18/04/17 20:46, Stefano Stabellini wrote: On Tue, 18 Apr 2017, Juergen Gross wrote: On 18/04/17 20:37, Stefano Stabellini wrote: On Thu, 6 Apr 2017, Juergen Gross wrote: On 06/04/17 18:43, Daniel Kiper wrote: On Thu, Apr 06, 2017 at 06:22:44PM +0200, Juergen Gross wrote: On 06/04/17 18:06, Daniel Kiper wrote: Hi Julien, On Thu, Apr 06, 2017 at 04:39:13PM +0100, Julien Grall wrote: Hi Daniel, On 06/04/17 16:20, Daniel Kiper wrote: On Thu, Apr 06, 2017 at 04:38:24PM +0200, Juergen Gross wrote: On 06/04/17 16:27, Daniel Kiper wrote: On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: Hi Juergen, On 06/04/17 07:23, Juergen Gross wrote: On 05/04/17 21:49, Boris Ostrovsky wrote: On 04/05/2017 02:14 PM, Julien Grall wrote: The x86 code has theoritically a similar issue, altought EFI does not seem to be the preferred method. I have left it unimplemented on x86 and CCed Linux Xen x86 maintainers to know their view here. (+Daniel) This could be a problem for x86 as well, at least theoretically. xen_machine_power_off() may call pm_power_off(), which is efi.reset_system. So I think we should have a similar routine there. +1 I don't see any problem with such a routine added, in contrast to potential "reboots" instead of power off without it. So I think this dummy xen_efi_reset_system() should be added to drivers/xen/efi.c instead. I will resend the patch during day with xen_efi_reset_system moved to common code and implement the x86 counterpart (thought, I will not be able to test it). I think that this is ARM specific issue. On x86 machine_restart() calls xen_restart(). Hence, everything works. So, I think that it should be fixed only for ARM. Anyway, please CC me when you send a patch. What about xen_machine_power_off() (as stated in Boris' mail)? Guys what do you think about that: --- a/drivers/firmware/efi/reboot.c +++ b/drivers/firmware/efi/reboot.c @@ -55,7 +55,7 @@ static void efi_power_off(void) static int __init efi_shutdown_init(void) { - if (!efi_enabled(EFI_RUNTIME_SERVICES)) + if (!efi_enabled(EFI_RUNTIME_SERVICES) || efi_enabled(EFI_PARAVIRT)) return -ENODEV; if (efi_poweroff_required()) Julien, for ARM64 please take a look at arch/arm64/kernel/efi.c:efi_poweroff_required(void). I hope that tweaks for both files should solve our problem. This sounds good for power off (I haven't tried to power off DOM0 yet). But this will not solve the restart problem (see machine_restart in arch/arm64/kernel/process.c) which call directly efi_reboot. Hmmm... It seems to me that efi.reset_system override with empty function in arch/arm/xen/efi.c is the best solution. So, I see three patches here. One for drivers/firmware/efi/reboot.c, one for arch/arm/xen/efi.c and one for arch/arm64/kernel/efi.c. Does it make sense? I still think the empty function should be in drivers/xen/efi.c and we should use it in arch/x86/xen/efi.c, too. If you wish we can go that way too. Though I thing that we should fix drivers/firmware/efi/reboot.c:efi_shutdown_init() too. Just in case. Sure, go ahead. I won't object. For the Xen on ARM side, the original patch that started this thread (20170405181417.15985-1-julien.gr...@arm.com) is good to go, right? As I said: the dummy xen_efi_reset_system() should be in drivers/xen/efi.c OK. Who is working on it? Didn't Julien say he would do it? Yes. I looked at bit closer to the problem mention with power off. xen_efi_reset_system cannot be a NOP because there may not be fallback alternatives (see machine_power_off in arch/arm64/kernel/process.c) So I think we would have to translate EFI_RESET* to Xen SHUTDOWN_* and then call HYPERVISOR_sched_op directly. I will send a new version soon. Cheers, -- Julien Grall
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On Wed, Apr 19, 2017 at 08:37:38PM +0100, Matt Fleming wrote: > On Wed, 19 Apr, at 09:29:06PM, Daniel Kiper wrote: > > On Tue, Apr 18, 2017 at 02:46:50PM +0100, Matt Fleming wrote: > > > On Thu, 06 Apr, at 04:55:11PM, Mark Rutland wrote: > > > > > > > > Please, let's keep the Xen knowledge constrained to the Xen EFI wrapper, > > > > rather than spreading it further. > > > > > > > > IMO, given reset_system is a *mandatory* function, the Xen wrapper > > > > should provide an implementation. > > > > > > > > I don't see why you can't implement a wrapper that calls the usual Xen > > > > poweroff/reset functions. > > > > > > I realise I'm making a sweeping generalisation, but adding > > > EFI_PARAVIRT is almost always the wrong thing to do. > > > > Why? > > Because it makes paravirt a special case, and there's usually very > little reason to make it special in the EFI code. Special-casing means > more branches, more code paths, a bigger testing matrix and more > complex code. > > EFI_PARAVIRT does have its uses, like for those scenarios where we > don't have a table of function pointers that can be overidden for > paravirt. > > But we do have such a table for ->reset_system(). This is more or less what I expected. Thanks a lot for explanation. Daniel
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On Wed, 19 Apr, at 09:29:06PM, Daniel Kiper wrote: > On Tue, Apr 18, 2017 at 02:46:50PM +0100, Matt Fleming wrote: > > On Thu, 06 Apr, at 04:55:11PM, Mark Rutland wrote: > > > > > > Please, let's keep the Xen knowledge constrained to the Xen EFI wrapper, > > > rather than spreading it further. > > > > > > IMO, given reset_system is a *mandatory* function, the Xen wrapper > > > should provide an implementation. > > > > > > I don't see why you can't implement a wrapper that calls the usual Xen > > > poweroff/reset functions. > > > > I realise I'm making a sweeping generalisation, but adding > > EFI_PARAVIRT is almost always the wrong thing to do. > > Why? Because it makes paravirt a special case, and there's usually very little reason to make it special in the EFI code. Special-casing means more branches, more code paths, a bigger testing matrix and more complex code. EFI_PARAVIRT does have its uses, like for those scenarios where we don't have a table of function pointers that can be overidden for paravirt. But we do have such a table for ->reset_system().
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On Tue, Apr 18, 2017 at 02:46:50PM +0100, Matt Fleming wrote: > On Thu, 06 Apr, at 04:55:11PM, Mark Rutland wrote: > > > > Please, let's keep the Xen knowledge constrained to the Xen EFI wrapper, > > rather than spreading it further. > > > > IMO, given reset_system is a *mandatory* function, the Xen wrapper > > should provide an implementation. > > > > I don't see why you can't implement a wrapper that calls the usual Xen > > poweroff/reset functions. > > I realise I'm making a sweeping generalisation, but adding > EFI_PARAVIRT is almost always the wrong thing to do. Why? > I'd much prefer to see Mark's idea implemented. If you wish I do not object. Daniel
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On 18/04/17 20:46, Stefano Stabellini wrote: > On Tue, 18 Apr 2017, Juergen Gross wrote: >> On 18/04/17 20:37, Stefano Stabellini wrote: >>> On Thu, 6 Apr 2017, Juergen Gross wrote: On 06/04/17 18:43, Daniel Kiper wrote: > On Thu, Apr 06, 2017 at 06:22:44PM +0200, Juergen Gross wrote: >> On 06/04/17 18:06, Daniel Kiper wrote: >>> Hi Julien, >>> >>> On Thu, Apr 06, 2017 at 04:39:13PM +0100, Julien Grall wrote: Hi Daniel, On 06/04/17 16:20, Daniel Kiper wrote: > On Thu, Apr 06, 2017 at 04:38:24PM +0200, Juergen Gross wrote: >> On 06/04/17 16:27, Daniel Kiper wrote: >>> On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: Hi Juergen, On 06/04/17 07:23, Juergen Gross wrote: > On 05/04/17 21:49, Boris Ostrovsky wrote: >> On 04/05/2017 02:14 PM, Julien Grall wrote: >>> The x86 code has theoritically a similar issue, altought EFI >>> does not >>> seem to be the preferred method. I have left it unimplemented >>> on x86 and >>> CCed Linux Xen x86 maintainers to know their view here. >> >> (+Daniel) >> >> This could be a problem for x86 as well, at least theoretically. >> xen_machine_power_off() may call pm_power_off(), which is >> efi.reset_system. >> >> So I think we should have a similar routine there. > > +1 > > I don't see any problem with such a routine added, in contrast to > potential "reboots" instead of power off without it. > > So I think this dummy xen_efi_reset_system() should be added to > drivers/xen/efi.c instead. I will resend the patch during day with xen_efi_reset_system moved to common code and implement the x86 counterpart (thought, I will not be able to test it). >>> >>> I think that this is ARM specific issue. On x86 machine_restart() >>> calls >>> xen_restart(). Hence, everything works. So, I think that it should >>> be >>> fixed only for ARM. Anyway, please CC me when you send a patch. >> >> What about xen_machine_power_off() (as stated in Boris' mail)? > > Guys what do you think about that: > > --- a/drivers/firmware/efi/reboot.c > +++ b/drivers/firmware/efi/reboot.c > @@ -55,7 +55,7 @@ static void efi_power_off(void) > > static int __init efi_shutdown_init(void) > { > - if (!efi_enabled(EFI_RUNTIME_SERVICES)) > + if (!efi_enabled(EFI_RUNTIME_SERVICES) || > efi_enabled(EFI_PARAVIRT)) >return -ENODEV; > >if (efi_poweroff_required()) > > > Julien, for ARM64 please take a look at > arch/arm64/kernel/efi.c:efi_poweroff_required(void). > > I hope that tweaks for both files should solve our problem. This sounds good for power off (I haven't tried to power off DOM0 yet). But this will not solve the restart problem (see machine_restart in arch/arm64/kernel/process.c) which call directly efi_reboot. >>> >>> Hmmm... It seems to me that efi.reset_system override with empty >>> function >>> in arch/arm/xen/efi.c is the best solution. So, I see three patches >>> here. >>> One for drivers/firmware/efi/reboot.c, one for arch/arm/xen/efi.c and >>> one >>> for arch/arm64/kernel/efi.c. Does it make sense? >> >> I still think the empty function should be in drivers/xen/efi.c and we >> should use it in arch/x86/xen/efi.c, too. > > If you wish we can go that way too. Though I thing that we should fix > drivers/firmware/efi/reboot.c:efi_shutdown_init() too. Just in case. Sure, go ahead. I won't object. >>> >>> For the Xen on ARM side, the original patch that started this thread >>> (20170405181417.15985-1-julien.gr...@arm.com) is good to go, right? >>> >> >> As I said: the dummy xen_efi_reset_system() should be in >> drivers/xen/efi.c > > OK. Who is working on it? Didn't Julien say he would do it? Juergen
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On Tue, 18 Apr 2017, Juergen Gross wrote: > On 18/04/17 20:37, Stefano Stabellini wrote: > > On Thu, 6 Apr 2017, Juergen Gross wrote: > >> On 06/04/17 18:43, Daniel Kiper wrote: > >>> On Thu, Apr 06, 2017 at 06:22:44PM +0200, Juergen Gross wrote: > On 06/04/17 18:06, Daniel Kiper wrote: > > Hi Julien, > > > > On Thu, Apr 06, 2017 at 04:39:13PM +0100, Julien Grall wrote: > >> Hi Daniel, > >> > >> On 06/04/17 16:20, Daniel Kiper wrote: > >>> On Thu, Apr 06, 2017 at 04:38:24PM +0200, Juergen Gross wrote: > On 06/04/17 16:27, Daniel Kiper wrote: > > On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: > >> Hi Juergen, > >> > >> On 06/04/17 07:23, Juergen Gross wrote: > >>> On 05/04/17 21:49, Boris Ostrovsky wrote: > On 04/05/2017 02:14 PM, Julien Grall wrote: > > The x86 code has theoritically a similar issue, altought EFI > > does not > > seem to be the preferred method. I have left it unimplemented > > on x86 and > > CCed Linux Xen x86 maintainers to know their view here. > > (+Daniel) > > This could be a problem for x86 as well, at least theoretically. > xen_machine_power_off() may call pm_power_off(), which is > efi.reset_system. > > So I think we should have a similar routine there. > >>> > >>> +1 > >>> > >>> I don't see any problem with such a routine added, in contrast to > >>> potential "reboots" instead of power off without it. > >>> > >>> So I think this dummy xen_efi_reset_system() should be added to > >>> drivers/xen/efi.c instead. > >> > >> I will resend the patch during day with xen_efi_reset_system moved > >> to common code and implement the x86 counterpart (thought, I will > >> not be able to test it). > > > > I think that this is ARM specific issue. On x86 machine_restart() > > calls > > xen_restart(). Hence, everything works. So, I think that it should > > be > > fixed only for ARM. Anyway, please CC me when you send a patch. > > What about xen_machine_power_off() (as stated in Boris' mail)? > >>> > >>> Guys what do you think about that: > >>> > >>> --- a/drivers/firmware/efi/reboot.c > >>> +++ b/drivers/firmware/efi/reboot.c > >>> @@ -55,7 +55,7 @@ static void efi_power_off(void) > >>> > >>> static int __init efi_shutdown_init(void) > >>> { > >>> - if (!efi_enabled(EFI_RUNTIME_SERVICES)) > >>> + if (!efi_enabled(EFI_RUNTIME_SERVICES) || > >>> efi_enabled(EFI_PARAVIRT)) > >>>return -ENODEV; > >>> > >>>if (efi_poweroff_required()) > >>> > >>> > >>> Julien, for ARM64 please take a look at > >>> arch/arm64/kernel/efi.c:efi_poweroff_required(void). > >>> > >>> I hope that tweaks for both files should solve our problem. > >> > >> This sounds good for power off (I haven't tried to power off DOM0 > >> yet). But this will not solve the restart problem (see > >> machine_restart in arch/arm64/kernel/process.c) which call directly > >> efi_reboot. > > > > Hmmm... It seems to me that efi.reset_system override with empty > > function > > in arch/arm/xen/efi.c is the best solution. So, I see three patches > > here. > > One for drivers/firmware/efi/reboot.c, one for arch/arm/xen/efi.c and > > one > > for arch/arm64/kernel/efi.c. Does it make sense? > > I still think the empty function should be in drivers/xen/efi.c and we > should use it in arch/x86/xen/efi.c, too. > >>> > >>> If you wish we can go that way too. Though I thing that we should fix > >>> drivers/firmware/efi/reboot.c:efi_shutdown_init() too. Just in case. > >> > >> Sure, go ahead. I won't object. > > > > For the Xen on ARM side, the original patch that started this thread > > (20170405181417.15985-1-julien.gr...@arm.com) is good to go, right? > > > > As I said: the dummy xen_efi_reset_system() should be in > drivers/xen/efi.c OK. Who is working on it?
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On 18/04/17 20:37, Stefano Stabellini wrote: > On Thu, 6 Apr 2017, Juergen Gross wrote: >> On 06/04/17 18:43, Daniel Kiper wrote: >>> On Thu, Apr 06, 2017 at 06:22:44PM +0200, Juergen Gross wrote: On 06/04/17 18:06, Daniel Kiper wrote: > Hi Julien, > > On Thu, Apr 06, 2017 at 04:39:13PM +0100, Julien Grall wrote: >> Hi Daniel, >> >> On 06/04/17 16:20, Daniel Kiper wrote: >>> On Thu, Apr 06, 2017 at 04:38:24PM +0200, Juergen Gross wrote: On 06/04/17 16:27, Daniel Kiper wrote: > On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: >> Hi Juergen, >> >> On 06/04/17 07:23, Juergen Gross wrote: >>> On 05/04/17 21:49, Boris Ostrovsky wrote: On 04/05/2017 02:14 PM, Julien Grall wrote: > The x86 code has theoritically a similar issue, altought EFI does > not > seem to be the preferred method. I have left it unimplemented on > x86 and > CCed Linux Xen x86 maintainers to know their view here. (+Daniel) This could be a problem for x86 as well, at least theoretically. xen_machine_power_off() may call pm_power_off(), which is efi.reset_system. So I think we should have a similar routine there. >>> >>> +1 >>> >>> I don't see any problem with such a routine added, in contrast to >>> potential "reboots" instead of power off without it. >>> >>> So I think this dummy xen_efi_reset_system() should be added to >>> drivers/xen/efi.c instead. >> >> I will resend the patch during day with xen_efi_reset_system moved >> to common code and implement the x86 counterpart (thought, I will >> not be able to test it). > > I think that this is ARM specific issue. On x86 machine_restart() > calls > xen_restart(). Hence, everything works. So, I think that it should be > fixed only for ARM. Anyway, please CC me when you send a patch. What about xen_machine_power_off() (as stated in Boris' mail)? >>> >>> Guys what do you think about that: >>> >>> --- a/drivers/firmware/efi/reboot.c >>> +++ b/drivers/firmware/efi/reboot.c >>> @@ -55,7 +55,7 @@ static void efi_power_off(void) >>> >>> static int __init efi_shutdown_init(void) >>> { >>> - if (!efi_enabled(EFI_RUNTIME_SERVICES)) >>> + if (!efi_enabled(EFI_RUNTIME_SERVICES) || >>> efi_enabled(EFI_PARAVIRT)) >>>return -ENODEV; >>> >>>if (efi_poweroff_required()) >>> >>> >>> Julien, for ARM64 please take a look at >>> arch/arm64/kernel/efi.c:efi_poweroff_required(void). >>> >>> I hope that tweaks for both files should solve our problem. >> >> This sounds good for power off (I haven't tried to power off DOM0 >> yet). But this will not solve the restart problem (see >> machine_restart in arch/arm64/kernel/process.c) which call directly >> efi_reboot. > > Hmmm... It seems to me that efi.reset_system override with empty function > in arch/arm/xen/efi.c is the best solution. So, I see three patches here. > One for drivers/firmware/efi/reboot.c, one for arch/arm/xen/efi.c and one > for arch/arm64/kernel/efi.c. Does it make sense? I still think the empty function should be in drivers/xen/efi.c and we should use it in arch/x86/xen/efi.c, too. >>> >>> If you wish we can go that way too. Though I thing that we should fix >>> drivers/firmware/efi/reboot.c:efi_shutdown_init() too. Just in case. >> >> Sure, go ahead. I won't object. > > For the Xen on ARM side, the original patch that started this thread > (20170405181417.15985-1-julien.gr...@arm.com) is good to go, right? > As I said: the dummy xen_efi_reset_system() should be in drivers/xen/efi.c Juergen
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On Thu, 6 Apr 2017, Juergen Gross wrote: > On 06/04/17 18:43, Daniel Kiper wrote: > > On Thu, Apr 06, 2017 at 06:22:44PM +0200, Juergen Gross wrote: > >> On 06/04/17 18:06, Daniel Kiper wrote: > >>> Hi Julien, > >>> > >>> On Thu, Apr 06, 2017 at 04:39:13PM +0100, Julien Grall wrote: > Hi Daniel, > > On 06/04/17 16:20, Daniel Kiper wrote: > > On Thu, Apr 06, 2017 at 04:38:24PM +0200, Juergen Gross wrote: > >> On 06/04/17 16:27, Daniel Kiper wrote: > >>> On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: > Hi Juergen, > > On 06/04/17 07:23, Juergen Gross wrote: > > On 05/04/17 21:49, Boris Ostrovsky wrote: > >> On 04/05/2017 02:14 PM, Julien Grall wrote: > >>> The x86 code has theoritically a similar issue, altought EFI does > >>> not > >>> seem to be the preferred method. I have left it unimplemented on > >>> x86 and > >>> CCed Linux Xen x86 maintainers to know their view here. > >> > >> (+Daniel) > >> > >> This could be a problem for x86 as well, at least theoretically. > >> xen_machine_power_off() may call pm_power_off(), which is > >> efi.reset_system. > >> > >> So I think we should have a similar routine there. > > > > +1 > > > > I don't see any problem with such a routine added, in contrast to > > potential "reboots" instead of power off without it. > > > > So I think this dummy xen_efi_reset_system() should be added to > > drivers/xen/efi.c instead. > > I will resend the patch during day with xen_efi_reset_system moved > to common code and implement the x86 counterpart (thought, I will > not be able to test it). > >>> > >>> I think that this is ARM specific issue. On x86 machine_restart() > >>> calls > >>> xen_restart(). Hence, everything works. So, I think that it should be > >>> fixed only for ARM. Anyway, please CC me when you send a patch. > >> > >> What about xen_machine_power_off() (as stated in Boris' mail)? > > > > Guys what do you think about that: > > > > --- a/drivers/firmware/efi/reboot.c > > +++ b/drivers/firmware/efi/reboot.c > > @@ -55,7 +55,7 @@ static void efi_power_off(void) > > > > static int __init efi_shutdown_init(void) > > { > > - if (!efi_enabled(EFI_RUNTIME_SERVICES)) > > + if (!efi_enabled(EFI_RUNTIME_SERVICES) || > > efi_enabled(EFI_PARAVIRT)) > >return -ENODEV; > > > >if (efi_poweroff_required()) > > > > > > Julien, for ARM64 please take a look at > > arch/arm64/kernel/efi.c:efi_poweroff_required(void). > > > > I hope that tweaks for both files should solve our problem. > > This sounds good for power off (I haven't tried to power off DOM0 > yet). But this will not solve the restart problem (see > machine_restart in arch/arm64/kernel/process.c) which call directly > efi_reboot. > >>> > >>> Hmmm... It seems to me that efi.reset_system override with empty function > >>> in arch/arm/xen/efi.c is the best solution. So, I see three patches here. > >>> One for drivers/firmware/efi/reboot.c, one for arch/arm/xen/efi.c and one > >>> for arch/arm64/kernel/efi.c. Does it make sense? > >> > >> I still think the empty function should be in drivers/xen/efi.c and we > >> should use it in arch/x86/xen/efi.c, too. > > > > If you wish we can go that way too. Though I thing that we should fix > > drivers/firmware/efi/reboot.c:efi_shutdown_init() too. Just in case. > > Sure, go ahead. I won't object. For the Xen on ARM side, the original patch that started this thread (20170405181417.15985-1-julien.gr...@arm.com) is good to go, right?
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On Thu, 06 Apr, at 04:55:11PM, Mark Rutland wrote: > > Please, let's keep the Xen knowledge constrained to the Xen EFI wrapper, > rather than spreading it further. > > IMO, given reset_system is a *mandatory* function, the Xen wrapper > should provide an implementation. > > I don't see why you can't implement a wrapper that calls the usual Xen > poweroff/reset functions. I realise I'm making a sweeping generalisation, but adding EFI_PARAVIRT is almost always the wrong thing to do. I'd much prefer to see Mark's idea implemented.
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On 06/04/17 18:43, Daniel Kiper wrote: > On Thu, Apr 06, 2017 at 06:22:44PM +0200, Juergen Gross wrote: >> On 06/04/17 18:06, Daniel Kiper wrote: >>> Hi Julien, >>> >>> On Thu, Apr 06, 2017 at 04:39:13PM +0100, Julien Grall wrote: Hi Daniel, On 06/04/17 16:20, Daniel Kiper wrote: > On Thu, Apr 06, 2017 at 04:38:24PM +0200, Juergen Gross wrote: >> On 06/04/17 16:27, Daniel Kiper wrote: >>> On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: Hi Juergen, On 06/04/17 07:23, Juergen Gross wrote: > On 05/04/17 21:49, Boris Ostrovsky wrote: >> On 04/05/2017 02:14 PM, Julien Grall wrote: >>> The x86 code has theoritically a similar issue, altought EFI does >>> not >>> seem to be the preferred method. I have left it unimplemented on >>> x86 and >>> CCed Linux Xen x86 maintainers to know their view here. >> >> (+Daniel) >> >> This could be a problem for x86 as well, at least theoretically. >> xen_machine_power_off() may call pm_power_off(), which is >> efi.reset_system. >> >> So I think we should have a similar routine there. > > +1 > > I don't see any problem with such a routine added, in contrast to > potential "reboots" instead of power off without it. > > So I think this dummy xen_efi_reset_system() should be added to > drivers/xen/efi.c instead. I will resend the patch during day with xen_efi_reset_system moved to common code and implement the x86 counterpart (thought, I will not be able to test it). >>> >>> I think that this is ARM specific issue. On x86 machine_restart() calls >>> xen_restart(). Hence, everything works. So, I think that it should be >>> fixed only for ARM. Anyway, please CC me when you send a patch. >> >> What about xen_machine_power_off() (as stated in Boris' mail)? > > Guys what do you think about that: > > --- a/drivers/firmware/efi/reboot.c > +++ b/drivers/firmware/efi/reboot.c > @@ -55,7 +55,7 @@ static void efi_power_off(void) > > static int __init efi_shutdown_init(void) > { > - if (!efi_enabled(EFI_RUNTIME_SERVICES)) > + if (!efi_enabled(EFI_RUNTIME_SERVICES) || > efi_enabled(EFI_PARAVIRT)) >return -ENODEV; > >if (efi_poweroff_required()) > > > Julien, for ARM64 please take a look at > arch/arm64/kernel/efi.c:efi_poweroff_required(void). > > I hope that tweaks for both files should solve our problem. This sounds good for power off (I haven't tried to power off DOM0 yet). But this will not solve the restart problem (see machine_restart in arch/arm64/kernel/process.c) which call directly efi_reboot. >>> >>> Hmmm... It seems to me that efi.reset_system override with empty function >>> in arch/arm/xen/efi.c is the best solution. So, I see three patches here. >>> One for drivers/firmware/efi/reboot.c, one for arch/arm/xen/efi.c and one >>> for arch/arm64/kernel/efi.c. Does it make sense? >> >> I still think the empty function should be in drivers/xen/efi.c and we >> should use it in arch/x86/xen/efi.c, too. > > If you wish we can go that way too. Though I thing that we should fix > drivers/firmware/efi/reboot.c:efi_shutdown_init() too. Just in case. Sure, go ahead. I won't object. Juergen
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On Thu, Apr 06, 2017 at 06:22:44PM +0200, Juergen Gross wrote: > On 06/04/17 18:06, Daniel Kiper wrote: > > Hi Julien, > > > > On Thu, Apr 06, 2017 at 04:39:13PM +0100, Julien Grall wrote: > >> Hi Daniel, > >> > >> On 06/04/17 16:20, Daniel Kiper wrote: > >>> On Thu, Apr 06, 2017 at 04:38:24PM +0200, Juergen Gross wrote: > On 06/04/17 16:27, Daniel Kiper wrote: > > On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: > >> Hi Juergen, > >> > >> On 06/04/17 07:23, Juergen Gross wrote: > >>> On 05/04/17 21:49, Boris Ostrovsky wrote: > On 04/05/2017 02:14 PM, Julien Grall wrote: > > The x86 code has theoritically a similar issue, altought EFI does > > not > > seem to be the preferred method. I have left it unimplemented on > > x86 and > > CCed Linux Xen x86 maintainers to know their view here. > > (+Daniel) > > This could be a problem for x86 as well, at least theoretically. > xen_machine_power_off() may call pm_power_off(), which is > efi.reset_system. > > So I think we should have a similar routine there. > >>> > >>> +1 > >>> > >>> I don't see any problem with such a routine added, in contrast to > >>> potential "reboots" instead of power off without it. > >>> > >>> So I think this dummy xen_efi_reset_system() should be added to > >>> drivers/xen/efi.c instead. > >> > >> I will resend the patch during day with xen_efi_reset_system moved > >> to common code and implement the x86 counterpart (thought, I will > >> not be able to test it). > > > > I think that this is ARM specific issue. On x86 machine_restart() calls > > xen_restart(). Hence, everything works. So, I think that it should be > > fixed only for ARM. Anyway, please CC me when you send a patch. > > What about xen_machine_power_off() (as stated in Boris' mail)? > >>> > >>> Guys what do you think about that: > >>> > >>> --- a/drivers/firmware/efi/reboot.c > >>> +++ b/drivers/firmware/efi/reboot.c > >>> @@ -55,7 +55,7 @@ static void efi_power_off(void) > >>> > >>> static int __init efi_shutdown_init(void) > >>> { > >>> - if (!efi_enabled(EFI_RUNTIME_SERVICES)) > >>> + if (!efi_enabled(EFI_RUNTIME_SERVICES) || > >>> efi_enabled(EFI_PARAVIRT)) > >>>return -ENODEV; > >>> > >>>if (efi_poweroff_required()) > >>> > >>> > >>> Julien, for ARM64 please take a look at > >>> arch/arm64/kernel/efi.c:efi_poweroff_required(void). > >>> > >>> I hope that tweaks for both files should solve our problem. > >> > >> This sounds good for power off (I haven't tried to power off DOM0 > >> yet). But this will not solve the restart problem (see > >> machine_restart in arch/arm64/kernel/process.c) which call directly > >> efi_reboot. > > > > Hmmm... It seems to me that efi.reset_system override with empty function > > in arch/arm/xen/efi.c is the best solution. So, I see three patches here. > > One for drivers/firmware/efi/reboot.c, one for arch/arm/xen/efi.c and one > > for arch/arm64/kernel/efi.c. Does it make sense? > > I still think the empty function should be in drivers/xen/efi.c and we > should use it in arch/x86/xen/efi.c, too. If you wish we can go that way too. Though I thing that we should fix drivers/firmware/efi/reboot.c:efi_shutdown_init() too. Just in case. Daniel
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On 06/04/17 18:06, Daniel Kiper wrote: > Hi Julien, > > On Thu, Apr 06, 2017 at 04:39:13PM +0100, Julien Grall wrote: >> Hi Daniel, >> >> On 06/04/17 16:20, Daniel Kiper wrote: >>> On Thu, Apr 06, 2017 at 04:38:24PM +0200, Juergen Gross wrote: On 06/04/17 16:27, Daniel Kiper wrote: > On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: >> Hi Juergen, >> >> On 06/04/17 07:23, Juergen Gross wrote: >>> On 05/04/17 21:49, Boris Ostrovsky wrote: On 04/05/2017 02:14 PM, Julien Grall wrote: > The x86 code has theoritically a similar issue, altought EFI does not > seem to be the preferred method. I have left it unimplemented on x86 > and > CCed Linux Xen x86 maintainers to know their view here. (+Daniel) This could be a problem for x86 as well, at least theoretically. xen_machine_power_off() may call pm_power_off(), which is efi.reset_system. So I think we should have a similar routine there. >>> >>> +1 >>> >>> I don't see any problem with such a routine added, in contrast to >>> potential "reboots" instead of power off without it. >>> >>> So I think this dummy xen_efi_reset_system() should be added to >>> drivers/xen/efi.c instead. >> >> I will resend the patch during day with xen_efi_reset_system moved >> to common code and implement the x86 counterpart (thought, I will >> not be able to test it). > > I think that this is ARM specific issue. On x86 machine_restart() calls > xen_restart(). Hence, everything works. So, I think that it should be > fixed only for ARM. Anyway, please CC me when you send a patch. What about xen_machine_power_off() (as stated in Boris' mail)? >>> >>> Guys what do you think about that: >>> >>> --- a/drivers/firmware/efi/reboot.c >>> +++ b/drivers/firmware/efi/reboot.c >>> @@ -55,7 +55,7 @@ static void efi_power_off(void) >>> >>> static int __init efi_shutdown_init(void) >>> { >>> - if (!efi_enabled(EFI_RUNTIME_SERVICES)) >>> + if (!efi_enabled(EFI_RUNTIME_SERVICES) || efi_enabled(EFI_PARAVIRT)) >>>return -ENODEV; >>> >>>if (efi_poweroff_required()) >>> >>> >>> Julien, for ARM64 please take a look at >>> arch/arm64/kernel/efi.c:efi_poweroff_required(void). >>> >>> I hope that tweaks for both files should solve our problem. >> >> This sounds good for power off (I haven't tried to power off DOM0 >> yet). But this will not solve the restart problem (see >> machine_restart in arch/arm64/kernel/process.c) which call directly >> efi_reboot. > > Hmmm... It seems to me that efi.reset_system override with empty function > in arch/arm/xen/efi.c is the best solution. So, I see three patches here. > One for drivers/firmware/efi/reboot.c, one for arch/arm/xen/efi.c and one > for arch/arm64/kernel/efi.c. Does it make sense? I still think the empty function should be in drivers/xen/efi.c and we should use it in arch/x86/xen/efi.c, too. Juergen
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
Hi Julien, On Thu, Apr 06, 2017 at 04:39:13PM +0100, Julien Grall wrote: > Hi Daniel, > > On 06/04/17 16:20, Daniel Kiper wrote: > >On Thu, Apr 06, 2017 at 04:38:24PM +0200, Juergen Gross wrote: > >>On 06/04/17 16:27, Daniel Kiper wrote: > >>>On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: > Hi Juergen, > > On 06/04/17 07:23, Juergen Gross wrote: > >On 05/04/17 21:49, Boris Ostrovsky wrote: > >>On 04/05/2017 02:14 PM, Julien Grall wrote: > >>>The x86 code has theoritically a similar issue, altought EFI does not > >>>seem to be the preferred method. I have left it unimplemented on x86 > >>>and > >>>CCed Linux Xen x86 maintainers to know their view here. > >> > >>(+Daniel) > >> > >>This could be a problem for x86 as well, at least theoretically. > >>xen_machine_power_off() may call pm_power_off(), which is > >>efi.reset_system. > >> > >>So I think we should have a similar routine there. > > > >+1 > > > >I don't see any problem with such a routine added, in contrast to > >potential "reboots" instead of power off without it. > > > >So I think this dummy xen_efi_reset_system() should be added to > >drivers/xen/efi.c instead. > > I will resend the patch during day with xen_efi_reset_system moved > to common code and implement the x86 counterpart (thought, I will > not be able to test it). > >>> > >>>I think that this is ARM specific issue. On x86 machine_restart() calls > >>>xen_restart(). Hence, everything works. So, I think that it should be > >>>fixed only for ARM. Anyway, please CC me when you send a patch. > >> > >>What about xen_machine_power_off() (as stated in Boris' mail)? > > > >Guys what do you think about that: > > > >--- a/drivers/firmware/efi/reboot.c > >+++ b/drivers/firmware/efi/reboot.c > >@@ -55,7 +55,7 @@ static void efi_power_off(void) > > > > static int __init efi_shutdown_init(void) > > { > >- if (!efi_enabled(EFI_RUNTIME_SERVICES)) > >+ if (!efi_enabled(EFI_RUNTIME_SERVICES) || efi_enabled(EFI_PARAVIRT)) > >return -ENODEV; > > > >if (efi_poweroff_required()) > > > > > >Julien, for ARM64 please take a look at > >arch/arm64/kernel/efi.c:efi_poweroff_required(void). > > > >I hope that tweaks for both files should solve our problem. > > This sounds good for power off (I haven't tried to power off DOM0 > yet). But this will not solve the restart problem (see > machine_restart in arch/arm64/kernel/process.c) which call directly > efi_reboot. Hmmm... It seems to me that efi.reset_system override with empty function in arch/arm/xen/efi.c is the best solution. So, I see three patches here. One for drivers/firmware/efi/reboot.c, one for arch/arm/xen/efi.c and one for arch/arm64/kernel/efi.c. Does it make sense? Daniel
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
[Adding the EFI maintainers] Tl;DR: Xen's EFI wrappery doesn't implement reset_system, so when invoked on arm64 we get a NULL dereference. On Thu, Apr 06, 2017 at 04:39:13PM +0100, Julien Grall wrote: > On 06/04/17 16:20, Daniel Kiper wrote: > >On Thu, Apr 06, 2017 at 04:38:24PM +0200, Juergen Gross wrote: > >>On 06/04/17 16:27, Daniel Kiper wrote: > >>>On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: > Hi Juergen, > > On 06/04/17 07:23, Juergen Gross wrote: > >On 05/04/17 21:49, Boris Ostrovsky wrote: > >>On 04/05/2017 02:14 PM, Julien Grall wrote: > >>>The x86 code has theoritically a similar issue, altought EFI does not > >>>seem to be the preferred method. I have left it unimplemented on x86 > >>>and > >>>CCed Linux Xen x86 maintainers to know their view here. > >> > >>(+Daniel) > >> > >>This could be a problem for x86 as well, at least theoretically. > >>xen_machine_power_off() may call pm_power_off(), which is > >>efi.reset_system. > >> > >>So I think we should have a similar routine there. > > > >+1 > > > >I don't see any problem with such a routine added, in contrast to > >potential "reboots" instead of power off without it. > > > >So I think this dummy xen_efi_reset_system() should be added to > >drivers/xen/efi.c instead. > > I will resend the patch during day with xen_efi_reset_system moved > to common code and implement the x86 counterpart (thought, I will > not be able to test it). > >>> > >>>I think that this is ARM specific issue. On x86 machine_restart() calls > >>>xen_restart(). Hence, everything works. So, I think that it should be > >>>fixed only for ARM. Anyway, please CC me when you send a patch. > >> > >>What about xen_machine_power_off() (as stated in Boris' mail)? > > > >Guys what do you think about that: > > > >--- a/drivers/firmware/efi/reboot.c > >+++ b/drivers/firmware/efi/reboot.c > >@@ -55,7 +55,7 @@ static void efi_power_off(void) > > > > static int __init efi_shutdown_init(void) > > { > >- if (!efi_enabled(EFI_RUNTIME_SERVICES)) > >+ if (!efi_enabled(EFI_RUNTIME_SERVICES) || efi_enabled(EFI_PARAVIRT)) > >return -ENODEV; > > > >if (efi_poweroff_required()) > > > > > >Julien, for ARM64 please take a look at > >arch/arm64/kernel/efi.c:efi_poweroff_required(void). > > > >I hope that tweaks for both files should solve our problem. > > This sounds good for power off (I haven't tried to power off DOM0 > yet). Please, let's keep the Xen knowledge constrained to the Xen EFI wrapper, rather than spreading it further. IMO, given reset_system is a *mandatory* function, the Xen wrapper should provide an implementation. I don't see why you can't implement a wrapper that calls the usual Xen poweroff/reset functions. Thanks, Mark.
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
Hi Daniel, On 06/04/17 16:20, Daniel Kiper wrote: On Thu, Apr 06, 2017 at 04:38:24PM +0200, Juergen Gross wrote: On 06/04/17 16:27, Daniel Kiper wrote: On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: Hi Juergen, On 06/04/17 07:23, Juergen Gross wrote: On 05/04/17 21:49, Boris Ostrovsky wrote: On 04/05/2017 02:14 PM, Julien Grall wrote: The x86 code has theoritically a similar issue, altought EFI does not seem to be the preferred method. I have left it unimplemented on x86 and CCed Linux Xen x86 maintainers to know their view here. (+Daniel) This could be a problem for x86 as well, at least theoretically. xen_machine_power_off() may call pm_power_off(), which is efi.reset_system. So I think we should have a similar routine there. +1 I don't see any problem with such a routine added, in contrast to potential "reboots" instead of power off without it. So I think this dummy xen_efi_reset_system() should be added to drivers/xen/efi.c instead. I will resend the patch during day with xen_efi_reset_system moved to common code and implement the x86 counterpart (thought, I will not be able to test it). I think that this is ARM specific issue. On x86 machine_restart() calls xen_restart(). Hence, everything works. So, I think that it should be fixed only for ARM. Anyway, please CC me when you send a patch. What about xen_machine_power_off() (as stated in Boris' mail)? Guys what do you think about that: --- a/drivers/firmware/efi/reboot.c +++ b/drivers/firmware/efi/reboot.c @@ -55,7 +55,7 @@ static void efi_power_off(void) static int __init efi_shutdown_init(void) { - if (!efi_enabled(EFI_RUNTIME_SERVICES)) + if (!efi_enabled(EFI_RUNTIME_SERVICES) || efi_enabled(EFI_PARAVIRT)) return -ENODEV; if (efi_poweroff_required()) Julien, for ARM64 please take a look at arch/arm64/kernel/efi.c:efi_poweroff_required(void). I hope that tweaks for both files should solve our problem. This sounds good for power off (I haven't tried to power off DOM0 yet). But this will not solve the restart problem (see machine_restart in arch/arm64/kernel/process.c) which call directly efi_reboot. Cheers, -- Julien Grall
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On Thu, Apr 06, 2017 at 04:38:24PM +0200, Juergen Gross wrote: > On 06/04/17 16:27, Daniel Kiper wrote: > > On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: > >> Hi Juergen, > >> > >> On 06/04/17 07:23, Juergen Gross wrote: > >>> On 05/04/17 21:49, Boris Ostrovsky wrote: > On 04/05/2017 02:14 PM, Julien Grall wrote: > > The x86 code has theoritically a similar issue, altought EFI does not > > seem to be the preferred method. I have left it unimplemented on x86 and > > CCed Linux Xen x86 maintainers to know their view here. > > (+Daniel) > > This could be a problem for x86 as well, at least theoretically. > xen_machine_power_off() may call pm_power_off(), which is > efi.reset_system. > > So I think we should have a similar routine there. > >>> > >>> +1 > >>> > >>> I don't see any problem with such a routine added, in contrast to > >>> potential "reboots" instead of power off without it. > >>> > >>> So I think this dummy xen_efi_reset_system() should be added to > >>> drivers/xen/efi.c instead. > >> > >> I will resend the patch during day with xen_efi_reset_system moved > >> to common code and implement the x86 counterpart (thought, I will > >> not be able to test it). > > > > I think that this is ARM specific issue. On x86 machine_restart() calls > > xen_restart(). Hence, everything works. So, I think that it should be > > fixed only for ARM. Anyway, please CC me when you send a patch. > > What about xen_machine_power_off() (as stated in Boris' mail)? Guys what do you think about that: --- a/drivers/firmware/efi/reboot.c +++ b/drivers/firmware/efi/reboot.c @@ -55,7 +55,7 @@ static void efi_power_off(void) static int __init efi_shutdown_init(void) { - if (!efi_enabled(EFI_RUNTIME_SERVICES)) + if (!efi_enabled(EFI_RUNTIME_SERVICES) || efi_enabled(EFI_PARAVIRT)) return -ENODEV; if (efi_poweroff_required()) Julien, for ARM64 please take a look at arch/arm64/kernel/efi.c:efi_poweroff_required(void). I hope that tweaks for both files should solve our problem. Daniel
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On 06/04/17 16:27, Daniel Kiper wrote: > On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: >> Hi Juergen, >> >> On 06/04/17 07:23, Juergen Gross wrote: >>> On 05/04/17 21:49, Boris Ostrovsky wrote: On 04/05/2017 02:14 PM, Julien Grall wrote: > The x86 code has theoritically a similar issue, altought EFI does not > seem to be the preferred method. I have left it unimplemented on x86 and > CCed Linux Xen x86 maintainers to know their view here. (+Daniel) This could be a problem for x86 as well, at least theoretically. xen_machine_power_off() may call pm_power_off(), which is efi.reset_system. So I think we should have a similar routine there. >>> >>> +1 >>> >>> I don't see any problem with such a routine added, in contrast to >>> potential "reboots" instead of power off without it. >>> >>> So I think this dummy xen_efi_reset_system() should be added to >>> drivers/xen/efi.c instead. >> >> I will resend the patch during day with xen_efi_reset_system moved >> to common code and implement the x86 counterpart (thought, I will >> not be able to test it). > > I think that this is ARM specific issue. On x86 machine_restart() calls > xen_restart(). Hence, everything works. So, I think that it should be > fixed only for ARM. Anyway, please CC me when you send a patch. What about xen_machine_power_off() (as stated in Boris' mail)? Juergen
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On 04/06/2017 10:32 AM, Julien Grall wrote: > Hi Daniel, > > On 06/04/17 15:27, Daniel Kiper wrote: >> On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: >>> Hi Juergen, >>> >>> On 06/04/17 07:23, Juergen Gross wrote: On 05/04/17 21:49, Boris Ostrovsky wrote: > On 04/05/2017 02:14 PM, Julien Grall wrote: >> The x86 code has theoritically a similar issue, altought EFI does >> not >> seem to be the preferred method. I have left it unimplemented on >> x86 and >> CCed Linux Xen x86 maintainers to know their view here. > > (+Daniel) > > This could be a problem for x86 as well, at least theoretically. > xen_machine_power_off() may call pm_power_off(), which is > efi.reset_system. > > So I think we should have a similar routine there. +1 I don't see any problem with such a routine added, in contrast to potential "reboots" instead of power off without it. So I think this dummy xen_efi_reset_system() should be added to drivers/xen/efi.c instead. >>> >>> I will resend the patch during day with xen_efi_reset_system moved >>> to common code and implement the x86 counterpart (thought, I will >>> not be able to test it). >> >> I think that this is ARM specific issue. On x86 machine_restart() calls >> xen_restart(). Hence, everything works. So, I think that it should be >> fixed only for ARM. Anyway, please CC me when you send a patch. > > This thread already a fix for ARM64. So do I need to resend a patch > with x86 fixed or not? Yes please. Daniel is correct that we are safe with xen_restart(). However, we are not safe when machine_ops.power_off is called. Thanks. -boris
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
Hi Daniel, On 06/04/17 15:27, Daniel Kiper wrote: On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: Hi Juergen, On 06/04/17 07:23, Juergen Gross wrote: On 05/04/17 21:49, Boris Ostrovsky wrote: On 04/05/2017 02:14 PM, Julien Grall wrote: The x86 code has theoritically a similar issue, altought EFI does not seem to be the preferred method. I have left it unimplemented on x86 and CCed Linux Xen x86 maintainers to know their view here. (+Daniel) This could be a problem for x86 as well, at least theoretically. xen_machine_power_off() may call pm_power_off(), which is efi.reset_system. So I think we should have a similar routine there. +1 I don't see any problem with such a routine added, in contrast to potential "reboots" instead of power off without it. So I think this dummy xen_efi_reset_system() should be added to drivers/xen/efi.c instead. I will resend the patch during day with xen_efi_reset_system moved to common code and implement the x86 counterpart (thought, I will not be able to test it). I think that this is ARM specific issue. On x86 machine_restart() calls xen_restart(). Hence, everything works. So, I think that it should be fixed only for ARM. Anyway, please CC me when you send a patch. This thread already a fix for ARM64. So do I need to resend a patch with x86 fixed or not? Cheers, -- Julien Grall
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On Thu, Apr 06, 2017 at 09:32:32AM +0100, Julien Grall wrote: > Hi Juergen, > > On 06/04/17 07:23, Juergen Gross wrote: > >On 05/04/17 21:49, Boris Ostrovsky wrote: > >>On 04/05/2017 02:14 PM, Julien Grall wrote: > >>>The x86 code has theoritically a similar issue, altought EFI does not > >>>seem to be the preferred method. I have left it unimplemented on x86 and > >>>CCed Linux Xen x86 maintainers to know their view here. > >> > >>(+Daniel) > >> > >>This could be a problem for x86 as well, at least theoretically. > >>xen_machine_power_off() may call pm_power_off(), which is efi.reset_system. > >> > >>So I think we should have a similar routine there. > > > >+1 > > > >I don't see any problem with such a routine added, in contrast to > >potential "reboots" instead of power off without it. > > > >So I think this dummy xen_efi_reset_system() should be added to > >drivers/xen/efi.c instead. > > I will resend the patch during day with xen_efi_reset_system moved > to common code and implement the x86 counterpart (thought, I will > not be able to test it). I think that this is ARM specific issue. On x86 machine_restart() calls xen_restart(). Hence, everything works. So, I think that it should be fixed only for ARM. Anyway, please CC me when you send a patch. Daniel
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On 06/04/17 10:32, Julien Grall wrote: > Hi Juergen, > > On 06/04/17 07:23, Juergen Gross wrote: >> On 05/04/17 21:49, Boris Ostrovsky wrote: >>> On 04/05/2017 02:14 PM, Julien Grall wrote: The x86 code has theoritically a similar issue, altought EFI does not seem to be the preferred method. I have left it unimplemented on x86 and CCed Linux Xen x86 maintainers to know their view here. >>> >>> (+Daniel) >>> >>> This could be a problem for x86 as well, at least theoretically. >>> xen_machine_power_off() may call pm_power_off(), which is >>> efi.reset_system. >>> >>> So I think we should have a similar routine there. >> >> +1 >> >> I don't see any problem with such a routine added, in contrast to >> potential "reboots" instead of power off without it. >> >> So I think this dummy xen_efi_reset_system() should be added to >> drivers/xen/efi.c instead. > > I will resend the patch during day with xen_efi_reset_system moved to > common code and implement the x86 counterpart (thought, I will not be > able to test it). I'm rather sure it isn't hit very often. Otherwise there would be more complaints about crashes during power off (in fact I do remember several occasions where somebody claimed power off seemed to do a reboot only). Juergen >> This should also probably be fixed in stable tree. >> >> Yes. > > I will CC stable. > > Thank you, >
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
Hi Juergen, On 06/04/17 07:23, Juergen Gross wrote: On 05/04/17 21:49, Boris Ostrovsky wrote: On 04/05/2017 02:14 PM, Julien Grall wrote: The x86 code has theoritically a similar issue, altought EFI does not seem to be the preferred method. I have left it unimplemented on x86 and CCed Linux Xen x86 maintainers to know their view here. (+Daniel) This could be a problem for x86 as well, at least theoretically. xen_machine_power_off() may call pm_power_off(), which is efi.reset_system. So I think we should have a similar routine there. +1 I don't see any problem with such a routine added, in contrast to potential "reboots" instead of power off without it. So I think this dummy xen_efi_reset_system() should be added to drivers/xen/efi.c instead. I will resend the patch during day with xen_efi_reset_system moved to common code and implement the x86 counterpart (thought, I will not be able to test it). This should also probably be fixed in stable tree. Yes. I will CC stable. Thank you, -- Julien Grall
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On 05/04/17 21:49, Boris Ostrovsky wrote: > On 04/05/2017 02:14 PM, Julien Grall wrote: >> When rebooting DOM0 with ACPI, the kernel is crashing with the stack trace >> [1]. >> >> This is happening because when EFI runtimes are enabled, the reset code >> (see machin_restart) will first try to use EFI restart method. >> >> However, the EFI restart code is expecting the reset_system callback to >> be always set. This is not the case for Xen and will lead to crash. >> >> Looking at the reboot path, it is expected to fallback on an alternative >> reboot method if one does not work. So implement reset_system callback >> as a NOP for Xen. >> >> [ 36.999270] reboot: Restarting system >> [ 37.002921] Internal error: Attempting to execute userspace memory: >> 8604 [#1] PREEMPT SMP >> [ 37.011460] Modules linked in: >> [ 37.014598] CPU: 0 PID: 1 Comm: systemd-shutdow Not tainted >> 4.11.0-rc1-3-g1e248b60a39b-dirty #506 >> [ 37.023903] Hardware name: (null) (DT) >> [ 37.027734] task: 800902068000 task.stack: 800902064000 >> [ 37.033739] PC is at 0x0 >> [ 37.036359] LR is at efi_reboot+0x94/0xd0 >> [ 37.040438] pc : [<>] lr : [] pstate: >> 404001c5 >> [ 37.047920] sp : 800902067cf0 >> [ 37.051314] x29: 800902067cf0 x28: 800902068000 >> [ 37.056709] x27: 08992000 x26: 008e >> [ 37.062104] x25: 0123 x24: 0015 >> [ 37.067499] x23: x22: 08e6e250 >> [ 37.072894] x21: 08e6e000 x20: >> [ 37.078289] x19: 08e5d4c8 x18: 0010 >> [ 37.083684] x17: a7c27470 x16: deadbeef >> [ 37.089079] x15: 0006 x14: 88f42bef >> [ 37.094474] x13: 08f42bfd x12: 08e706c0 >> [ 37.099870] x11: 08e7 x10: 05f5e0ff >> [ 37.105265] x9 : 800902067a50 x8 : 6974726174736552 >> [ 37.110660] x7 : 08cc6fb8 x6 : 08cc6fb0 >> [ 37.116055] x5 : 08c97dd8 x4 : >> [ 37.121453] x3 : x2 : >> [ 37.126845] x1 : x0 : >> [ 37.132239] >> [ 37.133808] Process systemd-shutdow (pid: 1, stack limit = >> 0x800902064000) >> [ 37.141118] Stack: (0x800902067cf0 to 0x800902068000) >> [ 37.146949] 7ce0: 800902067d40 >> 08085334 >> [ 37.154869] 7d00: 08f3b000 800902067d40 >> 080852e0 >> [ 37.162787] 7d20: 08cc6fb0 08cc6fb8 08c7f580 >> 08c97dd8 >> [ 37.170706] 7d40: 800902067d60 080e2c2c >> 01234567 >> [ 37.178624] 7d60: 800902067d80 080e2ee8 >> 080e2df4 >> [ 37.186544] 7d80: 080830f0 >> 8008ff1c1000 >> [ 37.194462] 7da0: a7c4b1cc >> 0024 >> [ 37.202380] 7dc0: 800902067dd0 0005 f24743c8 >> 0004 >> [ 37.210299] 7de0: f2475f03 0010 f2474418 >> 0005 >> [ 37.218218] 7e00: f2474578 000a d6b722c0 >> 0001 >> [ 37.226136] 7e20: 0123 0038 800902067e50 >> 081e7294 >> [ 37.234055] 7e40: 800902067e60 081e935c 800902067e60 >> 081e9388 >> [ 37.241973] 7e60: 800902067eb0 081ea388 >> 8008ff1c1000 >> [ 37.249892] 7e80: a7c4a79c >> 0002 >> [ 37.257810] 7ea0: 0104 >> 080830f0 >> [ 37.265729] 7ec0: fee1dead 28121969 01234567 >> >> [ 37.273651] 7ee0: 80800080 80008080 >> feffa9a9d4ff2d66 >> [ 37.281567] 7f00: 008e feffa9a9d5b60e0f 7f7f7f7f >> 0101010101010101 >> [ 37.289485] 7f20: 0010 0008 003a >> a7ccf588 >> [ 37.297404] 7f40: d6b87d00 a7c4b1b0 f2474be0 >> d6b88000 >> [ 37.305326] 7f60: f2474fb0 01234567 >> >> [ 37.313240] 7f80: 0001 d6b70d4d >> >> [ 37.321159] 7fa0: 0001 f2474ea0 d6b5e2e0 >> f2474e80 >> [ 37.329078] 7fc0: a7c4b1cc fee1dead >> 008e >> [ 37.336997] 7fe0: 9ce839cffee77eab >> fafdbf9f7ed57f2f >> [ 37.344911] Call trace: >> [ 37.347437] Exception stack(0x800902067b20 to 0x800902067c50) >> [ 37.353970] 7b20: 08e5d4c8 0001 80f82000 >> >> [ 37.361883] 7b40: 800902067b60 ff
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On Wed, 5 Apr 2017, Julien Grall wrote: > When rebooting DOM0 with ACPI, the kernel is crashing with the stack trace > [1]. > > This is happening because when EFI runtimes are enabled, the reset code > (see machin_restart) will first try to use EFI restart method. > > However, the EFI restart code is expecting the reset_system callback to > be always set. This is not the case for Xen and will lead to crash. > > Looking at the reboot path, it is expected to fallback on an alternative > reboot method if one does not work. So implement reset_system callback > as a NOP for Xen. > > [ 36.999270] reboot: Restarting system > [ 37.002921] Internal error: Attempting to execute userspace memory: > 8604 [#1] PREEMPT SMP > [ 37.011460] Modules linked in: > [ 37.014598] CPU: 0 PID: 1 Comm: systemd-shutdow Not tainted > 4.11.0-rc1-3-g1e248b60a39b-dirty #506 > [ 37.023903] Hardware name: (null) (DT) > [ 37.027734] task: 800902068000 task.stack: 800902064000 > [ 37.033739] PC is at 0x0 > [ 37.036359] LR is at efi_reboot+0x94/0xd0 > [ 37.040438] pc : [<>] lr : [] pstate: > 404001c5 > [ 37.047920] sp : 800902067cf0 > [ 37.051314] x29: 800902067cf0 x28: 800902068000 > [ 37.056709] x27: 08992000 x26: 008e > [ 37.062104] x25: 0123 x24: 0015 > [ 37.067499] x23: x22: 08e6e250 > [ 37.072894] x21: 08e6e000 x20: > [ 37.078289] x19: 08e5d4c8 x18: 0010 > [ 37.083684] x17: a7c27470 x16: deadbeef > [ 37.089079] x15: 0006 x14: 88f42bef > [ 37.094474] x13: 08f42bfd x12: 08e706c0 > [ 37.099870] x11: 08e7 x10: 05f5e0ff > [ 37.105265] x9 : 800902067a50 x8 : 6974726174736552 > [ 37.110660] x7 : 08cc6fb8 x6 : 08cc6fb0 > [ 37.116055] x5 : 08c97dd8 x4 : > [ 37.121453] x3 : x2 : > [ 37.126845] x1 : x0 : > [ 37.132239] > [ 37.133808] Process systemd-shutdow (pid: 1, stack limit = > 0x800902064000) > [ 37.141118] Stack: (0x800902067cf0 to 0x800902068000) > [ 37.146949] 7ce0: 800902067d40 > 08085334 > [ 37.154869] 7d00: 08f3b000 800902067d40 > 080852e0 > [ 37.162787] 7d20: 08cc6fb0 08cc6fb8 08c7f580 > 08c97dd8 > [ 37.170706] 7d40: 800902067d60 080e2c2c > 01234567 > [ 37.178624] 7d60: 800902067d80 080e2ee8 > 080e2df4 > [ 37.186544] 7d80: 080830f0 > 8008ff1c1000 > [ 37.194462] 7da0: a7c4b1cc > 0024 > [ 37.202380] 7dc0: 800902067dd0 0005 f24743c8 > 0004 > [ 37.210299] 7de0: f2475f03 0010 f2474418 > 0005 > [ 37.218218] 7e00: f2474578 000a d6b722c0 > 0001 > [ 37.226136] 7e20: 0123 0038 800902067e50 > 081e7294 > [ 37.234055] 7e40: 800902067e60 081e935c 800902067e60 > 081e9388 > [ 37.241973] 7e60: 800902067eb0 081ea388 > 8008ff1c1000 > [ 37.249892] 7e80: a7c4a79c > 0002 > [ 37.257810] 7ea0: 0104 > 080830f0 > [ 37.265729] 7ec0: fee1dead 28121969 01234567 > > [ 37.273651] 7ee0: 80800080 80008080 > feffa9a9d4ff2d66 > [ 37.281567] 7f00: 008e feffa9a9d5b60e0f 7f7f7f7f > 0101010101010101 > [ 37.289485] 7f20: 0010 0008 003a > a7ccf588 > [ 37.297404] 7f40: d6b87d00 a7c4b1b0 f2474be0 > d6b88000 > [ 37.305326] 7f60: f2474fb0 01234567 > > [ 37.313240] 7f80: 0001 d6b70d4d > > [ 37.321159] 7fa0: 0001 f2474ea0 d6b5e2e0 > f2474e80 > [ 37.329078] 7fc0: a7c4b1cc fee1dead > 008e > [ 37.336997] 7fe0: 9ce839cffee77eab > fafdbf9f7ed57f2f > [ 37.344911] Call trace: > [ 37.347437] Exception stack(0x800902067b20 to 0x800902067c50) > [ 37.353970] 7b20: 08e5d4c8 0001 80f82000 > > [ 37.361883] 7b40: 800902067b60 08e17000 08f44c68 > 0001081081b4 > [ 37.369802] 7b60: 800902067bf0 08108478 > 08c235b
Re: [PATCH] arm64: xen: Implement EFI reset_system callback
On 04/05/2017 02:14 PM, Julien Grall wrote: > When rebooting DOM0 with ACPI, the kernel is crashing with the stack trace > [1]. > > This is happening because when EFI runtimes are enabled, the reset code > (see machin_restart) will first try to use EFI restart method. > > However, the EFI restart code is expecting the reset_system callback to > be always set. This is not the case for Xen and will lead to crash. > > Looking at the reboot path, it is expected to fallback on an alternative > reboot method if one does not work. So implement reset_system callback > as a NOP for Xen. > > [ 36.999270] reboot: Restarting system > [ 37.002921] Internal error: Attempting to execute userspace memory: > 8604 [#1] PREEMPT SMP > [ 37.011460] Modules linked in: > [ 37.014598] CPU: 0 PID: 1 Comm: systemd-shutdow Not tainted > 4.11.0-rc1-3-g1e248b60a39b-dirty #506 > [ 37.023903] Hardware name: (null) (DT) > [ 37.027734] task: 800902068000 task.stack: 800902064000 > [ 37.033739] PC is at 0x0 > [ 37.036359] LR is at efi_reboot+0x94/0xd0 > [ 37.040438] pc : [<>] lr : [] pstate: > 404001c5 > [ 37.047920] sp : 800902067cf0 > [ 37.051314] x29: 800902067cf0 x28: 800902068000 > [ 37.056709] x27: 08992000 x26: 008e > [ 37.062104] x25: 0123 x24: 0015 > [ 37.067499] x23: x22: 08e6e250 > [ 37.072894] x21: 08e6e000 x20: > [ 37.078289] x19: 08e5d4c8 x18: 0010 > [ 37.083684] x17: a7c27470 x16: deadbeef > [ 37.089079] x15: 0006 x14: 88f42bef > [ 37.094474] x13: 08f42bfd x12: 08e706c0 > [ 37.099870] x11: 08e7 x10: 05f5e0ff > [ 37.105265] x9 : 800902067a50 x8 : 6974726174736552 > [ 37.110660] x7 : 08cc6fb8 x6 : 08cc6fb0 > [ 37.116055] x5 : 08c97dd8 x4 : > [ 37.121453] x3 : x2 : > [ 37.126845] x1 : x0 : > [ 37.132239] > [ 37.133808] Process systemd-shutdow (pid: 1, stack limit = > 0x800902064000) > [ 37.141118] Stack: (0x800902067cf0 to 0x800902068000) > [ 37.146949] 7ce0: 800902067d40 > 08085334 > [ 37.154869] 7d00: 08f3b000 800902067d40 > 080852e0 > [ 37.162787] 7d20: 08cc6fb0 08cc6fb8 08c7f580 > 08c97dd8 > [ 37.170706] 7d40: 800902067d60 080e2c2c > 01234567 > [ 37.178624] 7d60: 800902067d80 080e2ee8 > 080e2df4 > [ 37.186544] 7d80: 080830f0 > 8008ff1c1000 > [ 37.194462] 7da0: a7c4b1cc > 0024 > [ 37.202380] 7dc0: 800902067dd0 0005 f24743c8 > 0004 > [ 37.210299] 7de0: f2475f03 0010 f2474418 > 0005 > [ 37.218218] 7e00: f2474578 000a d6b722c0 > 0001 > [ 37.226136] 7e20: 0123 0038 800902067e50 > 081e7294 > [ 37.234055] 7e40: 800902067e60 081e935c 800902067e60 > 081e9388 > [ 37.241973] 7e60: 800902067eb0 081ea388 > 8008ff1c1000 > [ 37.249892] 7e80: a7c4a79c > 0002 > [ 37.257810] 7ea0: 0104 > 080830f0 > [ 37.265729] 7ec0: fee1dead 28121969 01234567 > > [ 37.273651] 7ee0: 80800080 80008080 > feffa9a9d4ff2d66 > [ 37.281567] 7f00: 008e feffa9a9d5b60e0f 7f7f7f7f > 0101010101010101 > [ 37.289485] 7f20: 0010 0008 003a > a7ccf588 > [ 37.297404] 7f40: d6b87d00 a7c4b1b0 f2474be0 > d6b88000 > [ 37.305326] 7f60: f2474fb0 01234567 > > [ 37.313240] 7f80: 0001 d6b70d4d > > [ 37.321159] 7fa0: 0001 f2474ea0 d6b5e2e0 > f2474e80 > [ 37.329078] 7fc0: a7c4b1cc fee1dead > 008e > [ 37.336997] 7fe0: 9ce839cffee77eab > fafdbf9f7ed57f2f > [ 37.344911] Call trace: > [ 37.347437] Exception stack(0x800902067b20 to 0x800902067c50) > [ 37.353970] 7b20: 08e5d4c8 0001 80f82000 > > [ 37.361883] 7b40: 800902067b60 08e17000 08f44c68 > 0001081081b4 > [ 37.369802] 7b60: 800902067bf0 08108478 > 08c235b