Hello community,

here is the log from the commit of package cpupower for openSUSE:Factory 
checked in at 2020-11-19 12:00:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cpupower (Old)
 and      /work/SRC/openSUSE:Factory/.cpupower.new.5913 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "cpupower"

Thu Nov 19 12:00:40 2020 rev:49 rq:849290 version:5.10

Changes:
--------
--- /work/SRC/openSUSE:Factory/cpupower/cpupower.changes        2020-06-18 
10:26:37.764552690 +0200
+++ /work/SRC/openSUSE:Factory/.cpupower.new.5913/cpupower.changes      
2020-11-23 10:24:36.668964680 +0100
@@ -1,0 +2,21 @@
+Thu Nov 12 22:01:00 UTC 2020 - Thomas Renninger <[email protected]>
+
+- Update turbostat to latest version 20.09.30 including:
+  * jsc#SLE-13412, jsc#SLE-13174 (rocket lake support)
+  * jsc#SLE-13448 (Alder Lake support)
+  * jsc#SLE-13348, jsc#SLE-13171 (Sapphire Rapid support)
+  * Support AMD Fam 19h
+- Touched patches:
+  Deleted mainline integrated patches:
+D    Correction-to-manpage-of-cpupower.patch
+D    
cpupower-Revert-library-ABI-changes-from-commit-ae2917093fb60bdc1ed3e.patch
+  Patches refreshed:
+M    rapl_monitor.patch
+M    turbostat_makefile_fix_asm_header.patch
+
+-------------------------------------------------------------------
+Thu Oct 15 18:20:53 UTC 2020 - Thomas Renninger <[email protected]>
+
+- Update intel-speed-select to version 1.6 (jsc#SLE-13334)
+
+-------------------------------------------------------------------

Old:
----
  Correction-to-manpage-of-cpupower.patch
  cpupower-5.5.tar.bz2
  cpupower-Revert-library-ABI-changes-from-commit-ae2917093fb60bdc1ed3e.patch
  intel-speed-select-1.3.tar.bz2
  turbostat-20.03.20.tar.bz2

New:
----
  cpupower-5.10.tar.bz2
  intel-speed-select-1.6.tar.bz2
  turbostat-20.09.30.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ cpupower.spec ++++++
--- /var/tmp/diff_new_pack.od7lYI/_old  2020-11-23 10:24:37.372965476 +0100
+++ /var/tmp/diff_new_pack.od7lYI/_new  2020-11-23 10:24:37.376965481 +0100
@@ -20,14 +20,14 @@
 # Use this as version when things are in mainline kernel
 %define version %(rpm -q --qf '%{VERSION}' kernel-source)
 
-%define tsversion      20.03.20
+%define tsversion      20.09.30
 %define pbversion      17.05.11
-%define ssversion      1.3
+%define ssversion      1.6
 
 Name:           cpupower
 # Use this as version when things are in mainline kernel
 %define version %(rpm -q --qf '%VERSION' kernel-source)
-Version:        5.5
+Version:        5.10
 Release:        0
 Summary:        Tools to determine and set CPU Power related Settings
 License:        GPL-2.0-only
@@ -42,8 +42,6 @@
 Patch1:         cpupower_rapl.patch
 Patch2:         rapl_monitor.patch
 Patch3:         cpupower_exclude_kernel_Makefile.patch
-Patch4:         
cpupower-Revert-library-ABI-changes-from-commit-ae2917093fb60bdc1ed3e.patch
-Patch5:         Correction-to-manpage-of-cpupower.patch
 Patch6:         amd_do_not_show_amount_of_boost_states_if_zero.patch
 
 #turbostat patches
@@ -99,8 +97,6 @@
 %patch1 -p1
 %patch2 -p1
 %patch3 -p1
-%patch4 -p1
-%patch5 -p1
 %patch6 -p1
 
 cd ../turbostat-%{tsversion}

++++++ cpupower-5.5.tar.bz2 -> cpupower-5.10.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/.gitignore new/cpupower-5.10/.gitignore
--- old/cpupower-5.5/.gitignore 2019-11-28 02:45:48.000000000 +0100
+++ new/cpupower-5.10/.gitignore        2020-11-12 20:06:53.000000000 +0100
@@ -1,3 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0-only
 .libs
 libcpupower.so
 libcpupower.so.*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/Makefile new/cpupower-5.10/Makefile
--- old/cpupower-5.5/Makefile   2019-11-28 02:45:48.000000000 +0100
+++ new/cpupower-5.10/Makefile  2020-11-12 20:06:53.000000000 +0100
@@ -51,7 +51,7 @@
 # Package-related definitions. Distributions can modify the version
 # and _should_ modify the PACKAGE_BUGREPORT definition
 
-VERSION=                       $(shell ./utils/version-gen.sh)
+VERSION:=                      $(shell ./utils/version-gen.sh)
 LIB_MAJ=                       0.0.1
 LIB_MIN=                       0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/debug/i386/intel_gsic.c 
new/cpupower-5.10/debug/i386/intel_gsic.c
--- old/cpupower-5.5/debug/i386/intel_gsic.c    2019-11-28 02:45:48.000000000 
+0100
+++ new/cpupower-5.10/debug/i386/intel_gsic.c   2020-11-12 20:06:53.000000000 
+0100
@@ -71,7 +71,7 @@
                printf("\tsmi_cmd=0x?? smi_port=0x?? smi_sig=1\n");
                printf("\nUnfortunately, you have to know what exactly are "
                       "smi_cmd and smi_port, and this\nis system "
-                      "dependant.\n");
+                      "dependent.\n");
        }
        return 1;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/lib/cpufreq.c 
new/cpupower-5.10/lib/cpufreq.c
--- old/cpupower-5.5/lib/cpufreq.c      2019-11-28 02:45:48.000000000 +0100
+++ new/cpupower-5.10/lib/cpufreq.c     2020-11-12 20:06:53.000000000 +0100
@@ -285,7 +285,7 @@
                        } else {
                                first = malloc(sizeof(*first));
                                if (!first)
-                                       goto error_out;
+                                       return NULL;
                                current = first;
                        }
                        current->first = first;
@@ -332,21 +332,18 @@
 }
 
 
-struct cpufreq_frequencies
-*cpufreq_get_frequencies(const char *type, unsigned int cpu)
+struct cpufreq_available_frequencies
+*cpufreq_get_available_frequencies(unsigned int cpu)
 {
-       struct cpufreq_frequencies *first = NULL;
-       struct cpufreq_frequencies *current = NULL;
+       struct cpufreq_available_frequencies *first = NULL;
+       struct cpufreq_available_frequencies *current = NULL;
        char one_value[SYSFS_PATH_MAX];
        char linebuf[MAX_LINE_LEN];
-       char fname[MAX_LINE_LEN];
        unsigned int pos, i;
        unsigned int len;
 
-       snprintf(fname, MAX_LINE_LEN, "scaling_%s_frequencies", type);
-
-       len = sysfs_cpufreq_read_file(cpu, fname,
-                               linebuf, sizeof(linebuf));
+       len = sysfs_cpufreq_read_file(cpu, "scaling_available_frequencies",
+                                     linebuf, sizeof(linebuf));
        if (len == 0)
                return NULL;
 
@@ -365,7 +362,63 @@
                        } else {
                                first = malloc(sizeof(*first));
                                if (!first)
+                                       return NULL;
+                               current = first;
+                       }
+                       current->first = first;
+                       current->next = NULL;
+
+                       memcpy(one_value, linebuf + pos, i - pos);
+                       one_value[i - pos] = '\0';
+                       if (sscanf(one_value, "%lu", &current->frequency) != 1)
+                               goto error_out;
+
+                       pos = i + 1;
+               }
+       }
+
+       return first;
+
+ error_out:
+       while (first) {
+               current = first->next;
+               free(first);
+               first = current;
+       }
+       return NULL;
+}
+
+struct cpufreq_available_frequencies
+*cpufreq_get_boost_frequencies(unsigned int cpu)
+{
+       struct cpufreq_available_frequencies *first = NULL;
+       struct cpufreq_available_frequencies *current = NULL;
+       char one_value[SYSFS_PATH_MAX];
+       char linebuf[MAX_LINE_LEN];
+       unsigned int pos, i;
+       unsigned int len;
+
+       len = sysfs_cpufreq_read_file(cpu, "scaling_boost_frequencies",
+                                     linebuf, sizeof(linebuf));
+       if (len == 0)
+               return NULL;
+
+       pos = 0;
+       for (i = 0; i < len; i++) {
+               if (linebuf[i] == ' ' || linebuf[i] == '\n') {
+                       if (i - pos < 2)
+                               continue;
+                       if (i - pos >= SYSFS_PATH_MAX)
+                               goto error_out;
+                       if (current) {
+                               current->next = malloc(sizeof(*current));
+                               if (!current->next)
                                        goto error_out;
+                               current = current->next;
+                       } else {
+                               first = malloc(sizeof(*first));
+                               if (!first)
+                                       return NULL;
                                current = first;
                        }
                        current->first = first;
@@ -391,9 +444,9 @@
        return NULL;
 }
 
-void cpufreq_put_frequencies(struct cpufreq_frequencies *any)
+void cpufreq_put_available_frequencies(struct cpufreq_available_frequencies 
*any)
 {
-       struct cpufreq_frequencies *tmp, *next;
+       struct cpufreq_available_frequencies *tmp, *next;
 
        if (!any)
                return;
@@ -406,6 +459,11 @@
        }
 }
 
+void cpufreq_put_boost_frequencies(struct cpufreq_available_frequencies *any)
+{
+       cpufreq_put_available_frequencies(any);
+}
+
 static struct cpufreq_affected_cpus *sysfs_get_cpu_list(unsigned int cpu,
                                                        const char *file)
 {
@@ -435,7 +493,7 @@
                        } else {
                                first = malloc(sizeof(*first));
                                if (!first)
-                                       goto error_out;
+                                       return NULL;
                                current = first;
                        }
                        current->first = first;
@@ -668,7 +726,7 @@
                        } else {
                                first = malloc(sizeof(*first));
                                if (!first)
-                                       goto error_out;
+                                       return NULL;
                                current = first;
                        }
                        current->first = first;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/lib/cpufreq.h 
new/cpupower-5.10/lib/cpufreq.h
--- old/cpupower-5.5/lib/cpufreq.h      2019-11-28 02:45:48.000000000 +0100
+++ new/cpupower-5.10/lib/cpufreq.h     2020-11-12 20:06:53.000000000 +0100
@@ -20,10 +20,10 @@
        struct cpufreq_available_governors *first;
 };
 
