* Re: [PATCH] arm64: xen: Implement EFI reset_system callback
[not found] ` <e449f220-8db7-d58c-bdbf-47ccd6dd014b-5wv7dgnIgG8@public.gmane.org>
@ 2017-04-06 15:55 ` Mark Rutland
2017-04-18 13:46 ` Matt Fleming
0 siblings, 1 reply; 6+ messages in thread
From: Mark Rutland @ 2017-04-06 15:55 UTC (permalink / raw)
To: Julien Grall
Cc: Daniel Kiper, Juergen Gross, Boris Ostrovsky,
sstabellini-DgEjT+Ai2ygdnm+yROfE0A,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
xen-devel-GuqFBffKawuEi8DpZVb4nw, Matt Fleming, Ard Biesheuvel,
linux-efi-u79uwXL29TY76Z2rM5mHXA
[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.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] arm64: xen: Implement EFI reset_system callback
2017-04-06 15:55 ` [PATCH] arm64: xen: Implement EFI reset_system callback Mark Rutland
@ 2017-04-18 13:46 ` Matt Fleming
[not found] ` <20170418134650.GL24360-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>
0 siblings, 1 reply; 6+ messages in thread
From: Matt Fleming @ 2017-04-18 13:46 UTC (permalink / raw)
To: Mark Rutland
Cc: Julien Grall, Daniel Kiper, Juergen Gross, Boris Ostrovsky,
sstabellini-DgEjT+Ai2ygdnm+yROfE0A,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
xen-devel-GuqFBffKawuEi8DpZVb4nw, Ard Biesheuvel,
linux-efi-u79uwXL29TY76Z2rM5mHXA
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.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] arm64: xen: Implement EFI reset_system callback
[not found] ` <20170418134650.GL24360-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>
@ 2017-04-19 19:29 ` Daniel Kiper
[not found] ` <20170419192906.GO16658-fJNZiO034lp9pOct4yEdx/3oZC3j2Omk@public.gmane.org>
0 siblings, 1 reply; 6+ messages in thread
From: Daniel Kiper @ 2017-04-19 19:29 UTC (permalink / raw)
To: Matt Fleming
Cc: Mark Rutland, Julien Grall, Juergen Gross, Boris Ostrovsky,
sstabellini-DgEjT+Ai2ygdnm+yROfE0A,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
xen-devel-GuqFBffKawuEi8DpZVb4nw, Ard Biesheuvel,
linux-efi-u79uwXL29TY76Z2rM5mHXA
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
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] arm64: xen: Implement EFI reset_system callback
[not found] ` <20170419192906.GO16658-fJNZiO034lp9pOct4yEdx/3oZC3j2Omk@public.gmane.org>
@ 2017-04-19 19:37 ` Matt Fleming
2017-04-19 19:43 ` Daniel Kiper
0 siblings, 1 reply; 6+ messages in thread
From: Matt Fleming @ 2017-04-19 19:37 UTC (permalink / raw)
To: Daniel Kiper
Cc: Mark Rutland, Julien Grall, Juergen Gross, Boris Ostrovsky,
sstabellini-DgEjT+Ai2ygdnm+yROfE0A,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
xen-devel-GuqFBffKawuEi8DpZVb4nw, Ard Biesheuvel,
linux-efi-u79uwXL29TY76Z2rM5mHXA
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().
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] arm64: xen: Implement EFI reset_system callback
2017-04-19 19:37 ` Matt Fleming
@ 2017-04-19 19:43 ` Daniel Kiper
0 siblings, 0 replies; 6+ messages in thread
From: Daniel Kiper @ 2017-04-19 19:43 UTC (permalink / raw)
To: Matt Fleming
Cc: Mark Rutland, Juergen Gross, sstabellini, Ard Biesheuvel,
linux-kernel, xen-devel, Julien Grall, linux-efi, Boris Ostrovsky,
linux-arm-kernel
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
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] arm64: xen: Implement EFI reset_system callback
[not found] ` <b9238471-6957-8720-9c98-37a5a32776d2-IBi9RG/b67k@public.gmane.org>
@ 2017-04-20 18:09 ` Julien Grall
0 siblings, 0 replies; 6+ messages in thread
From: Julien Grall @ 2017-04-20 18:09 UTC (permalink / raw)
To: Juergen Gross, Stefano Stabellini
Cc: Daniel Kiper, Boris Ostrovsky, xen-devel-GuqFBffKawuEi8DpZVb4nw,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Mark Rutland, ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A,
linux-efi-u79uwXL29TY76Z2rM5mHXA,
matt-mF/unelCI9GS6iBeEJttW/XRex20P6io
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.grall-5wv7dgnIgG8@public.gmane.org) 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
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-04-20 18:09 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20170405181417.15985-1-julien.grall@arm.com>
[not found] ` <e5b548be-2ec3-9b4f-a456-929d5fb881ab@oracle.com>
[not found] ` <b8c9c6cd-906a-2360-ca9f-d34a45258567@suse.com>
[not found] ` <3f6f5853-cd08-8afc-f71a-b0c1545c7564@arm.com>
[not found] ` <20170406142710.GE4372@olila.local.net-space.pl>
[not found] ` <ed7f64f4-17db-e2a5-f362-b382666cbc36@suse.com>
[not found] ` <20170406152040.GH4372@olila.local.net-space.pl>
[not found] ` <e449f220-8db7-d58c-bdbf-47ccd6dd014b@arm.com>
[not found] ` <e449f220-8db7-d58c-bdbf-47ccd6dd014b-5wv7dgnIgG8@public.gmane.org>
2017-04-06 15:55 ` [PATCH] arm64: xen: Implement EFI reset_system callback Mark Rutland
2017-04-18 13:46 ` Matt Fleming
[not found] ` <20170418134650.GL24360-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>
2017-04-19 19:29 ` Daniel Kiper
[not found] ` <20170419192906.GO16658-fJNZiO034lp9pOct4yEdx/3oZC3j2Omk@public.gmane.org>
2017-04-19 19:37 ` Matt Fleming
2017-04-19 19:43 ` Daniel Kiper
[not found] ` <20170406160653.GJ4372@olila.local.net-space.pl>
[not found] ` <c23a6d11-cde8-7690-9676-537b5f17b967@suse.com>
[not found] ` <20170406164309.GM4372@olila.local.net-space.pl>
[not found] ` <b6cd0d59-9569-2958-9cc7-c971139881f4@suse.com>
[not found] ` <alpine.DEB.2.10.1704181135580.31486@sstabellini-ThinkPad-X260>
[not found] ` <fcc5ac4b-ed82-b5dd-a848-9ac9a3572853@suse.com>
[not found] ` <alpine.DEB.2.10.1704181145420.31486@sstabellini-ThinkPad-X260>
[not found] ` <b9238471-6957-8720-9c98-37a5a32776d2@suse.com>
[not found] ` <b9238471-6957-8720-9c98-37a5a32776d2-IBi9RG/b67k@public.gmane.org>
2017-04-20 18:09 ` Julien Grall
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox