linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: marc.zyngier@arm.com (Marc Zyngier)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 15/21] arm64: KVM: Add panic handling
Date: Mon, 16 Nov 2015 16:57:32 +0000	[thread overview]
Message-ID: <564A0AFC.7070204@arm.com> (raw)
In-Reply-To: <CAKv+Gu-4OCaoFp4myi3YNGNeoSmhw7pURqmgW_gb5kSQCGoFQA@mail.gmail.com>

On 16/11/15 15:53, Ard Biesheuvel wrote:
> On 16 November 2015 at 14:11, Marc Zyngier <marc.zyngier@arm.com> wrote:
>> Add the panic handler, together with the small bits of assembly
>> code to call the kernel's panic implementation.
>>
>> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
>> ---
>>  arch/arm64/kvm/hyp/hyp-entry.S | 11 ++++++++++-
>>  arch/arm64/kvm/hyp/hyp.h       |  1 +
>>  arch/arm64/kvm/hyp/switch.c    | 35 +++++++++++++++++++++++++++++++++++
>>  3 files changed, 46 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/arm64/kvm/hyp/hyp-entry.S b/arch/arm64/kvm/hyp/hyp-entry.S
>> index e11a129..7218eed 100644
>> --- a/arch/arm64/kvm/hyp/hyp-entry.S
>> +++ b/arch/arm64/kvm/hyp/hyp-entry.S
>> @@ -141,7 +141,16 @@ el1_irq:
>>         mov     x1, #ARM_EXCEPTION_IRQ
>>         b       __guest_exit
>>
>> -.macro invalid_vector  label, target = __kvm_hyp_panic
>> +ENTRY(__hyp_do_panic)
>> +       mov     lr, #(PSR_F_BIT | PSR_I_BIT | PSR_A_BIT | PSR_D_BIT |\
>> +                     PSR_MODE_EL1h)
>> +       msr     spsr_el2, lr
>> +       ldr     lr, =panic
>> +       msr     elr_el2, lr
>> +       eret
>> +ENDPROC(__hyp_do_panic)
>> +
>> +.macro invalid_vector  label, target = __hyp_panic
>>         .align  2
>>  \label:
>>         b \target
>> diff --git a/arch/arm64/kvm/hyp/hyp.h b/arch/arm64/kvm/hyp/hyp.h
>> index 240fb79..d5d500d 100644
>> --- a/arch/arm64/kvm/hyp/hyp.h
>> +++ b/arch/arm64/kvm/hyp/hyp.h
>> @@ -74,6 +74,7 @@ void __fpsimd_save_state(struct user_fpsimd_state *fp_regs);
>>  void __fpsimd_restore_state(struct user_fpsimd_state *fp_regs);
>>
>>  u64 __guest_enter(struct kvm_vcpu *vcpu, struct kvm_cpu_context *host_ctxt);
>> +void __noreturn __hyp_do_panic(unsigned long, ...);
>>
>>  #endif /* __ARM64_KVM_HYP_H__ */
>>
>> diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
>> index 06d3e20..cdc2a96 100644
>> --- a/arch/arm64/kvm/hyp/switch.c
>> +++ b/arch/arm64/kvm/hyp/switch.c
>> @@ -140,3 +140,38 @@ int __hyp_text __guest_run(struct kvm_vcpu *vcpu)
>>
>>         return exit_code;
>>  }
>> +
>> +static const char *__hyp_panic_string = "HYP panic:\nPS:%08x PC:%p ESR:%p\nFAR:%p HPFAR:%p PAR:%p\nVCPU:%p\n";
>> +
> 
> Re separating the HYP text from the kernel proper: this is exactly the
> thing that is likely to cause trouble when you execute the kernel text
> from HYP.
> 
> __hyp_panic_string is a non-const char pointer containing the absolute
> address of the string in the initializer, as seen from the high kernel
> virtual mapping.
> Better use 'static const char __hyp_panic_string[]' instead.

Definitely.

> (If it currenty works fine, it is only because the compiler optimizes
> the entire variable away, and performs a relative access in the place
> where the variable is referenced.)

That, and the fact that only panic() gets passed a pointer to this
string, so it doesn't really matter where it lives in this case.