-struct cpufreq_frequencies {
+struct cpufreq_available_frequencies {
        unsigned long frequency;
-       struct cpufreq_frequencies *next;
-       struct cpufreq_frequencies *first;
+       struct cpufreq_available_frequencies *next;
+       struct cpufreq_available_frequencies *first;
 };
 
 
@@ -124,11 +124,17 @@
  * cpufreq_put_frequencies after use.
  */
 
-struct cpufreq_frequencies
-*cpufreq_get_frequencies(const char *type, unsigned int cpu);
+struct cpufreq_available_frequencies
+*cpufreq_get_available_frequencies(unsigned int cpu);
 
-void cpufreq_put_frequencies(
-               struct cpufreq_frequencies *first);
+void cpufreq_put_available_frequencies(
+               struct cpufreq_available_frequencies *first);
+
+struct cpufreq_available_frequencies
+*cpufreq_get_boost_frequencies(unsigned int cpu);
+
+void cpufreq_put_boost_frequencies(
+               struct cpufreq_available_frequencies *first);
 
 
 /* determine affected CPUs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/man/cpupower-idle-info.1 
new/cpupower-5.10/man/cpupower-idle-info.1
--- old/cpupower-5.5/man/cpupower-idle-info.1   2019-11-28 02:45:48.000000000 
+0100
+++ new/cpupower-5.10/man/cpupower-idle-info.1  2020-11-12 20:06:53.000000000 
+0100
@@ -75,7 +75,7 @@
 other cores is described in the cpupower(1) manpage in the \-\-cpu option
 section.
 .SH REFERENCES
-http://www.acpi.info/spec.htm
+https://uefi.org/specifications
 .SH "FILES"
 .nf
 \fI/sys/devices/system/cpu/cpu*/cpuidle/state*\fP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/man/cpupower-monitor.1 
new/cpupower-5.10/man/cpupower-monitor.1
--- old/cpupower-5.5/man/cpupower-monitor.1     2019-11-28 02:45:48.000000000 
+0100
+++ new/cpupower-5.10/man/cpupower-monitor.1    2020-11-12 20:06:53.000000000 
+0100
@@ -170,7 +170,7 @@
 
 .SH REFERENCES
 "BIOS and Kernel Developer’s Guide (BKDG) for AMD Family 14h Processors"
-http://support.amd.com/us/Processor_TechDocs/43170.pdf
+https://support.amd.com/us/Processor_TechDocs/43170.pdf
 
 "Intel® Turbo Boost Technology
 in Intel® Core™ Microarchitecture (Nehalem) Based Processors"
@@ -178,7 +178,7 @@
 
 "Intel® 64 and IA-32 Architectures Software Developer's Manual
 Volume 3B: System Programming Guide"
-http://www.intel.com/products/processor/manuals
+https://www.intel.com/products/processor/manuals
 
 .SH FILES
 .ta
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/man/cpupower.1 
new/cpupower-5.10/man/cpupower.1
--- old/cpupower-5.5/man/cpupower.1     2019-11-28 02:45:48.000000000 +0100
+++ new/cpupower-5.10/man/cpupower.1    2020-11-12 20:06:53.000000000 +0100
@@ -62,9 +62,9 @@
 Print the package name and version number.
 
 .SH "SEE ALSO"
-cpupower-set(1), cpupower-info(1), cpupower-idle(1),
-cpupower-frequency-set(1), cpupower-frequency-info(1), cpupower-monitor(1),
-powertop(1)
+cpupower-set(1), cpupower-info(1), cpupower-idle-info(1),
+cpupower-idle-set(1), cpupower-frequency-set(1), cpupower-frequency-info(1),
+cpupower-monitor(1), powertop(1)
 .PP
 .SH AUTHORS
 .nf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/utils/cpufreq-info.c 
new/cpupower-5.10/utils/cpufreq-info.c
--- old/cpupower-5.5/utils/cpufreq-info.c       2019-11-28 02:45:48.000000000 
+0100
+++ new/cpupower-5.10/utils/cpufreq-info.c      2020-11-12 20:06:53.000000000 
+0100
@@ -244,14 +244,14 @@
 
 static int get_boost_mode(unsigned int cpu)
 {
-       struct cpufreq_frequencies *freqs;
+       struct cpufreq_available_frequencies *freqs;
 
        if (cpupower_cpu_info.vendor == X86_VENDOR_AMD ||
            cpupower_cpu_info.vendor == X86_VENDOR_HYGON ||
            cpupower_cpu_info.vendor == X86_VENDOR_INTEL)
                return get_boost_mode_x86(cpu);
 
-       freqs = cpufreq_get_frequencies("boost", cpu);
+       freqs = cpufreq_get_boost_frequencies(cpu);
        if (freqs) {
                printf(_("  boost frequency steps: "));
                while (freqs->next) {
@@ -261,7 +261,7 @@
                }
                print_speed(freqs->frequency);
                printf("\n");
-               cpufreq_put_frequencies(freqs);
+               cpufreq_put_available_frequencies(freqs);
        }
 
        return 0;
@@ -475,7 +475,7 @@
 
 static void debug_output_one(unsigned int cpu)
 {
-       struct cpufreq_frequencies *freqs;
+       struct cpufreq_available_frequencies *freqs;
 
        get_driver(cpu);
        get_related_cpus(cpu);
@@ -483,7 +483,7 @@
        get_latency(cpu, 1);
        get_hardware_limits(cpu, 1);
 
-       freqs = cpufreq_get_frequencies("available", cpu);
+       freqs = cpufreq_get_available_frequencies(cpu);
        if (freqs) {
                printf(_("  available frequency steps:  "));
                while (freqs->next) {
@@ -493,7 +493,7 @@
                }
                print_speed(freqs->frequency);
                printf("\n");
-               cpufreq_put_frequencies(freqs);
+               cpufreq_put_available_frequencies(freqs);
        }
 
        get_available_governors(cpu);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/utils/cpufreq-set.c 
new/cpupower-5.10/utils/cpufreq-set.c
--- old/cpupower-5.5/utils/cpufreq-set.c        2019-11-28 02:45:48.000000000 
+0100
+++ new/cpupower-5.10/utils/cpufreq-set.c       2020-11-12 20:06:53.000000000 
+0100
@@ -99,13 +99,17 @@
                continue;
 
        if (str[cp] == '.') {
-               while (power > -1 && isdigit(str[cp+1]))
-                       cp++, power--;
+               while (power > -1 && isdigit(str[cp+1])) {
+                       cp++;
+                       power--;
+               }
        }
-       if (power >= -1)        /* not enough => pad */
+       if (power >= -1) {              /* not enough => pad */
                pad = power + 1;
-       else                    /* to much => strip */
-               pad = 0, cp += power + 1;
+       } else {                        /* too much => strip */
+               pad = 0;
+               cp += power + 1;
+       }
        /* check bounds */
        if (cp <= 0 || cp + pad > NORM_FREQ_LEN - 1)
                return 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/utils/cpupower-info.c 
new/cpupower-5.10/utils/cpupower-info.c
--- old/cpupower-5.5/utils/cpupower-info.c      2019-11-28 02:45:48.000000000 
+0100
+++ new/cpupower-5.10/utils/cpupower-info.c     2020-11-12 20:06:53.000000000 
+0100
@@ -62,7 +62,7 @@
                default:
                        print_wrong_arg_exit();
                }
-       };
+       }
 
        if (!params.params)
                params.params = 0x7;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/utils/cpupower-set.c 
new/cpupower-5.10/utils/cpupower-set.c
--- old/cpupower-5.5/utils/cpupower-set.c       2019-11-28 02:45:48.000000000 
+0100
+++ new/cpupower-5.10/utils/cpupower-set.c      2020-11-12 20:06:53.000000000 
+0100
@@ -72,7 +72,7 @@
                default:
                        print_wrong_arg_exit();
                }
-       };
+       }
 
        if (!params.params)
                print_wrong_arg_exit();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/utils/helpers/bitmask.c 
new/cpupower-5.10/utils/helpers/bitmask.c
--- old/cpupower-5.5/utils/helpers/bitmask.c    2019-11-28 02:45:48.000000000 
+0100
+++ new/cpupower-5.10/utils/helpers/bitmask.c   2020-11-12 20:06:53.000000000 
+0100
@@ -26,11 +26,11 @@
        struct bitmask *bmp;
 
        bmp = malloc(sizeof(*bmp));
-       if (bmp == 0)
+       if (!bmp)
                return 0;
        bmp->size = n;
        bmp->maskp = calloc(longsperbits(n), sizeof(unsigned long));
-       if (bmp->maskp == 0) {
+       if (!bmp->maskp) {
                free(bmp);
                return 0;
        }
@@ -40,7 +40,7 @@
 /* Free `struct bitmask` */
 void bitmask_free(struct bitmask *bmp)
 {
-       if (bmp == 0)
+       if (!bmp)
                return;
        free(bmp->maskp);
        bmp->maskp = (unsigned long *)0xdeadcdef;  /* double free tripwire */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/utils/idle_monitor/amd_fam14h_idle.c 
new/cpupower-5.10/utils/idle_monitor/amd_fam14h_idle.c
--- old/cpupower-5.5/utils/idle_monitor/amd_fam14h_idle.c       2019-11-28 
02:45:48.000000000 +0100
+++ new/cpupower-5.10/utils/idle_monitor/amd_fam14h_idle.c      2020-11-12 
20:06:53.000000000 +0100
@@ -82,7 +82,7 @@
 static struct pci_dev *amd_fam14h_pci_dev;
 static int nbp1_entered;
 
-struct timespec start_time;
+static struct timespec start_time;
 static unsigned long long timediff;
 
 #ifdef DEBUG
@@ -117,7 +117,7 @@
                break;
        default:
                return -1;
-       };
+       }
        return 0;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/utils/idle_monitor/cpuidle_sysfs.c 
new/cpupower-5.10/utils/idle_monitor/cpuidle_sysfs.c
--- old/cpupower-5.5/utils/idle_monitor/cpuidle_sysfs.c 2019-11-28 
02:45:48.000000000 +0100
+++ new/cpupower-5.10/utils/idle_monitor/cpuidle_sysfs.c        2020-11-12 
20:06:53.000000000 +0100
@@ -19,7 +19,7 @@
 
 static unsigned long long **previous_count;
 static unsigned long long **current_count;
-struct timespec start_time;
+static struct timespec start_time;
 static unsigned long long timediff;
 
 static int cpuidle_get_count_percent(unsigned int id, double *percent,
@@ -53,7 +53,7 @@
                        dprint("CPU %d - State: %d - Val: %llu\n",
                               cpu, state, previous_count[cpu][state]);
                }
-       };
+       }
        return 0;
 }
 
@@ -72,7 +72,7 @@
                        dprint("CPU %d - State: %d - Val: %llu\n",
                               cpu, state, previous_count[cpu][state]);
                }
-       };
+       }
        return 0;
 }
 
@@ -172,7 +172,7 @@
                cpuidle_cstates[num].id = num;
                cpuidle_cstates[num].get_count_percent =
                        cpuidle_get_count_percent;
-       };
+       }
 
        /* Free this at program termination */
        previous_count = malloc(sizeof(long long *) * cpu_count);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/utils/idle_monitor/cpupower-monitor.c 
new/cpupower-5.10/utils/idle_monitor/cpupower-monitor.c
--- old/cpupower-5.5/utils/idle_monitor/cpupower-monitor.c      2019-11-28 
02:45:48.000000000 +0100
+++ new/cpupower-5.10/utils/idle_monitor/cpupower-monitor.c     2020-11-12 
20:06:53.000000000 +0100
@@ -27,6 +27,8 @@
 0
 };
 
+int cpu_count;
+
 static struct cpuidle_monitor *monitors[MONITORS_MAX];
 static unsigned int avail_monitors;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/utils/idle_monitor/cpupower-monitor.h 
new/cpupower-5.10/utils/idle_monitor/cpupower-monitor.h
--- old/cpupower-5.5/utils/idle_monitor/cpupower-monitor.h      2019-11-28 
02:45:48.000000000 +0100
+++ new/cpupower-5.10/utils/idle_monitor/cpupower-monitor.h     2020-11-12 
20:06:53.000000000 +0100
@@ -25,7 +25,7 @@
 #endif
 #define CSTATE_DESC_LEN 60
 
-int cpu_count;
+extern int cpu_count;
 
 /* Hard to define the right names ...: */
 enum power_range_e {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/utils/idle_monitor/hsw_ext_idle.c 
new/cpupower-5.10/utils/idle_monitor/hsw_ext_idle.c
--- old/cpupower-5.5/utils/idle_monitor/hsw_ext_idle.c  2019-11-28 
02:45:48.000000000 +0100
+++ new/cpupower-5.10/utils/idle_monitor/hsw_ext_idle.c 2020-11-12 
20:06:53.000000000 +0100
@@ -79,7 +79,7 @@
                break;
        default:
                return -1;
-       };
+       }
        if (read_msr(cpu, msr, val))
                return -1;
        return 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/utils/idle_monitor/nhm_idle.c 
new/cpupower-5.10/utils/idle_monitor/nhm_idle.c
--- old/cpupower-5.5/utils/idle_monitor/nhm_idle.c      2019-11-28 
02:45:48.000000000 +0100
+++ new/cpupower-5.10/utils/idle_monitor/nhm_idle.c     2020-11-12 
20:06:53.000000000 +0100
@@ -91,7 +91,7 @@
                break;
        default:
                return -1;
-       };
+       }
        if (read_msr(cpu, msr, val))
                return -1;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cpupower-5.5/utils/idle_monitor/snb_idle.c 
new/cpupower-5.10/utils/idle_monitor/snb_idle.c
--- old/cpupower-5.5/utils/idle_monitor/snb_idle.c      2019-11-28 
02:45:48.000000000 +0100
+++ new/cpupower-5.10/utils/idle_monitor/snb_idle.c     2020-11-12 
20:06:53.000000000 +0100
@@ -77,7 +77,7 @@
                break;
        default:
                return -1;
