@@ -378,22 +378,40 @@ static void next_line(FILE *f) {
378
378
} while (c != ' \n ' && c != EOF);
379
379
}
380
380
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 ;
384
385
385
386
struct utsname buffer;
386
387
int ret = uname (&buffer);
387
388
if (ret != 0 ) {
388
389
log_warning (os)(" uname(2) failed to get kernel version: %s" , os::errno_name (ret));
389
390
return ;
390
391
}
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);
394
395
}
395
396
}
396
397
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
+
397
415
bool os::Linux::get_tick_information (CPUPerfTicks* pticks, int which_logical_cpu) {
398
416
FILE* fh;
399
417
uint64_t userTicks, niceTicks, systemTicks, idleTicks;
0 commit comments