@@ -901,6 +901,38 @@ void secondary_cpu_time_init(void)
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
{
@@ -974,39 +1006,6 @@ void __init time_init(void)
974
1006
enable_sched_clock_irqtime ();
975
1007
}
976
1008
977
- /*
978
- * Divide a 128-bit dividend by a 32-bit divisor, leaving a 128 bit
979
- * result.
980
- */
981
- void div128_by_32 (u64 dividend_high , u64 dividend_low ,
982
- unsigned divisor , struct div_result * dr )
983
- {
984
- unsigned long a , b , c , d ;
985
- unsigned long w , x , y , z ;
986
- u64 ra , rb , rc ;
987
-
988
- a = dividend_high >> 32 ;
989
- b = dividend_high & 0xffffffff ;
990
- c = dividend_low >> 32 ;
991
- d = dividend_low & 0xffffffff ;
992
-
993
- w = a / divisor ;
994
- ra = ((u64 )(a - (w * divisor )) << 32 ) + b ;
995
-
996
- rb = ((u64 ) do_div (ra , divisor ) << 32 ) + c ;
997
- x = ra ;
998
-
999
- rc = ((u64 ) do_div (rb , divisor ) << 32 ) + d ;
1000
- y = rb ;
1001
-
1002
- do_div (rc , divisor );
1003
- z = rc ;
1004
-
1005
- dr -> result_high = ((u64 )w << 32 ) + x ;
1006
- dr -> result_low = ((u64 )y << 32 ) + z ;
1007
-
1008
- }
1009
-
1010
1009
/* We don't need to calibrate delay, we use the CPU timebase for that */
1011
1010
void calibrate_delay (void )
1012
1011
{
0 commit comments