diff --git a/SOURCES/redhat-bz-1755069.patch b/SOURCES/redhat-bz-1755069.patch new file mode 100644 index 0000000..1395997 --- /dev/null +++ b/SOURCES/redhat-bz-1755069.patch @@ -0,0 +1,1276 @@ +diff -Naurp pcp-4.3.2.orig/qa/886 pcp-4.3.2/qa/886 +--- pcp-4.3.2.orig/qa/886 2017-11-30 12:48:48.000000000 +1100 ++++ pcp-4.3.2/qa/886 2020-03-12 07:54:15.588909738 +1100 +@@ -2,7 +2,7 @@ + # PCP QA Test No. 886 + # Verify /proc/interrupts parsing for various architectures. + # +-# Copyright (c) 2016 Red Hat. ++# Copyright (c) 2016,2019 Red Hat. + # + + seq=`basename $0` +@@ -15,6 +15,10 @@ echo "QA output created by $seq" + + [ $PCP_PLATFORM = linux ] || _notrun "Linux interrupts test, only works with Linux" + ++# expected output is very large, compressed to save space in repo ++$sudo rm -f $seq.out ++bunzip2 < $seq.out.bz2 > $seq.out ++ + status=1 # failure is the default! + $sudo rm -rf $tmp.* $seq.full + +@@ -30,6 +34,23 @@ _cleanup() + + trap "_cleanup; exit \$status" 0 1 2 3 15 + ++_unpack() ++{ ++ qafile=$1 ++ target=$2 ++ suffix=`echo "$file" | sed 's/.*\.//'` ++ ++ if [ "$suffix" == "bz2" ] ++ then ++ bunzip2 < "$qafile" > "$target" ++ elif [ "$suffix" == "gz" ] ++ then ++ gunzip < "$qafile" > "$target" ++ else ++ cp "$qafile" "$target" ++ fi ++} ++ + # real QA test starts here + root=$tmp.root + export LINUX_STATSPATH=$root +@@ -53,7 +74,7 @@ do + rm -fr $root + mkdir -p $root/proc || _fail "root in use when processing $file" + +- cp $file $root/proc/interrupts ++ _unpack $file $root/proc/interrupts + base=`basename $file` + ncpu=`echo $base | sed -e 's/.*-\([0-9][0-9]*\)cpu-.*/\1/'` + _make_proc_stat $root/proc/stat $ncpu +@@ -73,7 +94,7 @@ do + rm -fr $root + mkdir -p $root/proc || _fail "root in use when processing $file" + +- cp $file $root/proc/softirqs ++ _unpack $file $root/proc/softirqs + base=`basename $file` + ncpu=`echo $base | sed -e 's/.*-\([0-9][0-9]*\)cpu-.*/\1/'` + _make_proc_stat $root/proc/stat $ncpu +diff -Naurp pcp-4.3.2.orig/qa/886.out pcp-4.3.2/qa/886.out +--- pcp-4.3.2.orig/qa/886.out 2018-11-19 18:42:22.000000000 +1100 ++++ pcp-4.3.2/qa/886.out 1970-01-01 10:00:00.000000000 +1000 +@@ -1,968 +0,0 @@ +-QA output created by 886 +-== Checking interrupts metrics from interrupts-1cpu-i686 (1 CPU) +- +-kernel.percpu.intr +- inst [0 or "cpu0"] value 7538223 +- +-kernel.percpu.interrupts.PIW +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.NPI +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.PIN +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.MIS +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.ERR +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.HVS +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.HRE +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.HYP +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.MCP +- inst [0 or "cpu0"] value 276 +- +-kernel.percpu.interrupts.MCE +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.DFR +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.THR +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.TRM +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.TLB +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.CAL +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.RES +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.RTR +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.IWI +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.PMI +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.SPU +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.LOC +- inst [0 or "cpu0"] value 6651207 +- +-kernel.percpu.interrupts.NMI +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.line25 +- inst [0 or "cpu0"] value 234 +- +-kernel.percpu.interrupts.line24 +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.line15 +- inst [0 or "cpu0"] value 578269 +- +-kernel.percpu.interrupts.line14 +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.line12 +- inst [0 or "cpu0"] value 1080 +- +-kernel.percpu.interrupts.line11 +- inst [0 or "cpu0"] value 307009 +- +-kernel.percpu.interrupts.line10 +- inst [0 or "cpu0"] value 130 +- +-kernel.percpu.interrupts.line9 +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.line8 +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.interrupts.line1 +- inst [0 or "cpu0"] value 9 +- +-kernel.percpu.interrupts.line0 +- inst [0 or "cpu0"] value 9 +- +-== done +- +-== Checking interrupts helptext from interrupts-1cpu-i686 (1 CPU) +- +-kernel.percpu.intr [interrupt count metric from /proc/interrupts] +-Help: +-Aggregate count of each CPUs interrupt processing count, calculated +-as the sum of all interrupt types in /proc/interrupts for each CPU. +- +-kernel.percpu.interrupts.PIW [Posted-interrupt wakeup event] +-Help: +-Posted-interrupt wakeup event +- +-kernel.percpu.interrupts.NPI [Nested posted-interrupt event] +-Help: +-Nested posted-interrupt event +- +-kernel.percpu.interrupts.PIN [Posted-interrupt notification event] +-Help: +-Posted-interrupt notification event +- +-kernel.percpu.interrupts.MIS One-line Help: Error: One-line or help text is not available +-Full Help: Error: One-line or help text is not available +- +-kernel.percpu.interrupts.ERR One-line Help: Error: One-line or help text is not available +-Full Help: Error: One-line or help text is not available +- +-kernel.percpu.interrupts.HVS [Hyper-V stimer0 interrupts] +-Help: +-Hyper-V stimer0 interrupts +- +-kernel.percpu.interrupts.HRE [Hyper-V reenlightenment interrupts] +-Help: +-Hyper-V reenlightenment interrupts +- +-kernel.percpu.interrupts.HYP [Hypervisor callback interrupts] +-Help: +-Hypervisor callback interrupts +- +-kernel.percpu.interrupts.MCP [Machine check polls] +-Help: +-Machine check polls +- +-kernel.percpu.interrupts.MCE [Machine check exceptions] +-Help: +-Machine check exceptions +- +-kernel.percpu.interrupts.DFR [Deferred Error APIC interrupts] +-Help: +-Deferred Error APIC interrupts +- +-kernel.percpu.interrupts.THR [Threshold APIC interrupts] +-Help: +-Threshold APIC interrupts +- +-kernel.percpu.interrupts.TRM [Thermal event interrupts] +-Help: +-Thermal event interrupts +- +-kernel.percpu.interrupts.TLB [TLB shootdowns] +-Help: +-TLB shootdowns +- +-kernel.percpu.interrupts.CAL [Function call interrupts] +-Help: +-Function call interrupts +- +-kernel.percpu.interrupts.RES [Rescheduling interrupts] +-Help: +-Rescheduling interrupts +- +-kernel.percpu.interrupts.RTR [APIC ICR read retries] +-Help: +-APIC ICR read retries +- +-kernel.percpu.interrupts.IWI [IRQ work interrupts] +-Help: +-IRQ work interrupts +- +-kernel.percpu.interrupts.PMI [Performance monitoring interrupts] +-Help: +-Performance monitoring interrupts +- +-kernel.percpu.interrupts.SPU [Spurious interrupts] +-Help: +-Spurious interrupts +- +-kernel.percpu.interrupts.LOC [Local timer interrupts] +-Help: +-Local timer interrupts +- +-kernel.percpu.interrupts.NMI [Non-maskable interrupts] +-Help: +-Non-maskable interrupts +- +-kernel.percpu.interrupts.line25 [PCI-MSI 65536-edge snd_hda_intel:card0] +-Help: +-PCI-MSI 65536-edge snd_hda_intel:card0 +- +-kernel.percpu.interrupts.line24 [PCI-MSI 81920-edge ahci[0000:00:05.0]] +-Help: +-PCI-MSI 81920-edge ahci[0000:00:05.0] +- +-kernel.percpu.interrupts.line15 [IO-APIC 15-edge ata_piix] +-Help: +-IO-APIC 15-edge ata_piix +- +-kernel.percpu.interrupts.line14 [IO-APIC 14-edge ata_piix] +-Help: +-IO-APIC 14-edge ata_piix +- +-kernel.percpu.interrupts.line12 [IO-APIC 12-edge i8042] +-Help: +-IO-APIC 12-edge i8042 +- +-kernel.percpu.interrupts.line11 [IO-APIC 11-fasteoi uhci_hcd:usb1, ens3] +-Help: +-IO-APIC 11-fasteoi uhci_hcd:usb1, ens3 +- +-kernel.percpu.interrupts.line10 [IO-APIC 10-fasteoi virtio0, qxl] +-Help: +-IO-APIC 10-fasteoi virtio0, qxl +- +-kernel.percpu.interrupts.line9 [IO-APIC 9-fasteoi acpi] +-Help: +-IO-APIC 9-fasteoi acpi +- +-kernel.percpu.interrupts.line8 [IO-APIC 8-edge rtc0] +-Help: +-IO-APIC 8-edge rtc0 +- +-kernel.percpu.interrupts.line1 [IO-APIC 1-edge i8042] +-Help: +-IO-APIC 1-edge i8042 +- +-kernel.percpu.interrupts.line0 [IO-APIC 2-edge timer] +-Help: +-IO-APIC 2-edge timer +- +-== done +- +-== Checking interrupts metrics from interrupts-2cpu-s390x (2 CPU) +- +-kernel.percpu.intr +- inst [0 or "cpu0"] value 38892 +- inst [1 or "cpu1"] value 90479 +- +-kernel.percpu.interrupts.I_O +- inst [0 or "cpu0"] value 6989 +- inst [1 or "cpu1"] value 33457 +- +-kernel.percpu.interrupts.EXT +- inst [0 or "cpu0"] value 31903 +- inst [1 or "cpu1"] value 57022 +- +-== done +- +-== Checking interrupts helptext from interrupts-2cpu-s390x (2 CPU) +- +-kernel.percpu.intr [interrupt count metric from /proc/interrupts] +-Help: +-Aggregate count of each CPUs interrupt processing count, calculated +-as the sum of all interrupt types in /proc/interrupts for each CPU. +- +-kernel.percpu.interrupts.I_O One-line Help: Error: One-line or help text is not available +-Full Help: Error: One-line or help text is not available +- +-kernel.percpu.interrupts.EXT One-line Help: Error: One-line or help text is not available +-Full Help: Error: One-line or help text is not available +- +-== done +- +-== Checking interrupts metrics from interrupts-8cpu-x86_64 (8 CPU) +- +-kernel.percpu.intr +- inst [0 or "cpu0"] value 26111240 +- inst [1 or "cpu1"] value 7662936 +- inst [2 or "cpu2"] value 20042205 +- inst [3 or "cpu3"] value 6568091 +- inst [4 or "cpu4"] value 19451440 +- inst [5 or "cpu5"] value 6189188 +- inst [6 or "cpu6"] value 19095407 +- inst [7 or "cpu7"] value 6657317 +- +-kernel.percpu.interrupts.PIW +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.PIN +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.MIS +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.ERR +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.HYP +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.MCP +- inst [0 or "cpu0"] value 2525 +- inst [1 or "cpu1"] value 2525 +- inst [2 or "cpu2"] value 2525 +- inst [3 or "cpu3"] value 2525 +- inst [4 or "cpu4"] value 2525 +- inst [5 or "cpu5"] value 2525 +- inst [6 or "cpu6"] value 2525 +- inst [7 or "cpu7"] value 2525 +- +-kernel.percpu.interrupts.MCE +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.DFR +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.THR +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.TRM +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.TLB +- inst [0 or "cpu0"] value 280553 +- inst [1 or "cpu1"] value 186882 +- inst [2 or "cpu2"] value 319241 +- inst [3 or "cpu3"] value 187637 +- inst [4 or "cpu4"] value 351230 +- inst [5 or "cpu5"] value 213259 +- inst [6 or "cpu6"] value 369334 +- inst [7 or "cpu7"] value 186595 +- +-kernel.percpu.interrupts.CAL +- inst [0 or "cpu0"] value 60497 +- inst [1 or "cpu1"] value 66829 +- inst [2 or "cpu2"] value 59929 +- inst [3 or "cpu3"] value 56784 +- inst [4 or "cpu4"] value 61385 +- inst [5 or "cpu5"] value 64420 +- inst [6 or "cpu6"] value 49034 +- inst [7 or "cpu7"] value 58256 +- +-kernel.percpu.interrupts.RES +- inst [0 or "cpu0"] value 448998 +- inst [1 or "cpu1"] value 206937 +- inst [2 or "cpu2"] value 333675 +- inst [3 or "cpu3"] value 153696 +- inst [4 or "cpu4"] value 325565 +- inst [5 or "cpu5"] value 143760 +- inst [6 or "cpu6"] value 326484 +- inst [7 or "cpu7"] value 145869 +- +-kernel.percpu.interrupts.RTR +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.IWI +- inst [0 or "cpu0"] value 1 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 1 +- inst [3 or "cpu3"] value 1 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.PMI +- inst [0 or "cpu0"] value 553 +- inst [1 or "cpu1"] value 288 +- inst [2 or "cpu2"] value 586 +- inst [3 or "cpu3"] value 286 +- inst [4 or "cpu4"] value 607 +- inst [5 or "cpu5"] value 216 +- inst [6 or "cpu6"] value 389 +- inst [7 or "cpu7"] value 203 +- +-kernel.percpu.interrupts.SPU +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.LOC +- inst [0 or "cpu0"] value 18017794 +- inst [1 or "cpu1"] value 5791007 +- inst [2 or "cpu2"] value 18785621 +- inst [3 or "cpu3"] value 5656822 +- inst [4 or "cpu4"] value 18296406 +- inst [5 or "cpu5"] value 5364275 +- inst [6 or "cpu6"] value 18002503 +- inst [7 or "cpu7"] value 5946670 +- +-kernel.percpu.interrupts.NMI +- inst [0 or "cpu0"] value 553 +- inst [1 or "cpu1"] value 288 +- inst [2 or "cpu2"] value 586 +- inst [3 or "cpu3"] value 286 +- inst [4 or "cpu4"] value 607 +- inst [5 or "cpu5"] value 216 +- inst [6 or "cpu6"] value 389 +- inst [7 or "cpu7"] value 203 +- +-kernel.percpu.interrupts.line35 +- inst [0 or "cpu0"] value 312 +- inst [1 or "cpu1"] value 386 +- inst [2 or "cpu2"] value 570 +- inst [3 or "cpu3"] value 223 +- inst [4 or "cpu4"] value 24 +- inst [5 or "cpu5"] value 51 +- inst [6 or "cpu6"] value 63 +- inst [7 or "cpu7"] value 476 +- +-kernel.percpu.interrupts.line34 +- inst [0 or "cpu0"] value 46 +- inst [1 or "cpu1"] value 165 +- inst [2 or "cpu2"] value 28 +- inst [3 or "cpu3"] value 96 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 18 +- inst [6 or "cpu6"] value 4 +- inst [7 or "cpu7"] value 59 +- +-kernel.percpu.interrupts.line33 +- inst [0 or "cpu0"] value 1469469 +- inst [1 or "cpu1"] value 144536 +- inst [2 or "cpu2"] value 72660 +- inst [3 or "cpu3"] value 67411 +- inst [4 or "cpu4"] value 30996 +- inst [5 or "cpu5"] value 54462 +- inst [6 or "cpu6"] value 55834 +- inst [7 or "cpu7"] value 36640 +- +-kernel.percpu.interrupts.line32 +- inst [0 or "cpu0"] value 6 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 1 +- inst [4 or "cpu4"] value 1 +- inst [5 or "cpu5"] value 12 +- inst [6 or "cpu6"] value 5 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.line31 +- inst [0 or "cpu0"] value 535491 +- inst [1 or "cpu1"] value 101812 +- inst [2 or "cpu2"] value 97997 +- inst [3 or "cpu3"] value 89277 +- inst [4 or "cpu4"] value 72963 +- inst [5 or "cpu5"] value 71434 +- inst [6 or "cpu6"] value 58086 +- inst [7 or "cpu7"] value 60455 +- +-kernel.percpu.interrupts.line30 +- inst [0 or "cpu0"] value 249 +- inst [1 or "cpu1"] value 54 +- inst [2 or "cpu2"] value 51 +- inst [3 or "cpu3"] value 42 +- inst [4 or "cpu4"] value 32 +- inst [5 or "cpu5"] value 37 +- inst [6 or "cpu6"] value 40 +- inst [7 or "cpu7"] value 42 +- +-kernel.percpu.interrupts.line29 +- inst [0 or "cpu0"] value 3249898 +- inst [1 or "cpu1"] value 727145 +- inst [2 or "cpu2"] value 103573 +- inst [3 or "cpu3"] value 204127 +- inst [4 or "cpu4"] value 93052 +- inst [5 or "cpu5"] value 157195 +- inst [6 or "cpu6"] value 78865 +- inst [7 or "cpu7"] value 122291 +- +-kernel.percpu.interrupts.line28 +- inst [0 or "cpu0"] value 1206282 +- inst [1 or "cpu1"] value 65009 +- inst [2 or "cpu2"] value 178349 +- inst [3 or "cpu3"] value 63472 +- inst [4 or "cpu4"] value 144415 +- inst [5 or "cpu5"] value 55875 +- inst [6 or "cpu6"] value 92424 +- inst [7 or "cpu7"] value 49796 +- +-kernel.percpu.interrupts.line27 +- inst [0 or "cpu0"] value 836947 +- inst [1 or "cpu1"] value 368771 +- inst [2 or "cpu2"] value 86379 +- inst [3 or "cpu3"] value 84935 +- inst [4 or "cpu4"] value 71356 +- inst [5 or "cpu5"] value 61231 +- inst [6 or "cpu6"] value 59367 +- inst [7 or "cpu7"] value 47157 +- +-kernel.percpu.interrupts.line25 +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.line24 +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.line23 +- inst [0 or "cpu0"] value 14 +- inst [1 or "cpu1"] value 3 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 3 +- inst [4 or "cpu4"] value 1 +- inst [5 or "cpu5"] value 4 +- inst [6 or "cpu6"] value 2 +- inst [7 or "cpu7"] value 6 +- +-kernel.percpu.interrupts.line18 +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.line16 +- inst [0 or "cpu0"] value 13 +- inst [1 or "cpu1"] value 4 +- inst [2 or "cpu2"] value 2 +- inst [3 or "cpu3"] value 3 +- inst [4 or "cpu4"] value 3 +- inst [5 or "cpu5"] value 3 +- inst [6 or "cpu6"] value 2 +- inst [7 or "cpu7"] value 1 +- +-kernel.percpu.interrupts.line12 +- inst [0 or "cpu0"] value 669 +- inst [1 or "cpu1"] value 204 +- inst [2 or "cpu2"] value 411 +- inst [3 or "cpu3"] value 430 +- inst [4 or "cpu4"] value 64 +- inst [5 or "cpu5"] value 123 +- inst [6 or "cpu6"] value 41 +- inst [7 or "cpu7"] value 45 +- +-kernel.percpu.interrupts.line9 +- inst [0 or "cpu0"] value 322 +- inst [1 or "cpu1"] value 79 +- inst [2 or "cpu2"] value 14 +- inst [3 or "cpu3"] value 29 +- inst [4 or "cpu4"] value 206 +- inst [5 or "cpu5"] value 65 +- inst [6 or "cpu6"] value 14 +- inst [7 or "cpu7"] value 27 +- +-kernel.percpu.interrupts.line8 +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 1 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.interrupts.line1 +- inst [0 or "cpu0"] value 10 +- inst [1 or "cpu1"] value 11 +- inst [2 or "cpu2"] value 7 +- inst [3 or "cpu3"] value 5 +- inst [4 or "cpu4"] value 2 +- inst [5 or "cpu5"] value 7 +- inst [6 or "cpu6"] value 2 +- inst [7 or "cpu7"] value 1 +- +-kernel.percpu.interrupts.line0 +- inst [0 or "cpu0"] value 38 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-== done +- +-== Checking interrupts helptext from interrupts-8cpu-x86_64 (8 CPU) +- +-kernel.percpu.intr [interrupt count metric from /proc/interrupts] +-Help: +-Aggregate count of each CPUs interrupt processing count, calculated +-as the sum of all interrupt types in /proc/interrupts for each CPU. +- +-kernel.percpu.interrupts.PIW [Posted-interrupt wakeup event] +-Help: +-Posted-interrupt wakeup event +- +-kernel.percpu.interrupts.PIN [Posted-interrupt notification event] +-Help: +-Posted-interrupt notification event +- +-kernel.percpu.interrupts.MIS One-line Help: Error: One-line or help text is not available +-Full Help: Error: One-line or help text is not available +- +-kernel.percpu.interrupts.ERR One-line Help: Error: One-line or help text is not available +-Full Help: Error: One-line or help text is not available +- +-kernel.percpu.interrupts.HYP [Hypervisor callback interrupts] +-Help: +-Hypervisor callback interrupts +- +-kernel.percpu.interrupts.MCP [Machine check polls] +-Help: +-Machine check polls +- +-kernel.percpu.interrupts.MCE [Machine check exceptions] +-Help: +-Machine check exceptions +- +-kernel.percpu.interrupts.DFR [Deferred Error APIC interrupts] +-Help: +-Deferred Error APIC interrupts +- +-kernel.percpu.interrupts.THR [Threshold APIC interrupts] +-Help: +-Threshold APIC interrupts +- +-kernel.percpu.interrupts.TRM [Thermal event interrupts] +-Help: +-Thermal event interrupts +- +-kernel.percpu.interrupts.TLB [TLB shootdowns] +-Help: +-TLB shootdowns +- +-kernel.percpu.interrupts.CAL [Function call interrupts] +-Help: +-Function call interrupts +- +-kernel.percpu.interrupts.RES [Rescheduling interrupts] +-Help: +-Rescheduling interrupts +- +-kernel.percpu.interrupts.RTR [APIC ICR read retries] +-Help: +-APIC ICR read retries +- +-kernel.percpu.interrupts.IWI [IRQ work interrupts] +-Help: +-IRQ work interrupts +- +-kernel.percpu.interrupts.PMI [Performance monitoring interrupts] +-Help: +-Performance monitoring interrupts +- +-kernel.percpu.interrupts.SPU [Spurious interrupts] +-Help: +-Spurious interrupts +- +-kernel.percpu.interrupts.LOC [Local timer interrupts] +-Help: +-Local timer interrupts +- +-kernel.percpu.interrupts.NMI [Non-maskable interrupts] +-Help: +-Non-maskable interrupts +- +-kernel.percpu.interrupts.line35 [IR-PCI-MSI 49152-edge snd_hda_intel] +-Help: +-IR-PCI-MSI 49152-edge snd_hda_intel +- +-kernel.percpu.interrupts.line34 [IR-PCI-MSI 442368-edge snd_hda_intel] +-Help: +-IR-PCI-MSI 442368-edge snd_hda_intel +- +-kernel.percpu.interrupts.line33 [IR-PCI-MSI 1572864-edge iwlwifi] +-Help: +-IR-PCI-MSI 1572864-edge iwlwifi +- +-kernel.percpu.interrupts.line32 [IR-PCI-MSI 360448-edge mei_me] +-Help: +-IR-PCI-MSI 360448-edge mei_me +- +-kernel.percpu.interrupts.line31 [IR-PCI-MSI 32768-edge i915] +-Help: +-IR-PCI-MSI 32768-edge i915 +- +-kernel.percpu.interrupts.line30 [IR-PCI-MSI 524288-edge nvkm] +-Help: +-IR-PCI-MSI 524288-edge nvkm +- +-kernel.percpu.interrupts.line29 [IR-PCI-MSI 409600-edge enp0s25] +-Help: +-IR-PCI-MSI 409600-edge enp0s25 +- +-kernel.percpu.interrupts.line28 [IR-PCI-MSI 327680-edge xhci_hcd] +-Help: +-IR-PCI-MSI 327680-edge xhci_hcd +- +-kernel.percpu.interrupts.line27 [IR-PCI-MSI 512000-edge 0000:00:1f.2] +-Help: +-IR-PCI-MSI 512000-edge 0000:00:1f.2 +- +-kernel.percpu.interrupts.line25 [DMAR-MSI 1-edge dmar1] +-Help: +-DMAR-MSI 1-edge dmar1 +- +-kernel.percpu.interrupts.line24 [DMAR-MSI 0-edge dmar0] +-Help: +-DMAR-MSI 0-edge dmar0 +- +-kernel.percpu.interrupts.line23 [IR-IO-APIC 23-fasteoi ehci_hcd:usb4] +-Help: +-IR-IO-APIC 23-fasteoi ehci_hcd:usb4 +- +-kernel.percpu.interrupts.line18 [IR-IO-APIC 18-fasteoi i801_smbus] +-Help: +-IR-IO-APIC 18-fasteoi i801_smbus +- +-kernel.percpu.interrupts.line16 [IR-IO-APIC 16-fasteoi ehci_hcd:usb3, mmc0] +-Help: +-IR-IO-APIC 16-fasteoi ehci_hcd:usb3, mmc0 +- +-kernel.percpu.interrupts.line12 [IR-IO-APIC 12-edge i8042] +-Help: +-IR-IO-APIC 12-edge i8042 +- +-kernel.percpu.interrupts.line9 [IR-IO-APIC 9-fasteoi acpi] +-Help: +-IR-IO-APIC 9-fasteoi acpi +- +-kernel.percpu.interrupts.line8 [IR-IO-APIC 8-edge rtc0] +-Help: +-IR-IO-APIC 8-edge rtc0 +- +-kernel.percpu.interrupts.line1 [IR-IO-APIC 1-edge i8042] +-Help: +-IR-IO-APIC 1-edge i8042 +- +-kernel.percpu.interrupts.line0 [IR-IO-APIC 2-edge timer] +-Help: +-IR-IO-APIC 2-edge timer +- +-== done +- +-== Checking softirqs metrics from softirqs-1cpu-i686 (1 CPU) +- +-kernel.percpu.softirqs.RCU +- inst [0 or "cpu0"] value 9479358 +- +-kernel.percpu.softirqs.HRTIMER +- inst [0 or "cpu0"] value 6675 +- +-kernel.percpu.softirqs.SCHED +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.softirqs.TASKLET +- inst [0 or "cpu0"] value 25 +- +-kernel.percpu.softirqs.IRQ_POLL +- inst [0 or "cpu0"] value 0 +- +-kernel.percpu.softirqs.BLOCK +- inst [0 or "cpu0"] value 649022 +- +-kernel.percpu.softirqs.NET_RX +- inst [0 or "cpu0"] value 2315415 +- +-kernel.percpu.softirqs.NET_TX +- inst [0 or "cpu0"] value 28234 +- +-kernel.percpu.softirqs.TIMER +- inst [0 or "cpu0"] value 6403664 +- +-kernel.percpu.softirqs.HI +- inst [0 or "cpu0"] value 0 +- +-== done +- +-== Checking softirqs metrics from softirqs-8cpu-x86_64 (8 CPU) +- +-kernel.percpu.softirqs.RCU +- inst [0 or "cpu0"] value 4091340 +- inst [1 or "cpu1"] value 1909874 +- inst [2 or "cpu2"] value 4344260 +- inst [3 or "cpu3"] value 1844811 +- inst [4 or "cpu4"] value 4353438 +- inst [5 or "cpu5"] value 1788762 +- inst [6 or "cpu6"] value 4567499 +- inst [7 or "cpu7"] value 1790731 +- +-kernel.percpu.softirqs.HRTIMER +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.softirqs.SCHED +- inst [0 or "cpu0"] value 10615929 +- inst [1 or "cpu1"] value 2678293 +- inst [2 or "cpu2"] value 11420741 +- inst [3 or "cpu3"] value 2442310 +- inst [4 or "cpu4"] value 11326208 +- inst [5 or "cpu5"] value 2221897 +- inst [6 or "cpu6"] value 11847771 +- inst [7 or "cpu7"] value 2226145 +- +-kernel.percpu.softirqs.TASKLET +- inst [0 or "cpu0"] value 289993 +- inst [1 or "cpu1"] value 20066 +- inst [2 or "cpu2"] value 11407 +- inst [3 or "cpu3"] value 13018 +- inst [4 or "cpu4"] value 11681 +- inst [5 or "cpu5"] value 13975 +- inst [6 or "cpu6"] value 11346 +- inst [7 or "cpu7"] value 14721 +- +-kernel.percpu.softirqs.BLOCK_IOPOLL +- inst [0 or "cpu0"] value 0 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 0 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 0 +- inst [7 or "cpu7"] value 0 +- +-kernel.percpu.softirqs.BLOCK +- inst [0 or "cpu0"] value 954704 +- inst [1 or "cpu1"] value 355240 +- inst [2 or "cpu2"] value 148508 +- inst [3 or "cpu3"] value 114078 +- inst [4 or "cpu4"] value 139619 +- inst [5 or "cpu5"] value 109897 +- inst [6 or "cpu6"] value 123041 +- inst [7 or "cpu7"] value 89285 +- +-kernel.percpu.softirqs.NET_RX +- inst [0 or "cpu0"] value 2452582 +- inst [1 or "cpu1"] value 469315 +- inst [2 or "cpu2"] value 398117 +- inst [3 or "cpu3"] value 408351 +- inst [4 or "cpu4"] value 383922 +- inst [5 or "cpu5"] value 438586 +- inst [6 or "cpu6"] value 440370 +- inst [7 or "cpu7"] value 326415 +- +-kernel.percpu.softirqs.NET_TX +- inst [0 or "cpu0"] value 90951 +- inst [1 or "cpu1"] value 17778 +- inst [2 or "cpu2"] value 61 +- inst [3 or "cpu3"] value 40 +- inst [4 or "cpu4"] value 18 +- inst [5 or "cpu5"] value 21 +- inst [6 or "cpu6"] value 21 +- inst [7 or "cpu7"] value 91 +- +-kernel.percpu.softirqs.TIMER +- inst [0 or "cpu0"] value 22759101 +- inst [1 or "cpu1"] value 11940767 +- inst [2 or "cpu2"] value 29285504 +- inst [3 or "cpu3"] value 9478253 +- inst [4 or "cpu4"] value 30806978 +- inst [5 or "cpu5"] value 12117841 +- inst [6 or "cpu6"] value 31045648 +- inst [7 or "cpu7"] value 12521062 +- +-kernel.percpu.softirqs.HI +- inst [0 or "cpu0"] value 12 +- inst [1 or "cpu1"] value 0 +- inst [2 or "cpu2"] value 1 +- inst [3 or "cpu3"] value 0 +- inst [4 or "cpu4"] value 0 +- inst [5 or "cpu5"] value 0 +- inst [6 or "cpu6"] value 5 +- inst [7 or "cpu7"] value 0 +- +-== done +- +diff -Naurp pcp-4.3.2.orig/qa/.gitignore pcp-4.3.2/qa/.gitignore +--- pcp-4.3.2.orig/qa/.gitignore 2019-02-21 08:48:58.000000000 +1100 ++++ pcp-4.3.2/qa/.gitignore 2020-03-12 07:54:15.565910023 +1100 +@@ -82,6 +82,7 @@ sudo + 740.out + 769.out + 798.out ++886.out + 905.out + 917.out + 919.out +diff -Naurp pcp-4.3.2.orig/src/pmdas/linux/interrupts.c pcp-4.3.2/src/pmdas/linux/interrupts.c +--- pcp-4.3.2.orig/src/pmdas/linux/interrupts.c 2018-09-18 16:41:15.000000000 +1000 ++++ pcp-4.3.2/src/pmdas/linux/interrupts.c 2020-03-12 07:54:15.589909725 +1100 +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2012-2014,2016 Red Hat. ++ * Copyright (c) 2012-2014,2016,2019 Red Hat. + * Copyright (c) 2011 Aconex. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it +@@ -21,6 +21,8 @@ + #endif + #include + ++#define MAX_INTERRUPT_LINES 1023 ++ + typedef struct { + unsigned int id; /* becomes PMID item number */ + char *name; /* becomes PMNS sub-component */ +@@ -34,6 +36,9 @@ typedef struct { + unsigned long long count; /* per-CPU sum of interrupt counts */ + } online_cpu_t; + ++static char *iobuf; /* buffer sized based on CPU count */ ++static unsigned int iobufsz; ++ + static unsigned int cpu_count; + static online_cpu_t *online_cpumap; /* maps input columns to CPU info */ + static unsigned int lines_count; +@@ -63,6 +68,10 @@ setup_interrupts(int reset) + pmdaCacheOp(INDOM(SOFTIRQS_NAMES_INDOM), PMDA_CACHE_LOAD); + pmdaCacheOp(INDOM(INTERRUPTS_INDOM), PMDA_CACHE_LOAD); + pmdaCacheOp(INDOM(SOFTIRQS_INDOM), PMDA_CACHE_LOAD); ++ if ((iobufsz = (_pm_ncpus * 64)) < BUFSIZ) ++ iobufsz = BUFSIZ; ++ if ((iobuf = malloc(iobufsz)) == NULL) ++ return -oserror(); + setup = 1; + } + if (cpu_count != _pm_ncpus) { +@@ -134,8 +143,12 @@ static void + update_lines_pmns(int domain, unsigned int item, unsigned int id) + { + char entry[128]; +- pmID pmid = pmID_build(domain, CLUSTER_INTERRUPT_LINES, item); ++ pmID pmid; + ++ if (item > MAX_INTERRUPT_LINES) ++ return; ++ ++ pmid = pmID_build(domain, CLUSTER_INTERRUPT_LINES, item); + pmsprintf(entry, sizeof(entry), "kernel.percpu.interrupts.line%d", id); + pmdaTreeInsert(interrupt_tree, pmid, entry); + } +@@ -419,7 +432,6 @@ int + refresh_interrupt_values(void) + { + FILE *fp; +- char buf[BUFSIZ]; + int i, j, ncolumns; + int sts, resized = 0; + +@@ -428,31 +440,33 @@ refresh_interrupt_values(void) + if ((sts = setup_interrupts(1)) < 0) + return sts; + +- if ((fp = linux_statsfile("/proc/interrupts", buf, sizeof(buf))) == NULL) ++ if ((fp = linux_statsfile("/proc/interrupts", iobuf, iobufsz)) == NULL) + return -oserror(); + + /* first parse header, which maps online CPU number to column number */ +- if (fgets(buf, sizeof(buf), fp)) { +- ncolumns = map_online_cpus(buf); ++ if (fgets(iobuf, iobufsz, fp)) { ++ iobuf[iobufsz - 1] = '\0'; ++ ncolumns = map_online_cpus(iobuf); + } else { + fclose(fp); + return -EINVAL; /* unrecognised file format */ + } + + i = j = 0; +- while (fgets(buf, sizeof(buf), fp) != NULL) { ++ while (fgets(iobuf, iobufsz, fp) != NULL) { ++ iobuf[iobufsz - 1] = '\0'; + /* next we parse each interrupt line row (starting with a digit) */ +- sts = extract_interrupt_lines(buf, ncolumns, i++); ++ sts = extract_interrupt_lines(iobuf, ncolumns, i++); + if (sts > 1) + resized++; + if (sts) + continue; +- if (extract_interrupt_errors(buf)) ++ if (extract_interrupt_errors(iobuf)) + continue; +- if (extract_interrupt_misses(buf)) ++ if (extract_interrupt_misses(iobuf)) + continue; + /* parse other per-CPU interrupt counter rows (starts non-digit) */ +- sts = extract_interrupt_other(buf, ncolumns, j++); ++ sts = extract_interrupt_other(iobuf, ncolumns, j++); + if (sts > 1) + resized++; + if (!sts) +@@ -472,7 +486,6 @@ int + refresh_softirqs_values(void) + { + FILE *fp; +- char buf[BUFSIZ]; + int i = 0, ncolumns; + int sts, resized = 0; + +@@ -481,20 +494,22 @@ refresh_softirqs_values(void) + if ((sts = setup_interrupts(0)) < 0) + return sts; + +- if ((fp = linux_statsfile("/proc/softirqs", buf, sizeof(buf))) == NULL) ++ if ((fp = linux_statsfile("/proc/softirqs", iobuf, iobufsz)) == NULL) + return -oserror(); + + /* first parse header, which maps online CPU number to column number */ +- if (fgets(buf, sizeof(buf), fp)) { +- ncolumns = map_online_cpus(buf); ++ if (fgets(iobuf, iobufsz, fp)) { ++ iobuf[iobufsz - 1] = '\0'; ++ ncolumns = map_online_cpus(iobuf); + } else { + fclose(fp); + return -EINVAL; /* unrecognised file format */ + } + +- while (fgets(buf, sizeof(buf), fp) != NULL) { ++ while (fgets(iobuf, iobufsz, fp) != NULL) { ++ iobuf[iobufsz - 1] = '\0'; + /* next we parse each softirqs line */ +- sts = extract_softirqs(buf, ncolumns, i++); ++ sts = extract_softirqs(iobuf, ncolumns, i++); + if (sts > 1) + resized = 1; + if (sts == 0) +@@ -513,7 +528,7 @@ refresh_softirqs_values(void) + static int + refresh_interrupts(pmdaExt *pmda, pmdaNameSpace **tree) + { +- int i, sts, dom = pmda->e_domain; ++ int i, sts, dom = pmda->e_domain, lines; + + if (interrupt_tree) { + *tree = interrupt_tree; +@@ -527,12 +542,14 @@ refresh_interrupts(pmdaExt *pmda, pmdaNa + pmGetProgname(), pmErrStr(sts)); + *tree = NULL; + } else { +- for (i = 0; i < lines_count; i++) ++ if ((lines = lines_count) > MAX_INTERRUPT_LINES) ++ lines = MAX_INTERRUPT_LINES; ++ for (i = 0; i < lines; i++) + update_lines_pmns(dom, i, interrupt_lines[i].id); + for (i = 0; i < other_count; i++) + update_other_pmns(dom, interrupt_other[i].name); + *tree = interrupt_tree; +- pmdaTreeRebuildHash(interrupt_tree, lines_count+other_count); ++ pmdaTreeRebuildHash(interrupt_tree, lines + other_count); + return 1; + } + +@@ -625,7 +642,7 @@ interrupts_fetch(int cluster, int item, + case CLUSTER_INTERRUPT_LINES: + if (!lines_count) + return 0; +- if (item > lines_count) ++ if (item > lines_count || item > MAX_INTERRUPT_LINES) + break; + atom->ul = interrupt_lines[item].values[inst]; + return 1; +@@ -674,11 +691,15 @@ refresh_metrictable(pmdaMetric *source, + static void + interrupts_metrictable(int *total, int *trees) + { ++ int lines; ++ + if (!refresh_interrupt_count) + refresh_interrupt_values(); + +- if (lines_count > other_count) +- *trees = lines_count ? lines_count : 1; ++ if ((lines = lines_count) > MAX_INTERRUPT_LINES) ++ lines = MAX_INTERRUPT_LINES; ++ if (lines > other_count) ++ *trees = lines ? lines : 1; + else + *trees = other_count ? other_count : 1; + *total = 2; /* lines and other */ +@@ -714,7 +735,7 @@ interrupts_text(pmdaExt *pmda, pmID pmid + case CLUSTER_INTERRUPT_LINES: + if (!lines_count) + return PM_ERR_TEXT; +- if (item > lines_count) ++ if (item > lines_count || item > MAX_INTERRUPT_LINES) + return PM_ERR_PMID; + text = interrupt_lines[item].text; + if (text == NULL || text[0] == '\0') +diff -Naurp pcp-4.3.2.orig/src/pmdas/linux/pmda.c pcp-4.3.2/src/pmdas/linux/pmda.c +--- pcp-4.3.2.orig/src/pmdas/linux/pmda.c 2019-04-16 05:27:45.000000000 +1000 ++++ pcp-4.3.2/src/pmdas/linux/pmda.c 2020-03-12 07:54:15.592909688 +1100 +@@ -5362,10 +5362,10 @@ static pmdaMetric metrictab[] = { + PM_INDOM_NULL, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* kernel.percpu.intr */ +- { NULL, { PMDA_PMID(CLUSTER_INTERRUPTS,4), PM_TYPE_U64, ++ { NULL, { PMDA_PMID(CLUSTER_INTERRUPTS, 4), PM_TYPE_U64, + CPU_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +- /* kernel.percpu.interrupts.line[] */ ++ /* kernel.percpu.interrupts.line[<0-1023>] */ + { NULL, { PMDA_PMID(CLUSTER_INTERRUPT_LINES, 0), PM_TYPE_U32, + CPU_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +@@ -8658,7 +8658,8 @@ linux_init(pmdaInterface *dp) + } + if (metrictab[i].m_desc.type == PM_TYPE_NOSUPPORT) + fprintf(stderr, "Bad kernel metric descriptor type (%u.%u)\n", +- pmID_cluster(metrictab[i].m_desc.pmid), pmID_item(metrictab[i].m_desc.pmid)); ++ pmID_cluster(metrictab[i].m_desc.pmid), ++ pmID_item(metrictab[i].m_desc.pmid)); + } + + nindoms = sizeof(indomtab)/sizeof(indomtab[0]); diff --git a/SPECS/pcp.spec b/SPECS/pcp.spec index 75872f6..40b17dd 100644 --- a/SPECS/pcp.spec +++ b/SPECS/pcp.spec @@ -1,6 +1,6 @@ Name: pcp Version: 4.3.2 -Release: 2%{?dist} +Release: 3%{?dist} Summary: System-level performance monitoring and performance management License: GPLv2+ and LGPLv2+ and CC-BY URL: https://pcp.io @@ -15,6 +15,7 @@ Source3: %{github}/pcp-webapp-graphite/archive/0.9.10/pcp-webapp-graphite-0.9.10 Source4: %{github}/pcp-webapp-blinkenlights/archive/1.0.1/pcp-webapp-blinkenlights-1.0.1.tar.gz Patch0: pmcd-pmlogger-local-context.patch Patch1: qa-fixmod.patch +Patch2: redhat-bz-1755069.patch %if 0%{?fedora} >= 26 || 0%{?rhel} > 7 %global __python2 python2 @@ -2095,6 +2096,7 @@ updated policy package. %setup -q %patch0 -p1 %patch1 -p1 +%patch2 -p1 %build %if !%{disable_python2} && 0%{?default_python} != 3 @@ -3303,6 +3305,9 @@ cd %endif %changelog +* Thu Mar 12 2020 Nathan Scott - 4.3.2-3 +- Fix pmdalinux mishandling of large CPU counts (BZ 1755069) + * Mon May 06 2019 Nathan Scott - 4.3.2-2 - Update metrics for device mapper VDO driver (BZ 1670548) - Update to a more recent PCP bug fix release (BZ 1685302)