From: mark.rutland@arm.com (Mark Rutland)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 6/7] arm64/kexec: Add core kexec support
Date: Wed, 1 Oct 2014 17:16:21 +0100 [thread overview]
Message-ID: <20141001161621.GA28440@leverpostej> (raw)
In-Reply-To: <1412106877.6630.45.camel@smoke>
[...]
> > > +/**
> > > + * kexec_is_dtb - Helper routine to check the device tree header signature.
> > > + */
> > > +
> > > +static bool kexec_is_dtb(const void *dtb)
> > > +{
> > > + __be32 magic;
> > > +
> > > + return get_user(magic, (__be32 *)dtb) ? false :
> > > + (be32_to_cpu(magic) == OF_DT_HEADER);
> > > +}
> > > +
> > > +/**
> > > + * kexec_find_dtb_seg - Helper routine to find the dtb segment.
> > > + */
> > > +
> > > +static const struct kexec_segment *kexec_find_dtb_seg(
> > > + const struct kimage *image)
> > > +{
> > > + int i;
> > > +
> > > + for (i = 0; i < image->nr_segments; i++) {
> > > + if (kexec_is_dtb(image->segment[i].buf))
> > > + return &image->segment[i];
> > > + }
> > > +
> > > + return NULL;
> > > +}
> >
> > So this implementation makes passing dtb mandatory. So it will not work
> > with ACPI?
>
> I have not yet considered ACPI. It will most likely need to have
> something done differently. Secure boot will also need something
> different, and I expect it will use your new kexec_file_load().
A DTB is mandatory for arm64, and is used to pass the command line,
(optionally) initrd, and other parameters, even if it doesn't contain HW
description. In the EFI case the EFI stub will create a trivial DTB if
necessary, and the kernel will detect any ACPI tables via UEFI, so the
DTB should be sufficient for ACPI.
I'm still rather unhappy about the mechanism by which the DTB is passed
by userspace and detected by the kernel, as I'd prefer that the user
explictly stated which segment they wanted to pass to the (Linux)
kernel, but that would require reworking the kexec syscall to allow
per-segment info/flags.
To me it seems that for all the talk of kexec allowing arbitrary kernels
to be booted it's really just a linux->linux reboot bridge. Does anyone
use kexec to boot something that isn't Linux?
> > Where is dtb present? How is it passed to first kernel? Can it still
> > be around in memory and second kernel can access it?
>
> The user space program (kexec-tools, etc.) passes a dtb. That dtb
> could be a copy of the currently one, or a new one specified by
> the user.
>
> > I mean in ACPI world on x86, all the ACPI info is still present and second
> > kernel can access it without it being explicitly to second kernel in
> > memory. Can something similar happen for dtb?
Any ACPI tables should remain, given they'll be reserved in the UEFI
memory map. The second kernel can find them as the first kernel did, via
UEFI tables, which it will fine via the DTB.
For the DTB, reusing the original DTB is a possibility. From what I
recall, Grant seemed to prefer re-packing the existing tree as this
would allow for state destroyed at boot to be corrected for.
Regardless, being able to pass a DTB from userspace is a useful option
(especially for the Linux-as-a-bootloader approach that's been mentioned
a lot). That doesn't work for the secureboot case without a new syscall
as we can't pass a signed DTB (or any other additional objects other
than an initrd) to kexec_file_load, but disallowing the user to pass a
new DTB in that case seems reasonable.
Mark.
next prev parent reply other threads:[~2014-10-01 16:16 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-25 0:23 [PATCH 0/7] arm64 kexec kernel patches V3 Geoff Levand
2014-09-25 0:23 ` [PATCH 4/7] arm64: Add EL2 switch to soft_restart Geoff Levand
2014-09-25 0:23 ` [PATCH 3/7] arm64: Add new hcall HVC_CALL_FUNC Geoff Levand
2014-09-25 0:23 ` [PATCH 2/7] arm64: Convert hcalls to use ISS field Geoff Levand
2014-10-03 10:51 ` Mark Rutland
2014-10-03 21:56 ` Geoff Levand
2014-10-06 10:13 ` Mark Rutland
2014-09-25 0:23 ` [PATCH 1/7] arm64/kvm: Fix assembler compatibility of macros Geoff Levand
2014-10-03 10:26 ` Mark Rutland
2014-10-03 22:27 ` Geoff Levand
2014-10-06 10:10 ` Mark Rutland
2014-09-25 0:23 ` [PATCH 5/7] arm64: Move proc-macros.S to include/asm Geoff Levand
2014-09-25 0:23 ` [PATCH 7/7] arm64/kexec: Enable kexec in the arm64 defconfig Geoff Levand
2014-09-25 0:23 ` [PATCH 6/7] arm64/kexec: Add core kexec support Geoff Levand
2014-09-25 18:28 ` Vivek Goyal
2014-09-25 19:02 ` Geoff Levand
2014-09-25 19:08 ` Vivek Goyal
2014-09-30 18:18 ` Vivek Goyal
2014-09-30 19:54 ` Geoff Levand
2014-10-01 14:56 ` Vivek Goyal
2014-10-03 18:35 ` Geoff Levand
2014-10-07 13:44 ` Vivek Goyal
2014-10-07 18:42 ` Geoff Levand
2014-10-07 18:45 ` Vivek Goyal
2014-10-07 20:12 ` Geoff Levand
2014-10-07 20:22 ` Vivek Goyal
2014-10-09 22:26 ` Geoff Levand
2014-10-23 23:08 ` Geoff Levand
2014-10-08 9:28 ` Mark Rutland
2014-10-07 18:48 ` Vivek Goyal
2014-10-01 16:16 ` Mark Rutland [this message]
2014-10-01 17:36 ` Vivek Goyal
2014-10-01 17:56 ` Mark Rutland
2014-10-01 17:47 ` Vivek Goyal
2014-10-01 18:03 ` Mark Rutland
2014-10-01 18:09 ` Vivek Goyal
2014-10-01 18:19 ` Mark Rutland
2014-10-01 18:31 ` Vivek Goyal
2014-10-01 19:22 ` Vivek Goyal
2014-10-02 10:26 ` Mark Rutland
2014-10-02 13:54 ` Vivek Goyal
2014-10-02 16:53 ` Mark Rutland
2014-09-30 23:59 ` [PATCH V2 " Geoff Levand
2014-09-30 20:29 ` [PATCH 0/7] arm64 kexec kernel patches V3 Vivek Goyal
2014-09-30 21:27 ` Geoff Levand
2014-10-02 19:08 ` Vivek Goyal
2014-10-02 22:59 ` Geoff Levand
2014-10-07 13:43 ` Vivek Goyal
2014-10-07 14:06 ` Mark Rutland
2014-10-01 15:19 ` Vivek Goyal
2014-10-03 21:16 ` Geoff Levand
2014-10-07 13:40 ` Vivek Goyal
2014-10-07 18:29 ` Geoff Levand
2014-10-08 9:42 ` Mark Rutland
2014-10-09 3:21 ` Dave Young
2014-10-09 10:09 ` Mark Rutland
2014-10-09 10:19 ` Ard Biesheuvel
2014-10-10 5:30 ` Dave Young
2014-10-07 15:22 ` Mark Rutland
2014-10-07 18:28 ` Geoff Levand
2014-10-07 18:09 ` Vivek Goyal
2014-10-07 20:07 ` Geoff Levand
2014-10-08 9:52 ` Leif Lindholm
2014-10-08 10:07 ` Mark Rutland
2014-10-09 9:22 ` Will Deacon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20141001161621.GA28440@leverpostej \
--to=mark.rutland@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).