Drop support for pre 2.2 Linux kernels
This commit is contained in:
parent
ec7d302a6c
commit
da1097095c
1 changed files with 42 additions and 86 deletions
128
sys_linux.c
128
sys_linux.c
|
@ -881,6 +881,19 @@ guess_hz_and_shift_hz(int tick, int *hz, int *shift_hz)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ================================================== */
|
||||||
|
|
||||||
|
static int
|
||||||
|
kernelvercmp(int major1, int minor1, int patch1,
|
||||||
|
int major2, int minor2, int patch2)
|
||||||
|
{
|
||||||
|
if (major1 != major2)
|
||||||
|
return major1 - major2;
|
||||||
|
if (minor1 != minor2)
|
||||||
|
return minor1 - minor2;
|
||||||
|
return patch1 - patch2;
|
||||||
|
}
|
||||||
|
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
/* Compute the scaling to use on any frequency we set, according to
|
/* Compute the scaling to use on any frequency we set, according to
|
||||||
the vintage of the Linux kernel being used. */
|
the vintage of the Linux kernel being used. */
|
||||||
|
@ -972,91 +985,35 @@ get_version_specific_details(void)
|
||||||
version_minor = minor;
|
version_minor = minor;
|
||||||
version_patchlevel = patch;
|
version_patchlevel = patch;
|
||||||
|
|
||||||
have_nanopll = 0;
|
if (kernelvercmp(major, minor, patch, 2, 2, 0) < 0) {
|
||||||
|
LOG_FATAL(LOGF_SysLinux, "Kernel version not supported, sorry.");
|
||||||
switch (major) {
|
}
|
||||||
case 1:
|
|
||||||
/* Does Linux v1.x even support HZ!=100? */
|
if (kernelvercmp(major, minor, patch, 2, 6, 27) < 0) {
|
||||||
switch (minor) {
|
freq_scale = (hz == 100) ? (128.0 / 128.125) : basic_freq_scale;
|
||||||
case 2:
|
} else {
|
||||||
if (patch == 13) {
|
/* These don't seem to need scaling */
|
||||||
freq_scale = (hz==100) ? (128.0 / 100.0) : basic_freq_scale ; /* I _think_! */
|
freq_scale = 1.0;
|
||||||
have_readonly_adjtime = 1;
|
|
||||||
} else {
|
if (kernelvercmp(major, minor, patch, 2, 6, 33) < 0) {
|
||||||
LOG_FATAL(LOGF_SysLinux, "Kernel version not supported yet, sorry.");
|
/* Tickless kernels before 2.6.33 accumulated ticks only in
|
||||||
}
|
half-second intervals */
|
||||||
break;
|
tick_update_hz = 2;
|
||||||
case 3:
|
}
|
||||||
/* I guess the change from the 1.2.x scaling to the 2.0.x
|
}
|
||||||
scaling must have happened during 1.3 development. I
|
|
||||||
haven't a clue where though, until someone looks it
|
/* ADJ_OFFSET_SS_READ support */
|
||||||
up. */
|
if (kernelvercmp(major, minor, patch, 2, 6, 27) < 0) {
|
||||||
LOG_FATAL(LOGF_SysLinux, "Kernel version not supported yet, sorry.");
|
have_readonly_adjtime = 0;
|
||||||
break;
|
} else {
|
||||||
default:
|
have_readonly_adjtime = 2;
|
||||||
LOG_FATAL(LOGF_SysLinux, "Kernel version not supported yet, sorry.");
|
}
|
||||||
break;
|
|
||||||
}
|
/* ADJ_NANO support */
|
||||||
break;
|
if (kernelvercmp(major, minor, patch, 2, 6, 27) < 0) {
|
||||||
case 2:
|
have_nanopll = 0;
|
||||||
switch (minor) {
|
} else {
|
||||||
case 0:
|
have_nanopll = 1;
|
||||||
if (patch < 32) {
|
|
||||||
freq_scale = (hz==100) ? (128.0 / 125.0) : basic_freq_scale;
|
|
||||||
have_readonly_adjtime = 1;
|
|
||||||
} else if (patch >= 32) {
|
|
||||||
freq_scale = (hz==100) ? (128.0 / 128.125) : basic_freq_scale;
|
|
||||||
|
|
||||||
/* The functionality in kernel/time.c in the kernel source
|
|
||||||
was modified with regard to what comes back in the
|
|
||||||
txc.offset field on return from adjtimex. If txc.modes
|
|
||||||
was ADJ_OFFSET_SINGLESHOT on entry, the outstanding
|
|
||||||
adjustment is returned, however the running offset will
|
|
||||||
be modified to the passed value. */
|
|
||||||
have_readonly_adjtime = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
/* I know that earlier 2.1 kernels were like 2.0.31, hence
|
|
||||||
the settings below. However, the 2.0.32 behaviour may
|
|
||||||
have been added late in the 2.1 series, however I have no
|
|
||||||
idea at which patch level. Leave it like this until
|
|
||||||
someone supplies some info. */
|
|
||||||
freq_scale = (hz==100) ? (128.0 / 125.0) : basic_freq_scale;
|
|
||||||
have_readonly_adjtime = 0; /* For safety ! */
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
case 4:
|
|
||||||
case 5:
|
|
||||||
case 6:
|
|
||||||
if (minor < 6 || patch < 27) {
|
|
||||||
/* These seem to be like 2.0.32 */
|
|
||||||
freq_scale = (hz==100) ? (128.0 / 128.125) : basic_freq_scale;
|
|
||||||
have_readonly_adjtime = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (patch < 33) {
|
|
||||||
/* Tickless kernels before 2.6.33 accumulated ticks only in
|
|
||||||
half-second intervals. */
|
|
||||||
tick_update_hz = 2;
|
|
||||||
}
|
|
||||||
/* fall through */
|
|
||||||
default:
|
|
||||||
/* These don't seem to need scaling */
|
|
||||||
freq_scale = 1.0;
|
|
||||||
have_readonly_adjtime = 2;
|
|
||||||
have_nanopll = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* Let's be optimistic that these will be the same until proven
|
|
||||||
otherwise :-) */
|
|
||||||
freq_scale = 1.0;
|
|
||||||
have_readonly_adjtime = 2;
|
|
||||||
have_nanopll = 1;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Override freq_scale if it appears in conf file */
|
/* Override freq_scale if it appears in conf file */
|
||||||
|
@ -1067,7 +1024,6 @@ get_version_specific_details(void)
|
||||||
LOG(LOGS_INFO, LOGF_SysLinux, "calculated_freq_scale=%.8f freq_scale=%.8f",
|
LOG(LOGS_INFO, LOGF_SysLinux, "calculated_freq_scale=%.8f freq_scale=%.8f",
|
||||||
calculated_freq_scale, freq_scale);
|
calculated_freq_scale, freq_scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
|
|
Loading…
Reference in a new issue