462,11 → 462,13 |
|
void ll_restore_adv() |
{ |
SYS_FLAGS f; |
|
/* Disable APIC */ |
if (use_apic) { |
unsigned int msr_low_orig, tmp; |
|
cli(); |
f = ll_fsave(); |
|
disable_APIC_timer(); |
|
473,6 → 475,27 |
rdmsr(APIC_BASE_MSR, msr_low_orig, tmp); |
wrmsr(APIC_BASE_MSR, msr_low_orig&~(1<<11), 0); |
|
sti(); |
ll_frestore(f); |
} |
} |
|
void ll_scale_advtimer(unsigned int old_f, unsigned int new_f) |
{ |
unsigned long long dtsc; |
unsigned long temp; |
SYS_FLAGS f; |
|
f = ll_fsave(); |
|
mul32div32to32(clk_per_msec,new_f,old_f,temp); /* TODO */ |
clk_per_msec = temp; |
dtsc = clk_per_msec * 500; |
clk_opt_0 = (unsigned int)(dtsc); |
clk_opt_1 = (unsigned int)((unsigned long long)(dtsc << 1)); |
clk_opt_2 = (unsigned int)((unsigned long long)(dtsc << 33) / 1000000000L); |
clk_opt_3 = (unsigned int)((unsigned long long)(dtsc << 32) / 1000000000L); |
clk_opt_4 = (unsigned int)((unsigned long long)(dtsc << 31) / 1000000000L); |
clk_opt_5 = (unsigned int)((unsigned long long)(dtsc << 30) / 1000000000L); |
|
ll_frestore(f); |
} |