Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

powerpc/time: Define div128_by_32() static and __init

div128_by_32() used to be called from outside time.c in the old days
but since v2.6.15 it hasn't been used outside time.c

$ git grep div128_by_32 v2.6.14
v2.6.14:arch/ppc64/kernel/iSeries_setup.c: div128_by_32(1024 * 1024, 0, tb_ticks_per_sec, &divres);
v2.6.14:arch/ppc64/kernel/pmac_time.c: div128_by_32( 1024*1024, 0, tb_ticks_per_sec, &divres );
v2.6.14:arch/ppc64/kernel/time.c: div128_by_32( XSEC_PER_SEC, 0, tb_ticks_per_sec, &divres );
v2.6.14:arch/ppc64/kernel/time.c: div128_by_32(1024*1024, 0, tb_ticks_per_sec, &divres);
v2.6.14:arch/ppc64/kernel/time.c: div128_by_32(1000000000, 0, tb_ticks_per_sec, &res);
v2.6.14:arch/ppc64/kernel/time.c: div128_by_32( 1024*1024, 0, new_tb_ticks_per_sec, &divres );
v2.6.14:arch/ppc64/kernel/time.c:void div128_by_32( unsigned long dividend_high, unsigned long dividend_low,
v2.6.14:include/asm-ppc64/time.h:void div128_by_32( unsigned long dividend_high, unsigned long dividend_low,

$ git grep div128_by_32 v2.6.15
v2.6.15:arch/powerpc/kernel/time.c: div128_by_32( XSEC_PER_SEC, 0, tb_ticks_per_sec, &divres );
v2.6.15:arch/powerpc/kernel/time.c: div128_by_32(1024*1024, 0, tb_ticks_per_sec, &res);
v2.6.15:arch/powerpc/kernel/time.c: div128_by_32(1000000000, 0, tb_ticks_per_sec, &res);
v2.6.15:arch/powerpc/kernel/time.c: div128_by_32(1024*1024, 0, new_tb_ticks_per_sec, &divres);
v2.6.15:arch/powerpc/kernel/time.c:void div128_by_32(u64 dividend_high, u64 dividend_low,
v2.6.15:include/asm-powerpc/time.h:extern void div128_by_32(u64 dividend_high, u64 dividend_low,

Move it above its only caller which is time_init() and define it
static and __init.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Link: https://patch.msgid.link/50810349bf1eee378fbeab72a36e4b6553a60c3d.1738749246.git.christophe.leroy@csgroup.eu

authored by

Christophe Leroy and committed by
Madhavan Srinivasan
f17bcb97 67d93915

+32 -36
-3
arch/powerpc/include/asm/time.h
··· 89 89 #define mulhdu(x, y) mul_u64_u64_shr(x, y, 64) 90 90 #endif 91 91 92 - extern void div128_by_32(u64 dividend_high, u64 dividend_low, 93 - unsigned divisor, struct div_result *dr); 94 - 95 92 extern void secondary_cpu_time_init(void); 96 93 extern void __init time_init(void); 97 94
+32 -33
arch/powerpc/kernel/time.c
··· 901 901 register_decrementer_clockevent(smp_processor_id()); 902 902 } 903 903 904 + /* 905 + * Divide a 128-bit dividend by a 32-bit divisor, leaving a 128 bit 906 + * result. 907 + */ 908 + static __init void div128_by_32(u64 dividend_high, u64 dividend_low, 909 + unsigned int divisor, struct div_result *dr) 910 + { 911 + unsigned long a, b, c, d; 912 + unsigned long w, x, y, z; 913 + u64 ra, rb, rc; 914 + 915 + a = dividend_high >> 32; 916 + b = dividend_high & 0xffffffff; 917 + c = dividend_low >> 32; 918 + d = dividend_low & 0xffffffff; 919 + 920 + w = a / divisor; 921 + ra = ((u64)(a - (w * divisor)) << 32) + b; 922 + 923 + rb = ((u64)do_div(ra, divisor) << 32) + c; 924 + x = ra; 925 + 926 + rc = ((u64)do_div(rb, divisor) << 32) + d; 927 + y = rb; 928 + 929 + do_div(rc, divisor); 930 + z = rc; 931 + 932 + dr->result_high = ((u64)w << 32) + x; 933 + dr->result_low = ((u64)y << 32) + z; 934 + } 935 + 904 936 /* This function is only called on the boot processor */ 905 937 void __init time_init(void) 906 938 { ··· 1004 972 1005 973 of_clk_init(NULL); 1006 974 enable_sched_clock_irqtime(); 1007 - } 1008 - 1009 - /* 1010 - * Divide a 128-bit dividend by a 32-bit divisor, leaving a 128 bit 1011 - * result. 1012 - */ 1013 - void div128_by_32(u64 dividend_high, u64 dividend_low, 1014 - unsigned divisor, struct div_result *dr) 1015 - { 1016 - unsigned long a, b, c, d; 1017 - unsigned long w, x, y, z; 1018 - u64 ra, rb, rc; 1019 - 1020 - a = dividend_high >> 32; 1021 - b = dividend_high & 0xffffffff; 1022 - c = dividend_low >> 32; 1023 - d = dividend_low & 0xffffffff; 1024 - 1025 - w = a / divisor; 1026 - ra = ((u64)(a - (w * divisor)) << 32) + b; 1027 - 1028 - rb = ((u64) do_div(ra, divisor) << 32) + c; 1029 - x = ra; 1030 - 1031 - rc = ((u64) do_div(rb, divisor) << 32) + d; 1032 - y = rb; 1033 - 1034 - do_div(rc, divisor); 1035 - z = rc; 1036 - 1037 - dr->result_high = ((u64)w << 32) + x; 1038 - dr->result_low = ((u64)y << 32) + z; 1039 - 1040 975 } 1041 976 1042 977 /* We don't need to calibrate delay, we use the CPU timebase for that */