• Thomas Gleixner's avatar
    posix-cpu-timers: Provide array based access to expiry cache · 11b8462f
    Thomas Gleixner authored
    Using struct task_cputime for the expiry cache is a pretty odd choice and
    comes with magic defines to rename the fields for usage in the expiry
    cache.
    
    struct task_cputime is basically a u64 array with 3 members, but it has
    distinct members.
    
    The expiry cache content is different than the content of task_cputime
    because
    
      expiry[PROF]  = task_cputime.stime + task_cputime.utime
      expiry[VIRT]  = task_cputime.utime
      expiry[SCHED] = task_cputime.sum_exec_runtime
    
    So there is no direct mapping between task_cputime and the expiry cache and
    the #define based remapping is just a horrible hack.
    
    Having the expiry cache array based allows further simplification of the
    expiry code.
    
    To avoid an all in one cleanup which is hard to review add a temporary
    anonymous union into struct task_cputime which allows array based access to
    it. That requires to reorder the members. Add a build time sanity check to
    validate that the members are at the same place.
    
    The union and the build time checks will be removed after conversion.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Reviewed-by: default avatarFrederic Weisbecker <frederic@kernel.org>
    Link: https://lkml.kernel.org/r/20190821192921.105793824@linutronix.de
    11b8462f
posix-cpu-timers.c 38.6 KB