-       };
+       }
        if (read_msr(cpu, msr, val))
                return -1;
        return 0;

++++++ intel-speed-select-1.3.tar.bz2 -> intel-speed-select-1.6.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/intel-speed-select-1.3/include/linux/isst_if.h 
new/intel-speed-select-1.6/include/linux/isst_if.h
--- old/intel-speed-select-1.3/include/linux/isst_if.h  2020-05-19 
10:03:25.878103902 +0200
+++ new/intel-speed-select-1.6/include/linux/isst_if.h  2020-11-12 
22:58:40.207423928 +0100
@@ -69,7 +69,7 @@
  * @logical_cpu:       Logical CPU number to get target PCI device.
  * @reg:               PUNIT register offset
  * @value:             For write operation value to write and for
- *                     for read placeholder read value
+ *                     read placeholder read value
  *
  * Structure to specify read/write data to PUNIT registers.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/intel-speed-select-1.3/isst-config.c 
new/intel-speed-select-1.6/isst-config.c
--- old/intel-speed-select-1.3/isst-config.c    2020-05-18 20:29:21.000000000 
+0200
+++ new/intel-speed-select-1.6/isst-config.c    2020-11-12 20:06:53.000000000 
+0100
@@ -15,7 +15,7 @@
        int arg;
 };
 
-static const char *version_str = "v1.3";
+static const char *version_str = "v1.6";
 static const int supported_api_ver = 1;
 static struct isst_if_platform_info isst_platform_info;
 static char *progname;
@@ -25,7 +25,7 @@
 static int cpu_model;
 static int cpu_stepping;
 
-#define MAX_CPUS_IN_ONE_REQ 64
+#define MAX_CPUS_IN_ONE_REQ 256
 static short max_target_cpus;
 static unsigned short target_cpus[MAX_CPUS_IN_ONE_REQ];
 
@@ -44,6 +44,9 @@
 static int auto_mode;
 static int fact_enable_fail;
 
+static int mbox_delay;
+static int mbox_retries = 3;
+
 /* clos related */
 static int current_clos = -1;
 static int clos_epp = -1;
@@ -198,7 +201,7 @@
 
 static int get_stored_topology_info(int cpu, int *core_id, int *pkg_id, int 
*die_id)
 {
-       const char *pathname = "/tmp/isst_cpu_topology.dat";
+       const char *pathname = "/var/run/isst_cpu_topology.dat";
        struct cpu_topology cpu_top;
        FILE *fp;
        int ret;
@@ -230,7 +233,7 @@
 
 static void store_cpu_topology(void)
 {
-       const char *pathname = "/tmp/isst_cpu_topology.dat";
+       const char *pathname = "/var/run/isst_cpu_topology.dat";
        FILE *fp;
        int i;
 
@@ -247,6 +250,8 @@
                return;
        }
 
+       fprintf(stderr, "Caching topology information\n");
+
        for (i = 0; i < topo_max_cpus; ++i) {
                struct cpu_topology cpu_top;
 
@@ -540,20 +545,23 @@
        }
 }
 
