@@ -378,22 +378,40 @@ static void next_line(FILE *f) {
378378 } while (c != ' \n ' && c != EOF);
379379}
380380
381- void os::Linux::kernel_version (long * major, long * minor) {
382- *major = -1 ;
383- *minor = -1 ;
381+ void os::Linux::kernel_version (long * major, long * minor, long * patch) {
382+ *major = 0 ;
383+ *minor = 0 ;
384+ *patch = 0 ;
384385
385386 struct utsname buffer;
386387 int ret = uname (&buffer);
387388 if (ret != 0 ) {
388389 log_warning (os)(" uname(2) failed to get kernel version: %s" , os::errno_name (ret));
389390 return ;
390391 }
391- int nr_matched = sscanf (buffer.release , " %ld.%ld" , major, minor);
392- if (nr_matched != 2 ) {
393- log_warning (os)(" Parsing kernel version failed, expected 2 version numbers, only matched %d" , nr_matched);
392+ int nr_matched = sscanf (buffer.release , " %ld.%ld.%ld " , major, minor, patch );
393+ if (nr_matched != 3 ) {
394+ log_warning (os)(" Parsing kernel version failed, expected 3 version numbers, only matched %d" , nr_matched);
394395 }
395396}
396397
398+ int os::Linux::kernel_version_compare (long major1, long minor1, long patch1,
399+ long major2, long minor2, long patch2) {
400+ // Compare major versions
401+ if (major1 > major2) return 1 ;
402+ if (major1 < major2) return -1 ;
403+
404+ // Compare minor versions
405+ if (minor1 > minor2) return 1 ;
406+ if (minor1 < minor2) return -1 ;
407+
408+ // Compare patchlevel versions
409+ if (patch1 > patch2) return 1 ;
410+ if (patch1 < patch2) return -1 ;
411+
412+ return 0 ;
413+ }
414+
397415bool os::Linux::get_tick_information (CPUPerfTicks* pticks, int which_logical_cpu) {
398416 FILE* fh;
399417 uint64_t userTicks, niceTicks, systemTicks, idleTicks;
0 commit comments