• Nathan Lynch's avatar
    [POWERPC] Fix gettimeofday inaccuracies · 5db9fa95
    Nathan Lynch authored
    There are two problems in the powerpc gettimeofday code which can
    cause incorrect results to be returned.
    
    The first is that there is a race between do_gettimeofday and the
    timer interrupt:
    
    1. do_gettimeofday does get_tb()
    
    2. decrementer exception on boot cpu which runs timer_recalc_offset,
       which also samples the timebase and updates the do_gtod structure
       with a greater timebase value.
    
    3. do_gettimeofday calls __do_gettimeofday, which leads to the
       negative result from tb_val - temp_varp->tb_orig_stamp.
    
    The second is caused by taking the boot cpu offline, which can cause
    the value of tb_last_jiffy to be increased past the currently
    available timebase, causing the same underflow as above.
    
    [paulus@samba.org - define and use data_barrier() instead of mb().]
    Signed-off-by: default avatarNathan Lynch <ntl@pobox.com>
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    5db9fa95
system.h 12.3 KB