But you do have a point here, and I'll address this for the next round.

Thanks,

	M.
-- 
Jazz is not dead. It just smells funny...

  reply	other threads:[~2015-11-16 16:57 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-16 13:11 [PATCH 00/21] arm64: KVM: world switch in C Marc Zyngier
2015-11-16 13:11 ` [PATCH 01/21] arm64: add macros to read/write system registers Marc Zyngier
2015-11-16 13:11 ` [PATCH 02/21] arm64: KVM: Add a HYP-specific header file Marc Zyngier
2015-11-16 13:11 ` [PATCH 03/21] arm64: KVM: Implement vgic-v2 save/restore Marc Zyngier
2015-11-20 15:22   ` Steve Capper
2015-11-20 15:54     ` Marc Zyngier
2015-11-16 13:11 ` [PATCH 04/21] arm64: KVM: Implement vgic-v3 save/restore Marc Zyngier
2015-11-20 16:48   ` Steve Capper
2015-11-20 17:41     ` Marc Zyngier
2015-11-16 13:11 ` [PATCH 05/21] arm64: KVM: Implement timer save/restore Marc Zyngier
2015-11-23 10:47   ` Steve Capper
2015-11-25  8:23     ` Marc Zyngier
2015-11-16 13:11 ` [PATCH 06/21] arm64: KVM: Implement system register save/restore Marc Zyngier
2015-11-16 13:11 ` [PATCH 07/21] arm64: KVM: Implement 32bit " Marc Zyngier
2015-11-16 13:11 ` [PATCH 08/21] arm64: KVM: Implement debug save/restore Marc Zyngier
2015-11-16 13:11 ` [PATCH 09/21] arm64: KVM: Implement guest entry Marc Zyngier
2015-11-16 13:11 ` [PATCH 10/21] arm64: KVM: Add patchable function selector Marc Zyngier
2015-11-16 13:11 ` [PATCH 11/21] arm64: KVM: Implement the core world switch Marc Zyngier
2015-11-24 17:29   ` Alex Bennée
2015-11-24 17:40     ` Marc Zyngier
2015-11-16 13:11 ` [PATCH 12/21] arm64: KVM: Implement fpsimd save/restore Marc Zyngier
2015-11-17 11:13   ` Steve Capper
2015-11-17 11:25     ` Marc Zyngier
2015-11-17 11:49       ` Steve Capper
2015-11-17 11:56         ` Marc Zyngier
2015-11-16 13:11 ` [PATCH 13/21] arm64: KVM: Implement TLB handling Marc Zyngier
2015-11-16 13:11 ` [PATCH 14/21] arm64: KVM: HYP mode entry points Marc Zyngier
2015-11-16 13:11 ` [PATCH 15/21] arm64: KVM: Add panic handling Marc Zyngier
2015-11-16 14:16   ` Mark Rutland
2015-11-16 14:26     ` Marc Zyngier
2015-11-16 14:32       ` Mark Rutland
2015-11-16 14:44         ` Marc Zyngier
2015-11-16 15:53   ` Ard Biesheuvel
2015-11-16 16:57     ` Marc Zyngier [this message]
2015-11-16 13:11 ` [PATCH 16/21] arm64: KVM: Add compatibility aliases Marc Zyngier
2015-11-16 13:11 ` [PATCH 17/21] arm64: KVM: Map the kernel RO section into HYP Marc Zyngier
2015-11-16 14:27   ` Mark Rutland
2015-11-16 14:43     ` Marc Zyngier
2015-11-16 13:11 ` [PATCH 18/21] arm64: KVM: Move away from the assembly version of the world switch Marc Zyngier
2015-11-16 13:11 ` [PATCH 19/21] arm64: KVM: Turn system register numbers to an enum Marc Zyngier
2015-11-16 13:11 ` [PATCH 20/21] arm64: KVM: Cleanup asm-offset.c Marc Zyngier
2015-11-16 13:11 ` [PATCH 21/21] arm64: KVM: Remove weak attributes Marc Zyngier

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=564A0AFC.7070204@arm.com \
    --to=marc.zyngier@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).