• C
    x86: clean up computation of HPET .mult variables · 6fd592da
    Carlos R. Mafra 提交于
    While reading through the HPET code I realized that the
    computation of .mult variables could be done with less
    lines of code, resulting in a 1.6% text size saving
    for hpet.o
    
    So I propose the following patch, which applies against
    today's Linus -git tree.
    
    >From 0c6507e400e9ca5f7f14331e18f8c12baf75a9d3 Mon Sep 17 00:00:00 2001
    From: Carlos R. Mafra <crmafra@ift.unesp.br>
    Date: Mon, 5 May 2008 19:38:53 -0300
    
    The computation of clocksource_hpet.mult
    
           tmp = (u64)hpet_period << HPET_SHIFT;
           do_div(tmp, FSEC_PER_NSEC);
           clocksource_hpet.mult = (u32)tmp;
    
    can be streamlined if we note that it is equal to
    
           clocksource_hpet.mult = div_sc(hpet_period, FSEC_PER_NSEC, HPET_SHIFT);
    
    Furthermore, the computation of hpet_clockevent.mult
    
           uint64_t hpet_freq;
    
           hpet_freq = 1000000000000000ULL;
           do_div(hpet_freq, hpet_period);
           hpet_clockevent.mult = div_sc((unsigned long) hpet_freq,
                                         NSEC_PER_SEC, hpet_clockevent.shift);
    
    can also be streamlined with the observation that hpet_period and hpet_freq are
    inverse to each other (in proper units).
    
    So instead of computing hpet_freq and using (schematically)
    div_sc(hpet_freq, 10^9, shift) we use the trick of calling with the
    arguments in reverse order, div_sc(10^6, hpet_period, shift).
    
    The different power of ten is due to frequency being in Hertz (1/sec)
    and the period being in units of femtosecond. Explicitly,
    
    mult = (hpet_freq * 2^shift)/10^9    (before)
    mult = (10^6 * 2^shift)/hpet_period  (after)
    
    because hpet_freq = 10^15/hpet_period.
    
    The comments in the code are also updated to reflect the changes.
    
    As a result,
    
       text    data     bss     dec     hex filename
       2957     425      92    3474     d92 arch/x86/kernel/hpet.o
       3006     425      92    3523     dc3 arch/x86/kernel/hpet.o.old
    
    a 1.6% reduction in text size.
    Signed-off-by: NCarlos R. Mafra <crmafra@ift.unesp.br>
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
    6fd592da
hpet.c 15.6 KB