On 17.06.22 08:09, Jan Kiszka via Xenomai wrote:
> On 16.06.22 02:18, Hongzhan Chen via Xenomai wrote:
>> When there is refined tsc clock, notify Xenomai to apply it.
>> Linux may schedule a delayed work to refine tsc clock and update
>> tsc_khz which happen after Xenomai finsih init but tsc_scale and
>> tsc_shift still keep the value depending on origianl tsc clock
>> which is outdated. The difference between two clocks may cause
>> unexpected timing drift.
>>
>> For example:
>>   [ 0.001731] tsc: Detected 2899.886 MHz TSC
>>   [ 5.588387] tsc: Refined TSC clocksource calibration: 2903.999 MHz
>>   cat /sys/module/xenomai/parameters/clockfreq
>>   2899886000
>>   After patching, we like to use 2903.999 MHz.
>>
>> Signed-off-by: Hongzhan Chen <hongzhan.c...@intel.com>
>> ---
>>  arch/x86/kernel/tsc.c | 4 ++++
>>  1 file changed, 4 insertions(+)
>>
>> diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
>> index 835856efd71f..37faaf9a9e6c 100644
>> --- a/arch/x86/kernel/tsc.c
>> +++ b/arch/x86/kernel/tsc.c
>> @@ -1294,6 +1294,7 @@ static void tsc_refine_calibration_work(struct 
>> work_struct *work)
>>      u64 tsc_stop, ref_stop, delta;
>>      unsigned long freq;
>>      int cpu;
>> +    unsigned int ipipe_freq;
>>  
>>      /* Don't bother refining TSC on unstable systems */
>>      if (tsc_unstable)
>> @@ -1345,6 +1346,9 @@ static void tsc_refine_calibration_work(struct 
>> work_struct *work)
>>      /* Inform the TSC deadline clockevent devices about the recalibration */
>>      lapic_update_tsc_freq();
>>  
>> +    ipipe_freq = tsc_khz * 1000;
> 
> You are still using a separate variable.
> 

Seems I missed a reply on that in the list - spam filters or who knows...

__ipipe_report_clockfreq_update() is defined in an unhandy way to
enforce this, I see. Would have been better to define it like this:

#define __ipipe_report_clockfreq_update(freq)                   \
        do {                                                    \
                unsigned int __freq = (freq);                   \
                __ipipe_notify_kevent(IPIPE_KEVT_CLOCKFREQ, &__freq); \
        } while (0)

OTH, we are in maintenance mode, so let's ignore this.

Jan

-- 
Siemens AG, Technology
Competence Center Embedded Linux

Reply via email to