Re: [PATCH 01/13] arm/arm64: Add new is_kernel_in_hyp_mode predicate

2015-07-16 Thread Will Deacon
On Wed, Jul 08, 2015 at 05:19:04PM +0100, Marc Zyngier wrote:
 With ARMv8.1 VHE extension, it will be possible to run the kernel
 at EL2 (aka HYP mode). In order for the kernel to easily find out
 where it is running, add a new predicate that returns whether or
 not the kernel is in HYP mode.
 
 For completeness, the 32bit code also get such a predicate (always
 returning false) so that code common to both architecture (timers,
 KVM) can use it transparently.
 
 Signed-off-by: Marc Zyngier marc.zyng...@arm.com
 ---
  arch/arm/include/asm/virt.h   |  5 +
  arch/arm64/include/asm/virt.h | 10 ++
  2 files changed, 15 insertions(+)

[...]

 +static inline bool is_kernel_in_hyp_mode(void)
 +{
 + u64 el;
 +
 + asm(mrs %0, CurrentEL : =r (el));
 + return el == CurrentEL_EL2;

Missing mask?

Will
___
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm


Re: [PATCH 01/13] arm/arm64: Add new is_kernel_in_hyp_mode predicate

2015-07-09 Thread Mark Rutland
Hi,

 +static inline bool is_kernel_in_hyp_mode(void)
 +{
 + u64 el;
 +
 + asm(mrs %0, CurrentEL : =r (el));
 + return el == CurrentEL_EL2;
 +}

If you can include cputype.h, I think this can be:

static inline bool is_kernel_in_hyp_mode(void)
{
return read_cpuid(CurrentEL) == CurrentEL_EL2;
}

Mark.
___
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm


Re: [PATCH 01/13] arm/arm64: Add new is_kernel_in_hyp_mode predicate

2015-07-09 Thread Marc Zyngier
On 09/07/15 10:42, Mark Rutland wrote:
 Hi,
 
 +static inline bool is_kernel_in_hyp_mode(void)
 +{
 +u64 el;
 +
 +asm(mrs %0, CurrentEL : =r (el));
 +return el == CurrentEL_EL2;
 +}
 
 If you can include cputype.h, I think this can be:
 
 static inline bool is_kernel_in_hyp_mode(void)
 {
   return read_cpuid(CurrentEL) == CurrentEL_EL2;
 }

This would indeed work, but CurrentEL is hardly an ID register. I feel
slightly uncomfortable using read_cpuid (which might return a cached
version at some point) for random system registers.

Thoughts?

M.
-- 
Jazz is not dead. It just smells funny...
___
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm


Re: [PATCH 01/13] arm/arm64: Add new is_kernel_in_hyp_mode predicate

2015-07-09 Thread Mark Rutland
On Thu, Jul 09, 2015 at 11:05:34AM +0100, Marc Zyngier wrote:
 On 09/07/15 10:42, Mark Rutland wrote:
  Hi,
  
  +static inline bool is_kernel_in_hyp_mode(void)
  +{
  +  u64 el;
  +
  +  asm(mrs %0, CurrentEL : =r (el));
  +  return el == CurrentEL_EL2;
  +}
  
  If you can include cputype.h, I think this can be:
  
  static inline bool is_kernel_in_hyp_mode(void)
  {
  return read_cpuid(CurrentEL) == CurrentEL_EL2;
  }
 
 This would indeed work, but CurrentEL is hardly an ID register. I feel
 slightly uncomfortable using read_cpuid (which might return a cached
 version at some point) for random system registers.
 
 Thoughts?

I have no strong feelings either way, but I agree with the general
uneasiness w.r.t. what read_cpuid can be expected to do.

Elsewhere we just use inline asm to read non CPUID system registers, so
let's leave your patch as it was.

Thanks,
Mark.
___
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm