Message ID | 20200903091712.46456-11-dbrazdil@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Independent per-CPU data section for nVHE | expand |
On Thu, Sep 03, 2020 at 11:17:12AM +0200, 'David Brazdil' via kernel-team wrote: > With all nVHE per-CPU variables being part of the hyp per-CPU region, > mapping them individual is not necessary any longer. They are mapped to hyp > as part of the overall per-CPU region. > > Signed-off-by: David Brazdil <dbrazdil@google.com> Acked-by: Andrew Scull<ascull@google.com> > --- > arch/arm64/include/asm/kvm_mmu.h | 25 +++++++------------------ > arch/arm64/kvm/arm.c | 17 +---------------- > 2 files changed, 8 insertions(+), 34 deletions(-) > > diff --git a/arch/arm64/include/asm/kvm_mmu.h b/arch/arm64/include/asm/kvm_mmu.h > index 9db93da35606..bbe9df76ff42 100644 > --- a/arch/arm64/include/asm/kvm_mmu.h > +++ b/arch/arm64/include/asm/kvm_mmu.h > @@ -531,28 +531,17 @@ static inline int kvm_map_vectors(void) > DECLARE_PER_CPU_READ_MOSTLY(u64, arm64_ssbd_callback_required); > DECLARE_KVM_NVHE_PER_CPU(u64, arm64_ssbd_callback_required); > > -static inline int hyp_init_aux_data(void) > +static inline void hyp_init_aux_data(void) > { > - int cpu, err; > + int cpu; > > - for_each_possible_cpu(cpu) { > - u64 *ptr; > - > - ptr = per_cpu_ptr_nvhe(arm64_ssbd_callback_required, cpu); > - err = create_hyp_mappings(ptr, ptr + 1, PAGE_HYP); > - if (err) > - return err; > - > - /* Copy value from kernel to hyp. */ > - *ptr = per_cpu(arm64_ssbd_callback_required, cpu); > - } > - return 0; > + /* Copy arm64_ssbd_callback_required values from kernel to hyp. */ > + for_each_possible_cpu(cpu) > + *(per_cpu_ptr_nvhe(arm64_ssbd_callback_required, cpu)) = > + per_cpu(arm64_ssbd_callback_required, cpu); Careful with breaking allocations across lines, that seems to be taboo in this subsystem. > } > #else > -static inline int hyp_init_aux_data(void) > -{ > - return 0; > -} > +static inline void hyp_init_aux_data(void) {} > #endif > > #define kvm_phys_to_vttbr(addr) phys_to_ttbr(addr) > diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c > index df7d133056ce..dfe1baa5bbb7 100644 > --- a/arch/arm64/kvm/arm.c > +++ b/arch/arm64/kvm/arm.c > @@ -1631,22 +1631,7 @@ static int init_hyp_mode(void) > } > } > > - for_each_possible_cpu(cpu) { > - kvm_host_data_t *cpu_data; > - > - cpu_data = per_cpu_ptr_hyp(kvm_host_data, cpu); > - err = create_hyp_mappings(cpu_data, cpu_data + 1, PAGE_HYP); > - > - if (err) { > - kvm_err("Cannot map host CPU state: %d\n", err); > - goto out_err; > - } > - } > - > - err = hyp_init_aux_data(); > - if (err) > - kvm_err("Cannot map host auxiliary data: %d\n", err); > - > + hyp_init_aux_data(); > return 0; > > out_err: > -- > 2.28.0.402.g5ffc5be6b7-goog > > -- > To unsubscribe from this group and stop receiving emails from it, send an email to kernel-team+unsubscribe@android.com. >
> > + for_each_possible_cpu(cpu) > > + *(per_cpu_ptr_nvhe(arm64_ssbd_callback_required, cpu)) = > > + per_cpu(arm64_ssbd_callback_required, cpu); > > Careful with breaking allocations across lines, that seems to be taboo > in this subsystem. Happy to put the `ptr` var back. Sorry *embarrassed emoji*. Thanks for reviewing, David
diff --git a/arch/arm64/include/asm/kvm_mmu.h b/arch/arm64/include/asm/kvm_mmu.h index 9db93da35606..bbe9df76ff42 100644 --- a/arch/arm64/include/asm/kvm_mmu.h +++ b/arch/arm64/include/asm/kvm_mmu.h @@ -531,28 +531,17 @@ static inline int kvm_map_vectors(void) DECLARE_PER_CPU_READ_MOSTLY(u64, arm64_ssbd_callback_required); DECLARE_KVM_NVHE_PER_CPU(u64, arm64_ssbd_callback_required); -static inline int hyp_init_aux_data(void) +static inline void hyp_init_aux_data(void) { - int cpu, err; + int cpu; - for_each_possible_cpu(cpu) { - u64 *ptr; - - ptr = per_cpu_ptr_nvhe(arm64_ssbd_callback_required, cpu); - err = create_hyp_mappings(ptr, ptr + 1, PAGE_HYP); - if (err) - return err; - - /* Copy value from kernel to hyp. */ - *ptr = per_cpu(arm64_ssbd_callback_required, cpu); - } - return 0; + /* Copy arm64_ssbd_callback_required values from kernel to hyp. */ + for_each_possible_cpu(cpu) + *(per_cpu_ptr_nvhe(arm64_ssbd_callback_required, cpu)) = + per_cpu(arm64_ssbd_callback_required, cpu); } #else -static inline int hyp_init_aux_data(void) -{ - return 0; -} +static inline void hyp_init_aux_data(void) {} #endif #define kvm_phys_to_vttbr(addr) phys_to_ttbr(addr) diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index df7d133056ce..dfe1baa5bbb7 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -1631,22 +1631,7 @@ static int init_hyp_mode(void) } } - for_each_possible_cpu(cpu) { - kvm_host_data_t *cpu_data; - - cpu_data = per_cpu_ptr_hyp(kvm_host_data, cpu); - err = create_hyp_mappings(cpu_data, cpu_data + 1, PAGE_HYP); - - if (err) { - kvm_err("Cannot map host CPU state: %d\n", err); - goto out_err; - } - } - - err = hyp_init_aux_data(); - if (err) - kvm_err("Cannot map host auxiliary data: %d\n", err); - + hyp_init_aux_data(); return 0; out_err:
With all nVHE per-CPU variables being part of the hyp per-CPU region, mapping them individual is not necessary any longer. They are mapped to hyp as part of the overall per-CPU region. Signed-off-by: David Brazdil <dbrazdil@google.com> --- arch/arm64/include/asm/kvm_mmu.h | 25 +++++++------------------ arch/arm64/kvm/arm.c | 17 +---------------- 2 files changed, 8 insertions(+), 34 deletions(-)