From: Geoff Levand <geoff@infradead.org>
To: Mark Rutland <mark.rutland@arm.com>
Cc: Marc Zyngier <Marc.Zyngier@arm.com>,
Catalin Marinas <Catalin.Marinas@arm.com>,
Will Deacon <Will.Deacon@arm.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"kexec@lists.infradead.org" <kexec@lists.infradead.org>,
"christoffer.dall@linaro.org" <christoffer.dall@linaro.org>
Subject: Re: [PATCH 03/13] arm64: Convert hcalls to use ISS field
Date: Mon, 22 Sep 2014 14:46:06 -0700 [thread overview]
Message-ID: <1411422366.6001.29.camel@smoke> (raw)
In-Reply-To: <20140915175708.GD13789@leverpostej>
Hi Mark,
On Mon, 2014-09-15 at 18:57 +0100, Mark Rutland wrote:
> On Tue, Sep 09, 2014 at 11:49:04PM +0100, Geoff Levand wrote:
> > +/*
> > + * HVC_GET_VECTORS - Return the value of the vbar_el2 register.
> > + */
> > +
> > +#define HVC_GET_VECTORS 1
> > +
> > +/*
> > + * HVC_SET_VECTORS - Set the value of the vbar_el2 register.
> > + *
> > + * @x0: Physical address of the new vector table.
> > + */
> > +
> > +#define HVC_SET_VECTORS 2
> > +
> > +/*
> > + * HVC_KVM_CALL_HYP - Execute kvm_call_hyp routine.
> > + */
> > +
> > +#define HVC_KVM_CALL_HYP 3
>
> If this can be used without KVM (e.g. in the hyp stub) I'd just call
> this HVC_CALL_HYP, or the name will be a little misleading.
Yes, it is more or less generic, so we could have it as HVC_CALL_HYP.
> > #ifndef __ASSEMBLY__
> >
> > /*
> > diff --git a/arch/arm64/kernel/hyp-stub.S b/arch/arm64/kernel/hyp-stub.S
> > index 2d960a9..9ab5f70 100644
> > --- a/arch/arm64/kernel/hyp-stub.S
> > +++ b/arch/arm64/kernel/hyp-stub.S
> > @@ -54,16 +54,29 @@ ENDPROC(__hyp_stub_vectors)
> >
> > #define ESR_EL2_EC_SHIFT 26
> > #define ESR_EL2_EC_HVC64 0x16
> > +#define ESR_EL2_ISS 0xffff
>
> The last patch tried to add an identical macro to a header file. Can we
> use that header please?
As I mentioned in my reply to your comment on that patch, I'll prepare a
separate header/macro cleanup patch.
> >
> > el1_sync:
> > - mrs x1, esr_el2
> > - lsr x1, x1, #ESR_EL2_EC_SHIFT
> > - cmp x1, #ESR_EL2_EC_HVC64
> > - b.ne 2f // Not an HVC trap
> > - cbz x0, 1f
> > - msr vbar_el2, x0 // Set vbar_el2
> > + mrs x10, esr_el2
>
> Any reason for using x10?
>
> If we want to preserve the lowest register numbers, start with the
> highest caller-saved register numbers (i.e. x18). At least for me it
> makes the code far easier to read; it doesn't make it look like x10 is
> special.
OK, sure.
> > + lsr x9, x10, #ESR_EL2_EC_SHIFT // x9=EC
> > + and x10, x10, #ESR_EL2_ISS // x10=ISS
>
> The mnemonics make these comments redundant.
>
> > + cmp x9, #ESR_EL2_EC_HVC64
> > + b.ne 2f // Not a host HVC trap
>
> Now that we have the nice mnemonic, we could get rid of the comment
> here. I'd drop the 'host' from the comment; it wasn't there orginally
> and it's somewhat meaningless for the stub (KVM isn't up yet, and the
> only the native OS can make a HVC).
Sure, I copied this from the KVM vector so they would be more similar.
>
> > + mrs x9, vttbr_el2
> > + cbnz x9, 2f // Not a host HVC trap
>
> I don't understand this. When is vttbr_el2 non-zero, and why do we want
> to silently return from a HVC in that case? That didn't seem to be the
> case in the original code.
No it is not in the original. I copied this from the KVM vector so they
would be more similar.
> > +
> > + cmp x10, #HVC_GET_VECTORS
> > + b.ne 1f
> > + mrs x0, vbar_el2
> > b 2f
> > -1: mrs x0, vbar_el2 // Return vbar_el2
> > +
> > +1: cmp x10, #HVC_SET_VECTORS
> > + b.ne 1f
> > + msr vbar_el2, x0
> > +
> > +1:
>
> It feels like we should explode if we ever reach here from the host --
> if we've made an unsupported HVC wereally want to know that we've done
> so.
Sure, I can put something in, but I would think that whoever tries a bad
hcall is going to find out it doesn't work regardless.
Do you have a good idea of how we can do this 'explode'?
-Geoff
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
WARNING: multiple messages have this Message-ID (diff)
From: geoff@infradead.org (Geoff Levand)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 03/13] arm64: Convert hcalls to use ISS field
Date: Mon, 22 Sep 2014 14:46:06 -0700 [thread overview]
Message-ID: <1411422366.6001.29.camel@smoke> (raw)
In-Reply-To: <20140915175708.GD13789@leverpostej>
Hi Mark,
On Mon, 2014-09-15 at 18:57 +0100, Mark Rutland wrote:
> On Tue, Sep 09, 2014 at 11:49:04PM +0100, Geoff Levand wrote:
> > +/*
> > + * HVC_GET_VECTORS - Return the value of the vbar_el2 register.
> > + */
> > +
> > +#define HVC_GET_VECTORS 1
> > +
> > +/*
> > + * HVC_SET_VECTORS - Set the value of the vbar_el2 register.
> > + *
> > + * @x0: Physical address of the new vector table.
> > + */
> > +
> > +#define HVC_SET_VECTORS 2
> > +
> > +/*
> > + * HVC_KVM_CALL_HYP - Execute kvm_call_hyp routine.
> > + */
> > +
> > +#define HVC_KVM_CALL_HYP 3
>
> If this can be used without KVM (e.g. in the hyp stub) I'd just call
> this HVC_CALL_HYP, or the name will be a little misleading.
Yes, it is more or less generic, so we could have it as HVC_CALL_HYP.
> > #ifndef __ASSEMBLY__
> >
> > /*
> > diff --git a/arch/arm64/kernel/hyp-stub.S b/arch/arm64/kernel/hyp-stub.S
> > index 2d960a9..9ab5f70 100644
> > --- a/arch/arm64/kernel/hyp-stub.S
> > +++ b/arch/arm64/kernel/hyp-stub.S
> > @@ -54,16 +54,29 @@ ENDPROC(__hyp_stub_vectors)
> >
> > #define ESR_EL2_EC_SHIFT 26
> > #define ESR_EL2_EC_HVC64 0x16
> > +#define ESR_EL2_ISS 0xffff
>
> The last patch tried to add an identical macro to a header file. Can we
> use that header please?
As I mentioned in my reply to your comment on that patch, I'll prepare a
separate header/macro cleanup patch.
> >
> > el1_sync:
> > - mrs x1, esr_el2
> > - lsr x1, x1, #ESR_EL2_EC_SHIFT
> > - cmp x1, #ESR_EL2_EC_HVC64
> > - b.ne 2f // Not an HVC trap
> > - cbz x0, 1f
> > - msr vbar_el2, x0 // Set vbar_el2
> > + mrs x10, esr_el2
>
> Any reason for using x10?
>
> If we want to preserve the lowest register numbers, start with the
> highest caller-saved register numbers (i.e. x18). At least for me it
> makes the code far easier to read; it doesn't make it look like x10 is
> special.
OK, sure.
> > + lsr x9, x10, #ESR_EL2_EC_SHIFT // x9=EC
> > + and x10, x10, #ESR_EL2_ISS // x10=ISS
>
> The mnemonics make these comments redundant.
>
> > + cmp x9, #ESR_EL2_EC_HVC64
> > + b.ne 2f // Not a host HVC trap
>
> Now that we have the nice mnemonic, we could get rid of the comment
> here. I'd drop the 'host' from the comment; it wasn't there orginally
> and it's somewhat meaningless for the stub (KVM isn't up yet, and the
> only the native OS can make a HVC).
Sure, I copied this from the KVM vector so they would be more similar.
>
> > + mrs x9, vttbr_el2
> > + cbnz x9, 2f // Not a host HVC trap
>
> I don't understand this. When is vttbr_el2 non-zero, and why do we want
> to silently return from a HVC in that case? That didn't seem to be the
> case in the original code.
No it is not in the original. I copied this from the KVM vector so they
would be more similar.
> > +
> > + cmp x10, #HVC_GET_VECTORS
> > + b.ne 1f
> > + mrs x0, vbar_el2
> > b 2f
> > -1: mrs x0, vbar_el2 // Return vbar_el2
> > +
> > +1: cmp x10, #HVC_SET_VECTORS
> > + b.ne 1f
> > + msr vbar_el2, x0
> > +
> > +1:
>
> It feels like we should explode if we ever reach here from the host --
> if we've made an unsupported HVC wereally want to know that we've done
> so.
Sure, I can put something in, but I would think that whoever tries a bad
hcall is going to find out it doesn't work regardless.
Do you have a good idea of how we can do this 'explode'?
-Geoff
next prev parent reply other threads:[~2014-09-22 21:46 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-09 22:51 [PATCH 00/13] arm64 kexec kernel patches V2 Geoff Levand
2014-09-09 22:51 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 04/13] arm64: Add new hcall HVC_CALL_FUNC Geoff Levand
2014-09-09 22:49 ` Geoff Levand
2014-09-10 17:07 ` Will Deacon
2014-09-10 17:07 ` Will Deacon
2014-09-10 17:23 ` Geoff Levand
2014-09-10 17:23 ` Geoff Levand
2014-09-10 17:35 ` Will Deacon
2014-09-10 17:35 ` Will Deacon
2014-09-10 18:11 ` [PATCH V2 " Geoff Levand
2014-09-10 18:11 ` Geoff Levand
2014-09-15 18:11 ` [PATCH " Mark Rutland
2014-09-15 18:11 ` Mark Rutland
2014-09-25 0:24 ` Geoff Levand
2014-09-25 0:24 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 02/13] arm64/kvm: Fix assembler compatibility of macros Geoff Levand
2014-09-09 22:49 ` Geoff Levand
2014-09-10 8:40 ` Ard Biesheuvel
2014-09-10 8:40 ` Ard Biesheuvel
2014-09-10 16:35 ` Geoff Levand
2014-09-10 16:35 ` Geoff Levand
2014-09-10 17:09 ` Ard Biesheuvel
2014-09-10 17:09 ` Ard Biesheuvel
2014-09-15 16:14 ` Mark Rutland
2014-09-15 16:14 ` Mark Rutland
2014-09-10 18:04 ` [PATCH V2 " Geoff Levand
2014-09-10 18:04 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 05/13] arm64: Add EL2 switch to soft_restart Geoff Levand
2014-09-09 22:49 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 07/13] arm64: Add new routine local_disable Geoff Levand
2014-09-09 22:49 ` Geoff Levand
2014-09-15 18:56 ` Mark Rutland
2014-09-15 18:56 ` Mark Rutland
2014-09-25 0:24 ` Geoff Levand
2014-09-25 0:24 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 03/13] arm64: Convert hcalls to use ISS field Geoff Levand
2014-09-09 22:49 ` Geoff Levand
2014-09-11 16:14 ` Arun Chandran
2014-09-11 16:14 ` Arun Chandran
2014-09-15 17:57 ` Mark Rutland
2014-09-15 17:57 ` Mark Rutland
2014-09-22 21:46 ` Geoff Levand [this message]
2014-09-22 21:46 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 01/13] arm64: Add ESR_EL2_EC macros to hyp-stub Geoff Levand
2014-09-09 22:49 ` Geoff Levand
2014-09-15 16:10 ` Mark Rutland
2014-09-15 16:10 ` Mark Rutland
2014-09-22 21:45 ` Geoff Levand
2014-09-22 21:45 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 06/13] arm64: Add new routine read_cpu_properties Geoff Levand
2014-09-09 22:49 ` Geoff Levand
2014-09-15 18:42 ` Mark Rutland
2014-09-15 18:42 ` Mark Rutland
2014-09-25 0:23 ` Geoff Levand
2014-09-25 0:23 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 08/13] arm64: Use cpu_ops for smp_stop Geoff Levand
2014-09-09 22:49 ` Geoff Levand
2014-09-15 19:06 ` Mark Rutland
2014-09-15 19:06 ` Mark Rutland
2014-09-25 0:24 ` Geoff Levand
2014-09-25 0:24 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 13/13] arm64/kexec: Add kexec_ignore_compat_check param Geoff Levand
2014-09-09 22:49 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 09/13] arm64/kexec: Kexec expects cpu_die Geoff Levand
2014-09-09 22:49 ` Geoff Levand
2014-09-15 19:10 ` Mark Rutland
2014-09-15 19:10 ` Mark Rutland
2014-09-09 22:49 ` [PATCH 12/13] arm64/kexec: Enable kexec in the arm64 defconfig Geoff Levand
2014-09-09 22:49 ` Geoff Levand
2014-09-09 22:49 ` [PATCH 10/13] arm64/kexec: Revert change to machine_shutdown() Geoff Levand
2014-09-09 22:49 ` Geoff Levand
2014-09-15 19:20 ` Mark Rutland
2014-09-15 19:20 ` Mark Rutland
2014-09-09 22:49 ` [PATCH 11/13] arm64/kexec: Add core kexec support Geoff Levand
2014-09-09 22:49 ` Geoff Levand
2014-09-18 1:13 ` Mark Rutland
2014-09-18 1:13 ` Mark Rutland
2014-09-25 0:25 ` Geoff Levand
2014-09-25 0:25 ` Geoff Levand
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=1411422366.6001.29.camel@smoke \
--to=geoff@infradead.org \
--cc=Catalin.Marinas@arm.com \
--cc=Marc.Zyngier@arm.com \
--cc=Will.Deacon@arm.com \
--cc=christoffer.dall@linaro.org \
--cc=kexec@lists.infradead.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=mark.rutland@arm.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.