-int get_core_count(int pkg_id, int die_id)
+int get_max_punit_core_id(int pkg_id, int die_id)
 {
-       int cnt = 0;
+       int max_id = 0;
+       int i;
 
-       if (pkg_id < MAX_PACKAGE_COUNT && die_id < MAX_DIE_PER_PACKAGE) {
-               int i;
+       for (i = 0; i < topo_max_cpus; ++i)
+       {
+               if (!CPU_ISSET_S(i, present_cpumask_size, present_cpumask))
+                       continue;
 
-               for (i = 0; i < sizeof(long long) * 8; ++i) {
-                       if (core_mask[pkg_id][die_id] & (1ULL << i))
-                               cnt++;
-               }
+               if (cpu_map[i].pkg_id == pkg_id &&
+                       cpu_map[i].die_id == die_id &&
+                       cpu_map[i].punit_cpu_core > max_id)
+                       max_id = cpu_map[i].punit_cpu_core;
        }
 
-       return cnt;
+       return max_id;
 }
 
 int get_cpu_count(int pkg_id, int die_id)
@@ -653,7 +661,7 @@
        pkg_id = get_physical_package_id(cpu);
 
        for (i = 0; i < 64; ++i) {
-               if (core_mask & BIT(i)) {
+               if (core_mask & BIT_ULL(i)) {
                        int j;
 
                        for (j = 0; j < topo_max_cpus; ++j) {
@@ -734,7 +742,7 @@
                           unsigned int req_data, unsigned int *resp)
 {
        const char *pathname = "/dev/isst_interface";
-       int fd;
+       int fd, retry;
        struct isst_if_mbox_cmds mbox_cmds = { 0 };
 
        debug_printf(
@@ -786,29 +794,42 @@
        mbox_cmds.mbox_cmd[0].parameter = parameter;
        mbox_cmds.mbox_cmd[0].req_data = req_data;
 
+       if (mbox_delay)
+               usleep(mbox_delay * 1000);
+
        fd = open(pathname, O_RDWR);
        if (fd < 0)
                err(-1, "%s open failed", pathname);
 
-       if (ioctl(fd, ISST_IF_MBOX_COMMAND, &mbox_cmds) == -1) {
-               if (errno == ENOTTY) {
-                       perror("ISST_IF_MBOX_COMMAND\n");
-                       fprintf(stderr, "Check presence of kernel modules: 
isst_if_mbox_pci or isst_if_mbox_msr\n");
-                       exit(0);
+       retry = mbox_retries;
+
+       do {
+               if (ioctl(fd, ISST_IF_MBOX_COMMAND, &mbox_cmds) == -1) {
+                       if (errno == ENOTTY) {
+                               perror("ISST_IF_MBOX_COMMAND\n");
+                               fprintf(stderr, "Check presence of kernel 
modules: isst_if_mbox_pci or isst_if_mbox_msr\n");
+                               exit(0);
+                       }
+                       debug_printf(
+                               "Error: mbox_cmd cpu:%d command:%x 
sub_command:%x parameter:%x req_data:%x errorno:%d\n",
+                               cpu, command, sub_command, parameter, req_data, 
errno);
+                       --retry;
+               } else {
+                       *resp = mbox_cmds.mbox_cmd[0].resp_data;
+                       debug_printf(
+                               "mbox_cmd response: cpu:%d command:%x 
sub_command:%x parameter:%x req_data:%x resp:%x\n",
+                               cpu, command, sub_command, parameter, req_data, 
*resp);
+                       break;
                }
-               debug_printf(
-                       "Error: mbox_cmd cpu:%d command:%x sub_command:%x 
parameter:%x req_data:%x errorno:%d\n",
-                       cpu, command, sub_command, parameter, req_data, errno);
-               return -1;
-       } else {
-               *resp = mbox_cmds.mbox_cmd[0].resp_data;
-               debug_printf(
-                       "mbox_cmd response: cpu:%d command:%x sub_command:%x 
parameter:%x req_data:%x resp:%x\n",
-                       cpu, command, sub_command, parameter, req_data, *resp);
-       }
+       } while (retry);
 
        close(fd);
 
+       if (!retry) {
+               debug_printf("Failed mbox command even after retries\n");
+               return -1;
+
+       }
        return 0;
 }
 
@@ -1169,6 +1190,7 @@
 
                ctdp_level = &clx_n_pkg_dev.ctdp_level[0];
                pbf_info = &ctdp_level->pbf_info;
+               clx_n_pkg_dev.processed = 1;
                isst_ctdp_display_information(cpu, outf, tdp_level, 
&clx_n_pkg_dev);
                free_cpu_set(ctdp_level->core_cpumask);
                free_cpu_set(pbf_info->core_cpumask);
@@ -1244,7 +1266,11 @@
                        fprintf(stderr, "Option is set to online/offline\n");
                        ctdp_level.core_cpumask_size =
                                alloc_cpu_set(&ctdp_level.core_cpumask);
-                       isst_get_coremask_info(cpu, tdp_level, &ctdp_level);
+                       ret = isst_get_coremask_info(cpu, tdp_level, 
&ctdp_level);
+                       if (ret) {
+                               isst_display_error_info_message(1, "Can't get 
coremask, online/offline option is ignored", 0, 0);
+                               return;
+                       }
                        if (ctdp_level.cpu_count) {
                                int i, max_cpus = get_topo_max_cpus();
                                for (i = 0; i < max_cpus; ++i) {
@@ -1631,6 +1657,8 @@
 static void set_pbf_for_cpu(int cpu, void *arg1, void *arg2, void *arg3,
                            void *arg4)
 {
+       struct isst_pkg_ctdp_level_info ctdp_level;
+       struct isst_pkg_ctdp pkg_dev;
        int ret;
        int status = *(int *)arg4;
 
@@ -1646,6 +1674,24 @@
                goto disp_result;
        }
 
+       ret = isst_get_ctdp_levels(cpu, &pkg_dev);
+       if (ret) {
+               isst_display_error_info_message(1, "Failed to get number of 
levels", 0, 0);
+               goto disp_result;
+       }
+
+       ret = isst_get_ctdp_control(cpu, pkg_dev.current_level, &ctdp_level);
+       if (ret) {
+               isst_display_error_info_message(1, "Failed to get current 
level", 0, 0);
+               goto disp_result;
+       }
+
+       if (!ctdp_level.pbf_support) {
+               isst_display_error_info_message(1, "base-freq feature is not 
present at this level", 1, pkg_dev.current_level);
+               ret = -1;
+               goto disp_result;
+       }
+
        if (auto_mode && status) {
                ret = set_pbf_core_power(cpu);
                if (ret)
@@ -1772,10 +1818,30 @@
 static void set_fact_for_cpu(int cpu, void *arg1, void *arg2, void *arg3,
                             void *arg4)
 {
+       struct isst_pkg_ctdp_level_info ctdp_level;
+       struct isst_pkg_ctdp pkg_dev;
        int ret;
        int status = *(int *)arg4;
 
-       if (auto_mode && status) {
+       ret = isst_get_ctdp_levels(cpu, &pkg_dev);
+       if (ret) {
+               isst_display_error_info_message(1, "Failed to get number of 
levels", 0, 0);
+               goto disp_results;
+       }
+
+       ret = isst_get_ctdp_control(cpu, pkg_dev.current_level, &ctdp_level);
+       if (ret) {
+               isst_display_error_info_message(1, "Failed to get current 
level", 0, 0);
+               goto disp_results;
+       }
+
+       if (!ctdp_level.fact_support) {
+               isst_display_error_info_message(1, "turbo-freq feature is not 
present at this level", 1, pkg_dev.current_level);
+               ret = -1;
+               goto disp_results;
+       }
+
+       if (status) {
                ret = isst_pm_qos_config(cpu, 1, 1);
                if (ret)
                        goto disp_results;
@@ -2552,6 +2618,8 @@
        printf("\t[-i|--info] : Print platform information\n");
        printf("\t[-o|--out] : Output file\n");
        printf("\t\t\tDefault : stderr\n");
+       printf("\t[-p|--pause] : Delay between two mail box commands in 
milliseconds\n");
+       printf("\t[-r|--retry] : Retry count for mail box commands on failure, 
default 3\n");
        printf("\t[-v|--version] : Print version\n");
 
        printf("\nResult format\n");
@@ -2583,6 +2651,7 @@
 static void cmdline(int argc, char **argv)
 {
        const char *pathname = "/dev/isst_interface";
+       char *ptr;
        FILE *fp;
        int opt;
        int option_index = 0;
@@ -2594,7 +2663,9 @@
                { "format", required_argument, 0, 'f' },
                { "help", no_argument, 0, 'h' },
                { "info", no_argument, 0, 'i' },
+               { "pause", required_argument, 0, 'p' },
                { "out", required_argument, 0, 'o' },
+               { "retry", required_argument, 0, 'r' },
                { "version", no_argument, 0, 'v' },
                { 0, 0, 0, 0 }
        };
@@ -2647,6 +2718,20 @@
                                fclose(outf);
                        outf = fopen_or_exit(optarg, "w");
                        break;
+               case 'p':
+                       ret = strtol(optarg, &ptr, 10);
+                       if (!ret)
+                               fprintf(stderr, "Invalid pause interval, 
ignore\n");
+                       else
+                               mbox_delay = ret;
+                       break;
+               case 'r':
+                       ret = strtol(optarg, &ptr, 10);
+                       if (!ret)
+                               fprintf(stderr, "Invalid retry count, 
ignore\n");
+                       else
+                               mbox_retries = ret;
+                       break;
                case 'v':
                        print_version();
                        break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/intel-speed-select-1.3/isst-core.c 
new/intel-speed-select-1.6/isst-core.c
--- old/intel-speed-select-1.3/isst-core.c      2020-05-18 20:29:21.000000000 
+0200
+++ new/intel-speed-select-1.6/isst-core.c      2020-11-12 20:06:53.000000000 
+0100
@@ -396,7 +396,7 @@
 {
        struct isst_pkg_ctdp_level_info ctdp_level;
        struct isst_pkg_ctdp pkg_dev;
-       int i, ret, core_cnt, max;
+       int i, ret, max_punit_core, max_mask_index;
        unsigned int req, resp;
 
        ret = isst_get_ctdp_levels(cpu, &pkg_dev);
@@ -421,10 +421,10 @@
 
        pbf_info->core_cpumask_size = alloc_cpu_set(&pbf_info->core_cpumask);
 
-       core_cnt = get_core_count(get_physical_package_id(cpu), 
get_physical_die_id(cpu));
-       max = core_cnt > 32 ? 2 : 1;
+       max_punit_core = get_max_punit_core_id(get_physical_package_id(cpu), 
get_physical_die_id(cpu));
+       max_mask_index = max_punit_core > 32 ? 2 : 1;
 
-       for (i = 0; i < max; ++i) {
+       for (i = 0; i < max_mask_index; ++i) {
                unsigned long long mask;
                int count;
 
@@ -912,16 +912,16 @@
                        return ret;
 
                if (ctdp_level.fact_enabled) {
-                       debug_printf("Turbo-freq feature must be disabled 
first\n");
+                       isst_display_error_info_message(1, "Ignoring request, 
turbo-freq feature is still enabled", 0, 0);
                        return -EINVAL;
                }
                ret = isst_write_pm_config(cpu, 0);
                if (ret)
-                       isst_display_error_info_message(0, "WRITE_PM_CONFIG 
command failed, ignoring error\n", 0, 0);
+                       isst_display_error_info_message(0, "WRITE_PM_CONFIG 
command failed, ignoring error", 0, 0);
        } else {
                ret = isst_write_pm_config(cpu, 1);
                if (ret)
-                       isst_display_error_info_message(0, "WRITE_PM_CONFIG 
command failed, ignoring error\n", 0, 0);
+                       isst_display_error_info_message(0, "WRITE_PM_CONFIG 
command failed, ignoring error", 0, 0);
        }
 
        ret = isst_send_mbox_command(cpu, CONFIG_CLOS, CLOS_PM_QOS_CONFIG, 0, 0,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/intel-speed-select-1.3/isst-display.c 
new/intel-speed-select-1.6/isst-display.c
--- old/intel-speed-select-1.3/isst-display.c   2020-05-18 20:29:21.000000000 
+0200
+++ new/intel-speed-select-1.6/isst-display.c   2020-11-12 20:06:53.000000000 
+0100
@@ -316,21 +316,31 @@
 {
        char header[256];
        char value[256];
+       int level = 1;
+
+       if (out_format_is_json()) {
+               snprintf(header, sizeof(header), "package-%d:die-%d:cpu-%d",
+                        get_physical_package_id(cpu), get_physical_die_id(cpu),
+                        cpu);
+               format_and_print(outf, level++, header, NULL);
+       } else {
+               snprintf(header, sizeof(header), "package-%d",
+                        get_physical_package_id(cpu));
+               format_and_print(outf, level++, header, NULL);
+               snprintf(header, sizeof(header), "die-%d",
+                        get_physical_die_id(cpu));
+               format_and_print(outf, level++, header, NULL);
+               snprintf(header, sizeof(header), "cpu-%d", cpu);
+               format_and_print(outf, level++, header, NULL);
+       }
 
-       snprintf(header, sizeof(header), "package-%d",
-                get_physical_package_id(cpu));
-       format_and_print(outf, 1, header, NULL);
-       snprintf(header, sizeof(header), "die-%d", get_physical_die_id(cpu));
-       format_and_print(outf, 2, header, NULL);
-       snprintf(header, sizeof(header), "cpu-%d", cpu);
-       format_and_print(outf, 3, header, NULL);
        if (str0 && !val)
                snprintf(value, sizeof(value), "%s", str0);
        else if (str1 && val)
                snprintf(value, sizeof(value), "%s", str1);
        else
                snprintf(value, sizeof(value), "%u", val);
-       format_and_print(outf, 4, prefix, value);
+       format_and_print(outf, level, prefix, value);
 
        format_and_print(outf, 1, NULL, NULL);
 }
@@ -470,7 +480,7 @@
                                _isst_pbf_display_information(cpu, outf,
                                                              tdp_level,
                                                          &ctdp_level->pbf_info,
-                                                             level + 1);
+                                                             level + 2);
                        continue;
                }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/intel-speed-select-1.3/isst.h 
new/intel-speed-select-1.6/isst.h
--- old/intel-speed-select-1.3/isst.h   2020-05-18 20:29:21.000000000 +0200
+++ new/intel-speed-select-1.6/isst.h   2020-11-12 20:06:53.000000000 +0100
@@ -29,6 +29,7 @@
 #include <sys/ioctl.h>
 
 #define BIT(x) (1 << (x))
+#define BIT_ULL(nr) (1ULL << (nr))
 #define GENMASK(h, l) (((~0UL) << (l)) & (~0UL >> (sizeof(long) * 8 - 1 - 
(h))))
 #define GENMASK_ULL(h, l)                                                      
\
        (((~0ULL) << (l)) & (~0ULL >> (sizeof(long long) * 8 - 1 - (h))))
@@ -169,7 +170,7 @@
 
 extern int get_topo_max_cpus(void);
 extern int get_cpu_count(int pkg_id, int die_id);
-extern int get_core_count(int pkg_id, int die_id);
+extern int get_max_punit_core_id(int pkg_id, int die_id);
 
 /* Common interfaces */
 FILE *get_output_file(void);

++++++ rapl_monitor.patch ++++++
--- /var/tmp/diff_new_pack.od7lYI/_old  2020-11-23 10:24:37.628965766 +0100
+++ /var/tmp/diff_new_pack.od7lYI/_new  2020-11-23 10:24:37.628965766 +0100
@@ -3,11 +3,16 @@
 
 Signed-off-by: Thomas Renninger <[email protected]>
 
-Index: cpupower-5.5/Makefile
-===================================================================
---- cpupower-5.5.orig/Makefile 2019-11-28 14:44:23.261812260 +0100
-+++ cpupower-5.5/Makefile      2019-11-28 14:44:28.457812540 +0100
-@@ -131,6 +131,7 @@ UTIL_OBJS =  utils/helpers/amd.o utils/h
+---
+ Makefile                              |    1 
+ utils/idle_monitor/cpupower-monitor.c |    7 -
+ utils/idle_monitor/idle_monitors.def  |    1 
+ utils/idle_monitor/rapl_monitor.c     |  141 
++++++++++++++++++++++++++++++++++
+ 4 files changed, 147 insertions(+), 3 deletions(-)
+
+--- a/Makefile
++++ b/Makefile
+@@ -131,6 +131,7 @@
        utils/idle_monitor/hsw_ext_idle.o \
        utils/idle_monitor/amd_fam14h_idle.o utils/idle_monitor/cpuidle_sysfs.o 
\
        utils/idle_monitor/mperf_monitor.o 
utils/idle_monitor/cpupower-monitor.o \
@@ -15,11 +20,9 @@
        utils/cpupower.o utils/cpufreq-info.o utils/cpufreq-set.o \
        utils/cpupower-set.o utils/cpupower-info.o utils/cpuidle-info.o \
        utils/cpuidle-set.o utils/powercap-info.o
-Index: cpupower-5.5/utils/idle_monitor/cpupower-monitor.c
-===================================================================
---- cpupower-5.5.orig/utils/idle_monitor/cpupower-monitor.c    2019-11-28 
14:44:23.261812260 +0100
-+++ cpupower-5.5/utils/idle_monitor/cpupower-monitor.c 2019-11-28 
14:44:28.457812540 +0100
-@@ -457,9 +457,10 @@ int cmd_monitor(int argc, char **argv)
+--- a/utils/idle_monitor/cpupower-monitor.c
++++ b/utils/idle_monitor/cpupower-monitor.c
+@@ -459,9 +459,10 @@
                        print_results(1, cpu);
        }
  
@@ -33,21 +36,17 @@
        cpu_topology_release(cpu_top);
        return 0;
  }
-Index: cpupower-5.5/utils/idle_monitor/idle_monitors.def
-===================================================================
---- cpupower-5.5.orig/utils/idle_monitor/idle_monitors.def     2019-11-28 
14:44:23.261812260 +0100
-+++ cpupower-5.5/utils/idle_monitor/idle_monitors.def  2019-11-28 
14:44:28.457812540 +0100
-@@ -4,5 +4,6 @@ DEF(intel_nhm)
+--- a/utils/idle_monitor/idle_monitors.def
++++ b/utils/idle_monitor/idle_monitors.def
+@@ -4,5 +4,6 @@
  DEF(intel_snb)
  DEF(intel_hsw_ext)
  DEF(mperf)
 +DEF(rapl)
  #endif
  DEF(cpuidle_sysfs)
-Index: cpupower-5.5/utils/idle_monitor/rapl_monitor.c
-===================================================================
---- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ cpupower-5.5/utils/idle_monitor/rapl_monitor.c     2019-11-28 
14:44:54.909813966 +0100
+--- /dev/null
++++ b/utils/idle_monitor/rapl_monitor.c
 @@ -0,0 +1,141 @@
 +/*
 + *  (C) 2016      Thomas Renninger <[email protected]>

++++++ turbostat-20.03.20.tar.bz2 -> turbostat-20.09.30.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/turbostat-20.03.20/Makefile 
new/turbostat-20.09.30/Makefile
--- old/turbostat-20.03.20/Makefile     2020-05-18 20:29:21.000000000 +0200
+++ new/turbostat-20.09.30/Makefile     2020-11-12 20:06:53.000000000 +0100
@@ -12,11 +12,12 @@
 override CFLAGS +=     -O2 -Wall -I../../../include
 override CFLAGS +=     
-DMSRHEADER='"../../../../arch/x86/include/asm/msr-index.h"'
 override CFLAGS +=     
-DINTEL_FAMILY_HEADER='"../../../../arch/x86/include/asm/intel-family.h"'
+override CFLAGS +=     -D_FILE_OFFSET_BITS=64
 override CFLAGS +=     -D_FORTIFY_SOURCE=2
 
 %: %.c
        @mkdir -p $(BUILD_OUTPUT)
-       $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS) -lcap
+       $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS) -lcap -lrt
 
 .PHONY : clean
 clean :
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/turbostat-20.03.20/intel-family.h 
new/turbostat-20.09.30/intel-family.h
--- old/turbostat-20.03.20/intel-family.h       2020-05-19 11:27:20.038375156 
+0200
+++ new/turbostat-20.09.30/intel-family.h       2020-11-12 22:56:15.103421621 
+0100
@@ -89,6 +89,15 @@
 #define INTEL_FAM6_COMETLAKE           0xA5
 #define INTEL_FAM6_COMETLAKE_L         0xA6
 
+#define INTEL_FAM6_ROCKETLAKE          0xA7
+
+#define INTEL_FAM6_SAPPHIRERAPIDS_X    0x8F
+
+/* Hybrid Core/Atom Processors */
+
+#define        INTEL_FAM6_LAKEFIELD            0x8A
+#define INTEL_FAM6_ALDERLAKE           0x97
+
 /* "Small Core" Processors (Atom) */
 
 #define INTEL_FAM6_ATOM_BONNELL                0x1C /* Diamondville, Pineview 
*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/turbostat-20.03.20/msr-index.h 
new/turbostat-20.09.30/msr-index.h
--- old/turbostat-20.03.20/msr-index.h  2020-05-19 11:27:20.038375156 +0200
+++ new/turbostat-20.09.30/msr-index.h  2020-11-12 22:56:15.107421621 +0100
@@ -128,6 +128,10 @@
 #define TSX_CTRL_RTM_DISABLE           BIT(0)  /* Disable RTM feature */
 #define TSX_CTRL_CPUID_CLEAR           BIT(1)  /* Disable TSX enumeration */
 
+/* SRBDS support */
+#define MSR_IA32_MCU_OPT_CTRL          0x00000123
+#define RNGDS_MITG_DIS                 BIT(0)
+
 #define MSR_IA32_SYSENTER_CS           0x00000174
 #define MSR_IA32_SYSENTER_ESP          0x00000175
 #define MSR_IA32_SYSENTER_EIP          0x00000176
@@ -145,6 +149,10 @@
 
 #define MSR_LBR_SELECT                 0x000001c8
 #define MSR_LBR_TOS                    0x000001c9
+
+#define MSR_IA32_POWER_CTL             0x000001fc
+#define MSR_IA32_POWER_CTL_BIT_EE      19
+
 #define MSR_LBR_NHM_FROM               0x00000680
 #define MSR_LBR_NHM_TO                 0x000006c0
 #define MSR_LBR_CORE_FROM              0x00000040
@@ -154,7 +162,23 @@
 #define LBR_INFO_MISPRED               BIT_ULL(63)
 #define LBR_INFO_IN_TX                 BIT_ULL(62)
 #define LBR_INFO_ABORT                 BIT_ULL(61)
+#define LBR_INFO_CYC_CNT_VALID         BIT_ULL(60)
 #define LBR_INFO_CYCLES                        0xffff
+#define LBR_INFO_BR_TYPE_OFFSET                56
+#define LBR_INFO_BR_TYPE               (0xfull << LBR_INFO_BR_TYPE_OFFSET)
+
+#define MSR_ARCH_LBR_CTL               0x000014ce
+#define ARCH_LBR_CTL_LBREN             BIT(0)
+#define ARCH_LBR_CTL_CPL_OFFSET                1
+#define ARCH_LBR_CTL_CPL               (0x3ull << ARCH_LBR_CTL_CPL_OFFSET)
+#define ARCH_LBR_CTL_STACK_OFFSET      3
+#define ARCH_LBR_CTL_STACK             (0x1ull << ARCH_LBR_CTL_STACK_OFFSET)
+#define ARCH_LBR_CTL_FILTER_OFFSET     16
+#define ARCH_LBR_CTL_FILTER            (0x7full << ARCH_LBR_CTL_FILTER_OFFSET)
+#define MSR_ARCH_LBR_DEPTH             0x000014cf
+#define MSR_ARCH_LBR_FROM_0            0x00001500
+#define MSR_ARCH_LBR_TO_0              0x00001600
+#define MSR_ARCH_LBR_INFO_0            0x00001200
 
 #define MSR_IA32_PEBS_ENABLE           0x000003f1
 #define MSR_PEBS_DATA_CFG              0x000003f2
@@ -233,6 +257,9 @@
 #define MSR_IA32_LASTINTFROMIP         0x000001dd
 #define MSR_IA32_LASTINTTOIP           0x000001de
 
+#define MSR_IA32_PASID                 0x00000d93
+#define MSR_IA32_PASID_VALID           BIT_ULL(31)
+
 /* DEBUGCTLMSR bits (others vary by model): */
 #define DEBUGCTLMSR_LBR                        (1UL <<  0) /* last branch 
recording */
 #define DEBUGCTLMSR_BTF_SHIFT          1
@@ -249,8 +276,6 @@
 
 #define MSR_PEBS_FRONTEND              0x000003f7
 
-#define MSR_IA32_POWER_CTL             0x000001fc
-
 #define MSR_IA32_MC0_CTL               0x00000400
 #define MSR_IA32_MC0_STATUS            0x00000401
 #define MSR_IA32_MC0_ADDR              0x00000402
@@ -301,6 +326,9 @@
 #define MSR_PP1_ENERGY_STATUS          0x00000641
 #define MSR_PP1_POLICY                 0x00000642
 
+#define MSR_AMD_PKG_ENERGY_STATUS      0xc001029b
+#define MSR_AMD_RAPL_POWER_UNIT                0xc0010299
+
 /* Config TDP MSRs */
 #define MSR_CONFIG_TDP_NOMINAL         0x00000648
 #define MSR_CONFIG_TDP_LEVEL_1         0x00000649
@@ -411,7 +439,6 @@
 #define MSR_AMD64_PATCH_LEVEL          0x0000008b
 #define MSR_AMD64_TSC_RATIO            0xc0000104
 #define MSR_AMD64_NB_CFG               0xc001001f
-#define MSR_AMD64_CPUID_FN_1           0xc0011004
 #define MSR_AMD64_PATCH_LOADER         0xc0010020
 #define MSR_AMD_PERF_CTL               0xc0010062
 #define MSR_AMD_PERF_STATUS            0xc0010063
@@ -420,6 +447,7 @@
 #define MSR_AMD64_OSVW_STATUS          0xc0010141
 #define MSR_AMD_PPIN_CTL               0xc00102f0
 #define MSR_AMD_PPIN                   0xc00102f1
+#define MSR_AMD64_CPUID_FN_1           0xc0011004
 #define MSR_AMD64_LS_CFG               0xc0011020
 #define MSR_AMD64_DC_CFG               0xc0011022
 #define MSR_AMD64_BU_CFG2              0xc001102a
@@ -439,11 +467,15 @@
 #define MSR_AMD64_IBSOP_REG_MASK       ((1UL<<MSR_AMD64_IBSOP_REG_COUNT)-1)
 #define MSR_AMD64_IBSCTL               0xc001103a
 #define MSR_AMD64_IBSBRTARGET          0xc001103b
+#define MSR_AMD64_ICIBSEXTDCTL         0xc001103c
 #define MSR_AMD64_IBSOPDATA4           0xc001103d
 #define MSR_AMD64_IBS_REG_COUNT_MAX    8 /* includes MSR_AMD64_IBSBRTARGET */
+#define MSR_AMD64_SEV_ES_GHCB          0xc0010130
 #define MSR_AMD64_SEV                  0xc0010131
 #define MSR_AMD64_SEV_ENABLED_BIT      0
+#define MSR_AMD64_SEV_ES_ENABLED_BIT   1
 #define MSR_AMD64_SEV_ENABLED          BIT_ULL(MSR_AMD64_SEV_ENABLED_BIT)
+#define MSR_AMD64_SEV_ES_ENABLED       BIT_ULL(MSR_AMD64_SEV_ES_ENABLED_BIT)
 
 #define MSR_AMD64_VIRT_SPEC_CTRL       0xc001011f
 
@@ -459,6 +491,8 @@
 #define MSR_F16H_DR0_ADDR_MASK         0xc0011027
 
 /* Fam 15h MSRs */
+#define MSR_F15H_CU_PWR_ACCUMULATOR     0xc001007a
+#define MSR_F15H_CU_MAX_PWR_ACCUMULATOR 0xc001007b
 #define MSR_F15H_PERF_CTL              0xc0010200
 #define MSR_F15H_PERF_CTL0             MSR_F15H_PERF_CTL
 #define MSR_F15H_PERF_CTL1             (MSR_F15H_PERF_CTL + 2)
@@ -830,11 +864,14 @@
 #define MSR_CORE_PERF_FIXED_CTR0       0x00000309
 #define MSR_CORE_PERF_FIXED_CTR1       0x0000030a
 #define MSR_CORE_PERF_FIXED_CTR2       0x0000030b
+#define MSR_CORE_PERF_FIXED_CTR3       0x0000030c
 #define MSR_CORE_PERF_FIXED_CTR_CTRL   0x0000038d
 #define MSR_CORE_PERF_GLOBAL_STATUS    0x0000038e
 #define MSR_CORE_PERF_GLOBAL_CTRL      0x0000038f
 #define MSR_CORE_PERF_GLOBAL_OVF_CTRL  0x00000390
 
+#define MSR_PERF_METRICS               0x00000329
+
 /* PERF_GLOBAL_OVF_CTL bits */
 #define MSR_CORE_PERF_GLOBAL_OVF_CTRL_TRACE_TOPA_PMI_BIT       55
 #define MSR_CORE_PERF_GLOBAL_OVF_CTRL_TRACE_TOPA_PMI           (1ULL << 
MSR_CORE_PERF_GLOBAL_OVF_CTRL_TRACE_TOPA_PMI_BIT)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/turbostat-20.03.20/turbostat.8 
new/turbostat-20.09.30/turbostat.8
--- old/turbostat-20.03.20/turbostat.8  2020-05-18 20:29:21.000000000 +0200
+++ new/turbostat-20.09.30/turbostat.8  2020-11-12 20:06:53.000000000 +0100
@@ -335,7 +335,7 @@
 
 .SH REFERENCES
 Volume 3B: System Programming Guide"
-http://www.intel.com/products/processor/manuals/
+https://www.intel.com/products/processor/manuals/
 
 .SH FILES
 .ta
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/turbostat-20.03.20/turbostat.c 
new/turbostat-20.09.30/turbostat.c
--- old/turbostat-20.03.20/turbostat.c  2020-05-18 20:29:21.000000000 +0200
+++ new/turbostat-20.09.30/turbostat.c  2020-11-12 20:06:53.000000000 +0100
@@ -79,6 +79,7 @@
 unsigned long long cpuidle_cur_cpu_lpi_us;
 unsigned long long cpuidle_cur_sys_lpi_us;
 unsigned int gfx_cur_mhz;
+unsigned int gfx_act_mhz;
 unsigned int tcc_activation_temp;
 unsigned int tcc_activation_temp_override;
 double rapl_power_units, rapl_time_units;
@@ -210,13 +211,14 @@
        unsigned long long pkg_both_core_gfxe_c0;
        long long gfx_rc6_ms;
        unsigned int gfx_mhz;
+       unsigned int gfx_act_mhz;
        unsigned int package_id;
-       unsigned int energy_pkg;        /* MSR_PKG_ENERGY_STATUS */
-       unsigned int energy_dram;       /* MSR_DRAM_ENERGY_STATUS */
-       unsigned int energy_cores;      /* MSR_PP0_ENERGY_STATUS */
-       unsigned int energy_gfx;        /* MSR_PP1_ENERGY_STATUS */
-       unsigned int rapl_pkg_perf_status;      /* MSR_PKG_PERF_STATUS */
-       unsigned int rapl_dram_perf_status;     /* MSR_DRAM_PERF_STATUS */
+       unsigned long long energy_pkg;  /* MSR_PKG_ENERGY_STATUS */
+       unsigned long long energy_dram; /* MSR_DRAM_ENERGY_STATUS */
+       unsigned long long energy_cores;        /* MSR_PP0_ENERGY_STATUS */
+       unsigned long long energy_gfx;  /* MSR_PP1_ENERGY_STATUS */
+       unsigned long long rapl_pkg_perf_status;        /* MSR_PKG_PERF_STATUS 
*/
+       unsigned long long rapl_dram_perf_status;       /* MSR_DRAM_PERF_STATUS 
*/
        unsigned int pkg_temp_c;
        unsigned long long counter[MAX_ADDED_COUNTERS];
 } *package_even, *package_odd;
@@ -259,6 +261,113 @@
 #define        SYSFS_PERCPU    (1 << 1)
 };
 
+/*
+ * The accumulated sum of MSR is defined as a monotonic
+ * increasing MSR, it will be accumulated periodically,
+ * despite its register's bit width.
+ */
+enum {
+       IDX_PKG_ENERGY,
+       IDX_DRAM_ENERGY,
+       IDX_PP0_ENERGY,
+       IDX_PP1_ENERGY,
+       IDX_PKG_PERF,
+       IDX_DRAM_PERF,
+       IDX_COUNT,
+};
+
+int get_msr_sum(int cpu, off_t offset, unsigned long long *msr);
+
+struct msr_sum_array {
+       /* get_msr_sum() = sum + (get_msr() - last) */
+       struct {
+               /*The accumulated MSR value is updated by the timer*/
+               unsigned long long sum;
+               /*The MSR footprint recorded in last timer*/
+               unsigned long long last;
+       } entries[IDX_COUNT];
+};
+
+/* The percpu MSR sum array.*/
+struct msr_sum_array *per_cpu_msr_sum;
+
+int idx_to_offset(int idx)
+{
+       int offset;
+
+       switch (idx) {
+       case IDX_PKG_ENERGY:
+               offset = MSR_PKG_ENERGY_STATUS;
+               break;
+       case IDX_DRAM_ENERGY:
+               offset = MSR_DRAM_ENERGY_STATUS;
+               break;
+       case IDX_PP0_ENERGY:
+               offset = MSR_PP0_ENERGY_STATUS;
+               break;
+       case IDX_PP1_ENERGY:
+               offset = MSR_PP1_ENERGY_STATUS;
+               break;
+       case IDX_PKG_PERF:
+               offset = MSR_PKG_PERF_STATUS;
+               break;
+       case IDX_DRAM_PERF:
+               offset = MSR_DRAM_PERF_STATUS;
+               break;
+       default:
+               offset = -1;
+       }
+       return offset;
+}
+
+int offset_to_idx(int offset)
+{
+       int idx;
+
+       switch (offset) {
+       case MSR_PKG_ENERGY_STATUS:
+               idx = IDX_PKG_ENERGY;
+               break;
+       case MSR_DRAM_ENERGY_STATUS:
+               idx = IDX_DRAM_ENERGY;
+               break;
+       case MSR_PP0_ENERGY_STATUS:
+               idx = IDX_PP0_ENERGY;
+               break;
+       case MSR_PP1_ENERGY_STATUS:
+               idx = IDX_PP1_ENERGY;
+               break;
+       case MSR_PKG_PERF_STATUS:
+               idx = IDX_PKG_PERF;
+               break;
+       case MSR_DRAM_PERF_STATUS:
+               idx = IDX_DRAM_PERF;
+               break;
+       default:
+               idx = -1;
+       }
+       return idx;
+}
+
+int idx_valid(int idx)
+{
+       switch (idx) {
+       case IDX_PKG_ENERGY:
+               return do_rapl & RAPL_PKG;
+       case IDX_DRAM_ENERGY:
+               return do_rapl & RAPL_DRAM;
+       case IDX_PP0_ENERGY:
+               return do_rapl & RAPL_CORES_ENERGY_STATUS;
+       case IDX_PP1_ENERGY:
+               return do_rapl & RAPL_GFX;
+       case IDX_PKG_PERF:
+               return do_rapl & RAPL_PKG_PERF_STATUS;
+       case IDX_DRAM_PERF:
+               return do_rapl & RAPL_DRAM_PERF_STATUS;
+       default:
+               return 0;
+       }
+}
 struct sys_counters {
        unsigned int added_thread_counters;
        unsigned int added_core_counters;
@@ -451,6 +560,7 @@
        { 0x0, "APIC" },
        { 0x0, "X2APIC" },
        { 0x0, "Die" },
+       { 0x0, "GFXAMHz" },
 };
 
 #define MAX_BIC (sizeof(bic) / sizeof(struct msr_counter))
@@ -505,6 +615,7 @@
 #define        BIC_APIC        (1ULL << 48)
 #define        BIC_X2APIC      (1ULL << 49)
 #define        BIC_Die         (1ULL << 50)
+#define        BIC_GFXACTMHz   (1ULL << 51)
 
 #define BIC_DISABLED_BY_DEFAULT        (BIC_USEC | BIC_TOD | BIC_APIC | 
BIC_X2APIC)
 
@@ -724,6 +835,9 @@
        if (DO_BIC(BIC_GFXMHz))
                outp += sprintf(outp, "%sGFXMHz", (printed++ ? delim : ""));
 
+       if (DO_BIC(BIC_GFXACTMHz))
+               outp += sprintf(outp, "%sGFXAMHz", (printed++ ? delim : ""));
+
        if (DO_BIC(BIC_Totl_c0))
                outp += sprintf(outp, "%sTotl%%C0", (printed++ ? delim : ""));
        if (DO_BIC(BIC_Any_c0))
@@ -858,13 +972,13 @@
                outp += sprintf(outp, "pc10: %016llX\n", p->pc10);
                outp += sprintf(outp, "cpu_lpi: %016llX\n", p->cpu_lpi);
                outp += sprintf(outp, "sys_lpi: %016llX\n", p->sys_lpi);
-               outp += sprintf(outp, "Joules PKG: %0X\n", p->energy_pkg);
-               outp += sprintf(outp, "Joules COR: %0X\n", p->energy_cores);
-               outp += sprintf(outp, "Joules GFX: %0X\n", p->energy_gfx);
-               outp += sprintf(outp, "Joules RAM: %0X\n", p->energy_dram);
-               outp += sprintf(outp, "Throttle PKG: %0X\n",
+               outp += sprintf(outp, "Joules PKG: %0llX\n", p->energy_pkg);
+               outp += sprintf(outp, "Joules COR: %0llX\n", p->energy_cores);
+               outp += sprintf(outp, "Joules GFX: %0llX\n", p->energy_gfx);
+               outp += sprintf(outp, "Joules RAM: %0llX\n", p->energy_dram);
+               outp += sprintf(outp, "Throttle PKG: %0llX\n",
                        p->rapl_pkg_perf_status);
-               outp += sprintf(outp, "Throttle RAM: %0X\n",
+               outp += sprintf(outp, "Throttle RAM: %0llX\n",
                        p->rapl_dram_perf_status);
                outp += sprintf(outp, "PTM: %dC\n", p->pkg_temp_c);
 
@@ -1062,14 +1176,7 @@
                }
        }
 
-       /*
-        * If measurement interval exceeds minimum RAPL Joule Counter range,
-        * indicate that results are suspect by printing "**" in fraction place.
-        */
-       if (interval_float < rapl_joule_counter_range)
-               fmt8 = "%s%.2f";
-       else
-               fmt8 = "%6.0f**";
+       fmt8 = "%s%.2f";
 
        if (DO_BIC(BIC_CorWatt) && (do_rapl & RAPL_PER_CORE_ENERGY))
                outp += sprintf(outp, fmt8, (printed++ ? delim : ""), 
c->core_energy * rapl_energy_units / interval_float);
@@ -1098,6 +1205,10 @@
        if (DO_BIC(BIC_GFXMHz))
                outp += sprintf(outp, "%s%d", (printed++ ? delim : ""), 
p->gfx_mhz);
 
+       /* GFXACTMHz */
+       if (DO_BIC(BIC_GFXACTMHz))
+               outp += sprintf(outp, "%s%d", (printed++ ? delim : ""), 
p->gfx_act_mhz);
+
        /* Totl%C0, Any%C0 GFX%C0 CPUGFX% */
        if (DO_BIC(BIC_Totl_c0))
                outp += sprintf(outp, "%s%.2f", (printed++ ? delim : ""), 100.0 
* p->pkg_wtd_core_c0/tsc);
@@ -1210,11 +1321,7 @@
 }
 
 #define DELTA_WRAP32(new, old)                 \
-       if (new > old) {                        \
-               old = new - old;                \
-       } else {                                \
-               old = 0x100000000 + new - old;  \
-       }
+       old = ((((unsigned long long)new << 32) - ((unsigned long long)old << 
32)) >> 32);
 
 int
 delta_package(struct pkg_data *new, struct pkg_data *old)
@@ -1253,13 +1360,14 @@
                old->gfx_rc6_ms = new->gfx_rc6_ms - old->gfx_rc6_ms;
 
        old->gfx_mhz = new->gfx_mhz;
+       old->gfx_act_mhz = new->gfx_act_mhz;
 
-       DELTA_WRAP32(new->energy_pkg, old->energy_pkg);
-       DELTA_WRAP32(new->energy_cores, old->energy_cores);
-       DELTA_WRAP32(new->energy_gfx, old->energy_gfx);
-       DELTA_WRAP32(new->energy_dram, old->energy_dram);
-       DELTA_WRAP32(new->rapl_pkg_perf_status, old->rapl_pkg_perf_status);
-       DELTA_WRAP32(new->rapl_dram_perf_status, old->rapl_dram_perf_status);
+       old->energy_pkg = new->energy_pkg - old->energy_pkg;
+       old->energy_cores = new->energy_cores - old->energy_cores;
+       old->energy_gfx = new->energy_gfx - old->energy_gfx;
+       old->energy_dram = new->energy_dram - old->energy_dram;
+       old->rapl_pkg_perf_status = new->rapl_pkg_perf_status - 
old->rapl_pkg_perf_status;
+       old->rapl_dram_perf_status = new->rapl_dram_perf_status - 
old->rapl_dram_perf_status;
 
        for (i = 0, mp = sys.pp; mp; i++, mp = mp->next) {
                if (mp->format == FORMAT_RAW)
@@ -1469,6 +1577,7 @@
 
        p->gfx_rc6_ms = 0;
        p->gfx_mhz = 0;
+       p->gfx_act_mhz = 0;
        for (i = 0, mp = sys.tp; mp; i++, mp = mp->next)
                t->counter[i] = 0;
 
@@ -1564,6 +1673,7 @@
 
        average.packages.gfx_rc6_ms = p->gfx_rc6_ms;
        average.packages.gfx_mhz = p->gfx_mhz;
+       average.packages.gfx_act_mhz = p->gfx_act_mhz;
 
        average.packages.pkg_temp_c = MAX(average.packages.pkg_temp_c, 
p->pkg_temp_c);
 
@@ -1784,7 +1894,7 @@
        int i;
 
        if (cpu_migrate(cpu)) {
-               fprintf(outf, "Could not migrate to CPU %d\n", cpu);
+               fprintf(outf, "get_counters: Could not migrate to CPU %d\n", 
cpu);
                return -1;
        }
 
@@ -1966,39 +2076,39 @@
                p->sys_lpi = cpuidle_cur_sys_lpi_us;
 
        if (do_rapl & RAPL_PKG) {
-               if (get_msr(cpu, MSR_PKG_ENERGY_STATUS, &msr))
+               if (get_msr_sum(cpu, MSR_PKG_ENERGY_STATUS, &msr))
                        return -13;
-               p->energy_pkg = msr & 0xFFFFFFFF;
+               p->energy_pkg = msr;
        }
        if (do_rapl & RAPL_CORES_ENERGY_STATUS) {
-               if (get_msr(cpu, MSR_PP0_ENERGY_STATUS, &msr))
+               if (get_msr_sum(cpu, MSR_PP0_ENERGY_STATUS, &msr))
                        return -14;
-               p->energy_cores = msr & 0xFFFFFFFF;
+               p->energy_cores = msr;
        }
        if (do_rapl & RAPL_DRAM) {
-               if (get_msr(cpu, MSR_DRAM_ENERGY_STATUS, &msr))
+               if (get_msr_sum(cpu, MSR_DRAM_ENERGY_STATUS, &msr))
                        return -15;
-               p->energy_dram = msr & 0xFFFFFFFF;
+               p->energy_dram = msr;
        }
        if (do_rapl & RAPL_GFX) {
-               if (get_msr(cpu, MSR_PP1_ENERGY_STATUS, &msr))
+               if (get_msr_sum(cpu, MSR_PP1_ENERGY_STATUS, &msr))
                        return -16;
-               p->energy_gfx = msr & 0xFFFFFFFF;
+               p->energy_gfx = msr;
        }
        if (do_rapl & RAPL_PKG_PERF_STATUS) {
-               if (get_msr(cpu, MSR_PKG_PERF_STATUS, &msr))
+               if (get_msr_sum(cpu, MSR_PKG_PERF_STATUS, &msr))
                        return -16;
-               p->rapl_pkg_perf_status = msr & 0xFFFFFFFF;
+               p->rapl_pkg_perf_status = msr;
        }
        if (do_rapl & RAPL_DRAM_PERF_STATUS) {
-               if (get_msr(cpu, MSR_DRAM_PERF_STATUS, &msr))
+               if (get_msr_sum(cpu, MSR_DRAM_PERF_STATUS, &msr))
                        return -16;
-               p->rapl_dram_perf_status = msr & 0xFFFFFFFF;
+               p->rapl_dram_perf_status = msr;
        }
        if (do_rapl & RAPL_AMD_F17H) {
-               if (get_msr(cpu, MSR_PKG_ENERGY_STAT, &msr))
+               if (get_msr_sum(cpu, MSR_PKG_ENERGY_STAT, &msr))
                        return -13;
-               p->energy_pkg = msr & 0xFFFFFFFF;
+               p->energy_pkg = msr;
        }
        if (DO_BIC(BIC_PkgTmp)) {
                if (get_msr(cpu, MSR_IA32_PACKAGE_THERM_STATUS, &msr))
@@ -2012,6 +2122,9 @@
        if (DO_BIC(BIC_GFXMHz))
                p->gfx_mhz = gfx_cur_mhz;
 
+       if (DO_BIC(BIC_GFXACTMHz))
+               p->gfx_act_mhz = gfx_act_mhz;
+
        for (i = 0, mp = sys.pp; mp; i++, mp = mp->next) {
                if (get_mp(cpu, mp, &p->counter[i]))
                        return -10;
@@ -2173,6 +2286,7 @@
        case INTEL_FAM6_ATOM_GOLDMONT:
        case INTEL_FAM6_SKYLAKE_X:
        case INTEL_FAM6_ATOM_GOLDMONT_D:
+       case INTEL_FAM6_ATOM_TREMONT_D:
                return 1;
        }
        return 0;
@@ -2650,7 +2764,12 @@
 
        sprintf(path,
                "/sys/devices/system/cpu/cpu%d/topology/thread_siblings", cpu);
-       filep = fopen_or_die(path, "r");
+       filep = fopen(path, "r");
+
+       if (!filep) {
+               warnx("%s: open failed", path);
+               return -1;
+       }
        do {
                offset -= BITMASK_SIZE;
                if (fscanf(filep, "%lx%c", &map, &character) != 2)
@@ -2763,18 +2882,25 @@
 {
        free_all_buffers();
        setup_all_buffers();
-       printf("turbostat: re-initialized with num_cpus %d\n", topo.num_cpus);
+       fprintf(outf, "turbostat: re-initialized with num_cpus %d\n", 
topo.num_cpus);
 }
 
 void set_max_cpu_num(void)
 {
        FILE *filep;
+       int base_cpu;
        unsigned long dummy;
+       char pathname[64];
 
+       base_cpu = sched_getcpu();
+       if (base_cpu < 0)
+               err(1, "cannot find calling cpu ID");
+       sprintf(pathname,
+               "/sys/devices/system/cpu/cpu%d/topology/thread_siblings",
+               base_cpu);
+
+       filep = fopen_or_die(pathname, "r");
        topo.max_cpu_num = 0;
-       filep = fopen_or_die(
-                       "/sys/devices/system/cpu/cpu0/topology/thread_siblings",
-                       "r");
        while (fscanf(filep, "%lx,", &dummy) == 1)
                topo.max_cpu_num += BITMASK_SIZE;
        fclose(filep);
@@ -2916,6 +3042,33 @@
 }
 
 /*
+ * snapshot_gfx_cur_mhz()
+ *
+ * record snapshot of
+ * /sys/class/graphics/fb0/device/drm/card0/gt_act_freq_mhz
+ *
+ * return 1 if config change requires a restart, else return 0
+ */
+int snapshot_gfx_act_mhz(void)
+{
+       static FILE *fp;
+       int retval;
+
+       if (fp == NULL)
+               fp = 
fopen_or_die("/sys/class/graphics/fb0/device/drm/card0/gt_act_freq_mhz", "r");
+       else {
+               rewind(fp);
+               fflush(fp);
+       }
+
+       retval = fscanf(fp, "%d", &gfx_act_mhz);
+       if (retval != 1)
+               err(1, "GFX ACT MHz");
+
+       return 0;
+}
+
+/*
  * snapshot_cpu_lpi()
  *
  * record snapshot of
@@ -2980,6 +3133,9 @@
        if (DO_BIC(BIC_GFXMHz))
                snapshot_gfx_mhz();
 
+       if (DO_BIC(BIC_GFXACTMHz))
+               snapshot_gfx_act_mhz();
+
        if (DO_BIC(BIC_CPU_LPI))
                snapshot_cpu_lpi_us();
 
@@ -3057,6 +3213,111 @@
        }
 }
 
+int get_msr_sum(int cpu, off_t offset, unsigned long long *msr)
+{
+       int ret, idx;
+       unsigned long long msr_cur, msr_last;
+
+       if (!per_cpu_msr_sum)
+               return 1;
+
+       idx = offset_to_idx(offset);
+       if (idx < 0)
+               return idx;
+       /* get_msr_sum() = sum + (get_msr() - last) */
+       ret = get_msr(cpu, offset, &msr_cur);
+       if (ret)
+               return ret;
+       msr_last = per_cpu_msr_sum[cpu].entries[idx].last;
+       DELTA_WRAP32(msr_cur, msr_last);
+       *msr = msr_last + per_cpu_msr_sum[cpu].entries[idx].sum;
+
+       return 0;
+}
+
+timer_t timerid;
+
+/* Timer callback, update the sum of MSRs periodically. */
+static int update_msr_sum(struct thread_data *t, struct core_data *c, struct 
pkg_data *p)
+{
+       int i, ret;
+       int cpu = t->cpu_id;
+
+       for (i = IDX_PKG_ENERGY; i < IDX_COUNT; i++) {
+               unsigned long long msr_cur, msr_last;
+               int offset;
+
+               if (!idx_valid(i))
+                       continue;
+               offset = idx_to_offset(i);
+               if (offset < 0)
+                       continue;
+               ret = get_msr(cpu, offset, &msr_cur);
+               if (ret) {
+                       fprintf(outf, "Can not update msr(0x%x)\n", offset);
+                       continue;
+               }
+
+               msr_last = per_cpu_msr_sum[cpu].entries[i].last;
+               per_cpu_msr_sum[cpu].entries[i].last = msr_cur & 0xffffffff;
+
+               DELTA_WRAP32(msr_cur, msr_last);
+               per_cpu_msr_sum[cpu].entries[i].sum += msr_last;
+       }
+       return 0;
+}
+
+static void
+msr_record_handler(union sigval v)
+{
+       for_all_cpus(update_msr_sum, EVEN_COUNTERS);
+}
+
+void msr_sum_record(void)
+{
+       struct itimerspec its;
+       struct sigevent sev;
+
+       per_cpu_msr_sum = calloc(topo.max_cpu_num + 1, sizeof(struct 
msr_sum_array));
+       if (!per_cpu_msr_sum) {
+               fprintf(outf, "Can not allocate memory for long time MSR.\n");
+               return;
+       }
+       /*
+        * Signal handler might be restricted, so use thread notifier instead.
+        */
+       memset(&sev, 0, sizeof(struct sigevent));
+       sev.sigev_notify = SIGEV_THREAD;
+       sev.sigev_notify_function = msr_record_handler;
+
+       sev.sigev_value.sival_ptr = &timerid;
+       if (timer_create(CLOCK_REALTIME, &sev, &timerid) == -1) {
+               fprintf(outf, "Can not create timer.\n");
+               goto release_msr;
+       }
+
+       its.it_value.tv_sec = 0;
+       its.it_value.tv_nsec = 1;
+       /*
+        * A wraparound time has been calculated early.
+        * Some sources state that the peak power for a
+        * microprocessor is usually 1.5 times the TDP rating,
+        * use 2 * TDP for safety.
+        */
+       its.it_interval.tv_sec = rapl_joule_counter_range / 2;
+       its.it_interval.tv_nsec = 0;
+
+       if (timer_settime(timerid, 0, &its, NULL) == -1) {
+               fprintf(outf, "Can not set timer.\n");
+               goto release_timer;
+       }
+       return;
+
+ release_timer:
+       timer_delete(timerid);
+ release_msr:
+       free(per_cpu_msr_sum);
+}
 
 void turbostat_loop()
 {
@@ -3075,7 +3336,7 @@
        if (retval < -1) {
                exit(retval);
        } else if (retval == -1) {
-               if (restarted > 1) {
+               if (restarted > 10) {
                        exit(retval);
                }
                re_initialize();
@@ -3279,6 +3540,7 @@
        case INTEL_FAM6_ATOM_GOLDMONT_PLUS:
        case INTEL_FAM6_ATOM_GOLDMONT_D:        /* DNV */
        case INTEL_FAM6_ATOM_TREMONT:   /* EHL */
+       case INTEL_FAM6_ATOM_TREMONT_D: /* JVL */
                pkg_cstate_limits = glm_pkg_cstate_limits;
                break;
        default:
@@ -3361,6 +3623,17 @@
        }
        return 0;
 }
+int is_jvl(unsigned int family, unsigned int model)
+{
+       if (!genuine_intel)
+               return 0;
+
+       switch (model) {
+       case INTEL_FAM6_ATOM_TREMONT_D:
+               return 1;
+       }
+       return 0;
+}
 
 int has_turbo_ratio_limit(unsigned int family, unsigned int model)
 {
@@ -3475,6 +3748,20 @@
 }
 
 static void
+remove_underbar(char *s)
+{
+       char *to = s;
+
+       while (*s) {
+               if (*s != '_')
+                       *to++ = *s;
+               s++;
+       }
+
+       *to = 0;
+}
+
+static void
 dump_cstate_pstate_config_info(unsigned int family, unsigned int model)
 {
        if (!do_nhm_platform_info)
@@ -3530,9 +3817,6 @@
        int state;
        char *sp;
 
-       if (!DO_BIC(BIC_sysfs))
-               return;
-
        if (access("/sys/devices/system/cpu/cpuidle", R_OK)) {
                fprintf(outf, "cpuidle not loaded\n");
                return;
@@ -3559,6 +3843,8 @@
                *sp = '\0';
                fclose(input);
 
+               remove_underbar(name_buf);
+
                sprintf(path, 
"/sys/devices/system/cpu/cpu%d/cpuidle/state%d/desc",
                        base_cpu, state);
                input = fopen(path, "r");
@@ -3645,7 +3931,7 @@
                return 0;
 
        if (cpu_migrate(cpu)) {
-               fprintf(outf, "Could not migrate to CPU %d\n", cpu);
+               fprintf(outf, "print_epb: Could not migrate to CPU %d\n", cpu);
                return -1;
        }
 
@@ -3689,7 +3975,7 @@
                return 0;
 
        if (cpu_migrate(cpu)) {
-               fprintf(outf, "Could not migrate to CPU %d\n", cpu);
+               fprintf(outf, "print_hwp: Could not migrate to CPU %d\n", cpu);
                return -1;
        }
 
@@ -3777,7 +4063,7 @@
                return 0;
 
        if (cpu_migrate(cpu)) {
-               fprintf(outf, "Could not migrate to CPU %d\n", cpu);
+               fprintf(outf, "print_perf_limit: Could not migrate to CPU 
%d\n", cpu);
                return -1;
        }
 
@@ -3881,13 +4167,8 @@
 
 double get_tdp_amd(unsigned int family)
 {
-       switch (family) {
-       case 0x17:
-       case 0x18:
-       default:
-               /* This is the max stock TDP of HEDT/Server Fam17h chips */
-               return 250.0;
-       }
+       /* This is the max stock TDP of HEDT/Server Fam17h+ chips */
+       return 280.0;
 }
 
 /*
@@ -3959,6 +4240,14 @@
                        BIC_PRESENT(BIC_GFXWatt);
                }
                break;
+       case INTEL_FAM6_ATOM_TREMONT_D: /* JVL */
+               do_rapl = RAPL_PKG | RAPL_PKG_PERF_STATUS | RAPL_PKG_POWER_INFO;
+               BIC_PRESENT(BIC_PKG__);
+               if (rapl_joules)
+                       BIC_PRESENT(BIC_Pkg_J);
+               else
+                       BIC_PRESENT(BIC_PkgWatt);
+               break;
        case INTEL_FAM6_SKYLAKE_L:      /* SKL */
        case INTEL_FAM6_CANNONLAKE_L:   /* CNL */
                do_rapl = RAPL_PKG | RAPL_CORES | RAPL_CORE_POLICY | RAPL_DRAM 
| RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_GFX | RAPL_PKG_POWER_INFO;
@@ -4069,27 +4358,20 @@
 
        if (max_extended_level >= 0x80000007) {
                __cpuid(0x80000007, eax, ebx, ecx, edx);
-               /* RAPL (Fam 17h) */
+               /* RAPL (Fam 17h+) */
                has_rapl = edx & (1 << 14);
        }
 
-       if (!has_rapl)
+       if (!has_rapl || family < 0x17)
                return;
 
-       switch (family) {
-       case 0x17: /* Zen, Zen+ */
-       case 0x18: /* Hygon Dhyana */
-               do_rapl = RAPL_AMD_F17H | RAPL_PER_CORE_ENERGY;
-               if (rapl_joules) {
-                       BIC_PRESENT(BIC_Pkg_J);
-                       BIC_PRESENT(BIC_Cor_J);
-               } else {
-                       BIC_PRESENT(BIC_PkgWatt);
-                       BIC_PRESENT(BIC_CorWatt);
-               }
-               break;
-       default:
-               return;
+       do_rapl = RAPL_AMD_F17H | RAPL_PER_CORE_ENERGY;
+       if (rapl_joules) {
+               BIC_PRESENT(BIC_Pkg_J);
+               BIC_PRESENT(BIC_Cor_J);
+       } else {
+               BIC_PRESENT(BIC_PkgWatt);
+               BIC_PRESENT(BIC_CorWatt);
        }
 
        if (get_msr(base_cpu, MSR_RAPL_PWR_UNIT, &msr))
@@ -4162,7 +4444,7 @@
                return 0;
 
        if (cpu_migrate(cpu)) {
-               fprintf(outf, "Could not migrate to CPU %d\n", cpu);
+               fprintf(outf, "print_thermal: Could not migrate to CPU %d\n", 
cpu);
                return -1;
        }
 
@@ -4234,7 +4516,7 @@
 
        cpu = t->cpu_id;
        if (cpu_migrate(cpu)) {
-               fprintf(outf, "Could not migrate to CPU %d\n", cpu);
+               fprintf(outf, "print_rapl: Could not migrate to CPU %d\n", cpu);
                return -1;
        }
 
@@ -4361,6 +4643,7 @@
        case INTEL_FAM6_ATOM_GOLDMONT_PLUS:
        case INTEL_FAM6_ATOM_GOLDMONT_D:        /* DNV */
        case INTEL_FAM6_ATOM_TREMONT:           /* EHL */
+       case INTEL_FAM6_ATOM_TREMONT_D:         /* JVL */
                return 1;
        }
        return 0;
@@ -4507,12 +4790,33 @@
  * below this value, including the Digital Thermal Sensor (DTS),
  * Package Thermal Management Sensor (PTM), and thermal event thresholds.
  */
-int set_temperature_target(struct thread_data *t, struct core_data *c, struct 
pkg_data *p)
+int read_tcc_activation_temp()
 {
        unsigned long long msr;
-       unsigned int target_c_local;
-       int cpu;
+       unsigned int tcc, target_c, offset_c;
+
+       /* Temperature Target MSR is Nehalem and newer only */
+       if (!do_nhm_platform_info)
+               return 0;
+
+       if (get_msr(base_cpu, MSR_IA32_TEMPERATURE_TARGET, &msr))
+               return 0;
+
+       target_c = (msr >> 16) & 0xFF;
+
+       offset_c = (msr >> 24) & 0xF;
+
+       tcc = target_c - offset_c;
+
+       if (!quiet)
+               fprintf(outf, "cpu%d: MSR_IA32_TEMPERATURE_TARGET: 0x%08llx (%d 
C) (%d default - %d offset)\n",
+                       base_cpu, msr, tcc, target_c, offset_c);
 
+       return tcc;
+}
+
+int set_temperature_target(struct thread_data *t, struct core_data *c, struct 
pkg_data *p)
+{
        /* tcc_activation_temp is used only for dts or ptm */
        if (!(do_dts || do_ptm))
                return 0;
@@ -4521,43 +4825,18 @@
        if (!(t->flags & CPU_IS_FIRST_THREAD_IN_CORE) || !(t->flags & 
CPU_IS_FIRST_CORE_IN_PACKAGE))
                return 0;
 
-       cpu = t->cpu_id;
-       if (cpu_migrate(cpu)) {
-               fprintf(outf, "Could not migrate to CPU %d\n", cpu);
-               return -1;
-       }
-
        if (tcc_activation_temp_override != 0) {
                tcc_activation_temp = tcc_activation_temp_override;
-               fprintf(outf, "cpu%d: Using cmdline TCC Target (%d C)\n",
-                       cpu, tcc_activation_temp);
+               fprintf(outf, "Using cmdline TCC Target (%d C)\n", 
tcc_activation_temp);
                return 0;
        }
 
-       /* Temperature Target MSR is Nehalem and newer only */
-       if (!do_nhm_platform_info)
-               goto guess;
-
-       if (get_msr(base_cpu, MSR_IA32_TEMPERATURE_TARGET, &msr))
-               goto guess;
-
-       target_c_local = (msr >> 16) & 0xFF;
-
-       if (!quiet)
-               fprintf(outf, "cpu%d: MSR_IA32_TEMPERATURE_TARGET: 0x%08llx (%d 
C)\n",
-                       cpu, msr, target_c_local);
-
-       if (!target_c_local)
-               goto guess;
-
-       tcc_activation_temp = target_c_local;
-
-       return 0;
+       tcc_activation_temp = read_tcc_activation_temp();
+       if (tcc_activation_temp)
+               return 0;
 
-guess:
        tcc_activation_temp = TJMAX_DEFAULT;
-       fprintf(outf, "cpu%d: Guessing tjMax %d C, Please use -T to specify\n",
-               cpu, tcc_activation_temp);
+       fprintf(outf, "Guessing tjMax %d C, Please use -T to specify\n", 
tcc_activation_temp);
 
        return 0;
 }
@@ -4685,19 +4964,46 @@
        case INTEL_FAM6_ICELAKE_NNPI:
        case INTEL_FAM6_TIGERLAKE_L:
        case INTEL_FAM6_TIGERLAKE:
+       case INTEL_FAM6_ROCKETLAKE:
+       case INTEL_FAM6_LAKEFIELD:
+       case INTEL_FAM6_ALDERLAKE:
                return INTEL_FAM6_CANNONLAKE_L;
 
-       case INTEL_FAM6_ATOM_TREMONT_D:
-               return INTEL_FAM6_ATOM_GOLDMONT_D;
-
        case INTEL_FAM6_ATOM_TREMONT_L:
                return INTEL_FAM6_ATOM_TREMONT;
 
        case INTEL_FAM6_ICELAKE_X:
+       case INTEL_FAM6_SAPPHIRERAPIDS_X:
                return INTEL_FAM6_SKYLAKE_X;
        }
        return model;
 }
+
+void print_dev_latency(void)
+{
+       char *path = "/dev/cpu_dma_latency";
+       int fd;
+       int value;
+       int retval;
+
+       fd = open(path, O_RDONLY);
+       if (fd < 0) {
+               warn("fopen %s\n", path);
+               return;
+       }
+
+       retval = read(fd, (void *)&value, sizeof(int));
+       if (retval != sizeof(int)) {
+               warn("read %s\n", path);
+               close(fd);
+               return;
+       }
+       fprintf(outf, "/dev/cpu_dma_latency: %d usec (%s)\n",
+               value, value == 2000000000 ? "default" : "constrained");
+
+       close(fd);
+}
+
 void process_cpuid()
 {
        unsigned int eax, ebx, ecx, edx;
@@ -4916,6 +5222,14 @@
                BIC_PRESENT(BIC_Mod_c6);
                use_c1_residency_msr = 1;
        }
+       if (is_jvl(family, model)) {
+               BIC_NOT_PRESENT(BIC_CPU_c3);
+               BIC_NOT_PRESENT(BIC_CPU_c7);
+               BIC_NOT_PRESENT(BIC_Pkgpc2);
+               BIC_NOT_PRESENT(BIC_Pkgpc3);
+               BIC_NOT_PRESENT(BIC_Pkgpc6);
+               BIC_NOT_PRESENT(BIC_Pkgpc7);
+       }
        if (is_dnv(family, model)) {
                BIC_PRESENT(BIC_CPU_c1);
                BIC_NOT_PRESENT(BIC_CPU_c3);
@@ -4935,9 +5249,12 @@
                BIC_NOT_PRESENT(BIC_Pkgpc7);
        }
        if (has_c8910_msrs(family, model)) {
-               BIC_PRESENT(BIC_Pkgpc8);
-               BIC_PRESENT(BIC_Pkgpc9);
-               BIC_PRESENT(BIC_Pkgpc10);
+               if (pkg_cstate_limit >= PCL__8)
+                       BIC_PRESENT(BIC_Pkgpc8);
+               if (pkg_cstate_limit >= PCL__9)
+                       BIC_PRESENT(BIC_Pkgpc9);
+               if (pkg_cstate_limit >= PCL_10)
+                       BIC_PRESENT(BIC_Pkgpc10);
        }
        do_irtl_hsw = has_c8910_msrs(family, model);
        if (has_skl_msrs(family, model)) {
@@ -4967,6 +5284,8 @@
                dump_cstate_pstate_config_info(family, model);
 
        if (!quiet)
+               print_dev_latency();
+       if (!quiet)
                dump_sysfs_cstate_config();
        if (!quiet)
                dump_sysfs_pstate_config();
@@ -4980,6 +5299,9 @@
        if (!access("/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz", 
R_OK))
                BIC_PRESENT(BIC_GFXMHz);
 
+       if (!access("/sys/class/graphics/fb0/device/drm/card0/gt_act_freq_mhz", 
R_OK))
+               BIC_PRESENT(BIC_GFXACTMHz);
+
        if 
(!access("/sys/devices/system/cpu/cpuidle/low_power_idle_cpu_residency_us", 
R_OK))
                BIC_PRESENT(BIC_CPU_LPI);
        else
@@ -5390,7 +5712,7 @@
 }
 
 void print_version() {
-       fprintf(outf, "turbostat version 20.03.20"
+       fprintf(outf, "turbostat version 20.09.30"
                " - Len Brown <[email protected]>\n");
 }
 
@@ -5597,6 +5919,8 @@
                *sp = '%';
                *(sp + 1) = '\0';
 
+               remove_underbar(name_buf);
+
                fclose(input);
 
                sprintf(path, "cpuidle/state%d/time", state);
@@ -5624,6 +5948,8 @@
                *sp = '\0';
                fclose(input);
 
+               remove_underbar(name_buf);
+
                sprintf(path, "cpuidle/state%d/usage", state);
 
                if (is_deferred_skip(name_buf))
@@ -5868,6 +6194,7 @@
                return 0;
        }
 
+       msr_sum_record();
        /*
         * if any params left, it must be a command to fork
         */

++++++ turbostat_makefile_fix_asm_header.patch ++++++
--- /var/tmp/diff_new_pack.od7lYI/_old  2020-11-23 10:24:37.716965865 +0100
+++ /var/tmp/diff_new_pack.od7lYI/_new  2020-11-23 10:24:37.716965865 +0100
@@ -1,8 +1,10 @@
-Index: turbostat-19.08.31/Makefile
-===================================================================
---- turbostat-19.08.31.orig/Makefile   2019-10-29 15:23:56.962276473 +0100
-+++ turbostat-19.08.31/Makefile        2019-10-29 16:12:52.926434670 +0100
-@@ -9,9 +9,9 @@ ifeq ("$(origin O)", "command line")
+---
+ Makefile |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/Makefile
++++ b/Makefile
+@@ -9,9 +9,9 @@
  endif
  
  turbostat : turbostat.c
@@ -12,6 +14,6 @@
 +override CFLAGS +=    -O2 -Wall -I ./include
 +override CFLAGS +=    -DMSRHEADER='"msr-index.h"'
 +override CFLAGS +=    -DINTEL_FAMILY_HEADER='"intel-family.h"'
+ override CFLAGS +=    -D_FILE_OFFSET_BITS=64
  override CFLAGS +=    -D_FORTIFY_SOURCE=2
  
- %: %.c
_______________________________________________
openSUSE Commits mailing list -- [email protected]
To unsubscribe, email [email protected]
List Netiquette: https://en.opensuse.org/openSUSE:Mailing_list_netiquette
List Archives: 
https://lists.opensuse.org/archives/list/[email protected]

Reply via email to