Christophe Leroy's on August 28, 2019 4:51 pm:
> 
> 
> Le 27/08/2019 à 15:55, Nicholas Piggin a écrit :
>> -#include <asm/reg.h>
>> +#include <asm/mmu.h>
>> +#include <asm/ptrace.h>
>> +
>> +static inline void kuap_check_amr(void)
>> +{
>> +#ifdef CONFIG_PPC_KUAP_DEBUG
>> +    if (mmu_has_feature(MMU_FTR_RADIX_KUAP))
> 
> Better:
> 
>       if (IS_ENABLED(CONFIG_PPC_KUAP_DEBUG) && 
> mmu_has_feature(MMU_FTR_RADIX_KUAP))

That is better.

>> +            WARN_ON_ONCE(mfspr(SPRN_AMR) != AMR_KUAP_BLOCKED);
>> +#endif
>> +}
>>   
>>   /*
>>    * We support individually allowing read or write, but we don't support 
>> nesting
>> diff --git a/arch/powerpc/include/asm/cputime.h 
>> b/arch/powerpc/include/asm/cputime.h
>> index 2431b4ada2fa..f3aa9db1a3cc 100644
>> --- a/arch/powerpc/include/asm/cputime.h
>> +++ b/arch/powerpc/include/asm/cputime.h
>> @@ -60,6 +60,28 @@ static inline void arch_vtime_task_switch(struct 
>> task_struct *prev)
>>   }
>>   #endif
>>   
>> +static inline void account_cpu_user_entry(void)
>> +{
>> +    unsigned long tb = mftb();
>> +
>> +    get_accounting(current)->utime += (tb - 
>> get_accounting(current)->starttime_user);
>> +    get_accounting(current)->starttime = tb;
>> +}
> 
> Can you check the generated assembly ? I remember having bad result with 
> get_accouting() being used several times in a arch_vtime_task_switch() 
> before commit         60f1d2893ee6 ("powerpc/time: inline 
> arch_vtime_task_switch()")

It's fine on 64s but it's accounting is a constant offset from r13 so
simple load/store can be done.

> Regardless, I think it would look better as:
> 
> static inline void account_cpu_user_entry(void)
> {
>       unsigned long tb = mftb();
>       struct cpu_accounting_data *acct = get_accounting(current);
> 
>       acct->utime += (tb - acct->starttime_user);
>       acct->starttime = tb;
> }

Yeah that's nicer.

> 
>> +static inline void account_cpu_user_exit(void)
>> +{
>> +    unsigned long tb = mftb();
>> +
>> +    get_accounting(current)->stime += (tb - 
>> get_accounting(current)->starttime);
>> +    get_accounting(current)->starttime_user = tb;
>> +}
> 
> Same here.

Will do.

Thanks,
Nick

Reply via email to