We have hard-coded the HZ value for some ARCHs to either 1000 or 100
(mainly for kernel versions > 2.6.0), which causes 'help -m' to show
an incorrect hz value for various architectures.

I tested this on ppc64le and x86_64 and the hz value reported is 1000,
whereas the kernel CONFIG_HZ_100 is set to Y. See some logs below:

crash> help -m
              flags: 124000f5 
(KSYMS_START|MACHDEP_BT_TEXT|VM_4_LEVEL|VMEMMAP|VMEMMAP_AWARE|PHYS_ENTRY_L4|SWAP_ENTRY_L4|RADIX_MMU|OPAL_FW)
             kvbase: c000000000000000
  identity_map_base: c000000000000000
           pagesize: 65536
          pageshift: 16
           pagemask: ffffffffffff0000
         pageoffset: ffff
          stacksize: 16384
                 hz: 1000
                mhz: 2800

[host@rhel7]$ grep CONFIG_HZ_100= redhat/configs/kernel-3.10.0-ppc64le.config
CONFIG_HZ_100=y

Fix the same by using the sysconf(_SC_CLK_TCK) value instead of the
hardcoded HZ values depending on kernel versions.

Cc: k-hagio...@nec.com
Cc: liji...@redhat.com
Cc: bhupesh.li...@gmail.com
Signed-off-by: Bhupesh Sharma <bhsha...@redhat.com>
---
 arm.c    | 2 +-
 arm64.c  | 2 +-
 ppc.c    | 5 +----
 ppc64.c  | 6 ++----
 x86.c    | 5 +----
 x86_64.c | 5 +----
 6 files changed, 7 insertions(+), 18 deletions(-)

diff --git a/arm.c b/arm.c
index e52d29f04015..234feca7d1df 100644
--- a/arm.c
+++ b/arm.c
@@ -326,7 +326,7 @@ arm_init(int when)
                                   "pr_reg");
        
                if (!machdep->hz)
-                       machdep->hz = 100;
+                       machdep->hz = HZ;
                break;
 
        case POST_VM:
diff --git a/arm64.c b/arm64.c
index 37aed07edf1d..8226a8ed7929 100644
--- a/arm64.c
+++ b/arm64.c
@@ -457,7 +457,7 @@ arm64_init(int when)
                                &machdep->nr_irqs);
 
                if (!machdep->hz)
-                       machdep->hz = 100;
+                       machdep->hz = HZ;
 
                arm64_irq_stack_init();
                arm64_stackframe_init();
diff --git a/ppc.c b/ppc.c
index cf5bf5688227..1c1c15a1fab3 100644
--- a/ppc.c
+++ b/ppc.c
@@ -401,11 +401,8 @@ ppc_init(int when)
                                        &machdep->nr_irqs);
                else
                        machdep->nr_irqs = 512; /* NR_IRQS (at least) */
-               if (!machdep->hz) {
+               if (!machdep->hz)
                        machdep->hz = HZ;
-                       if (THIS_KERNEL_VERSION >= LINUX(2,6,0))
-                               machdep->hz = 1000;
-               }
                if (symbol_exists("cur_cpu_spec")) {
                        get_symbol_data("cur_cpu_spec", sizeof(void *), 
&cur_cpu_spec);
                        readmem(cur_cpu_spec + MEMBER_OFFSET("cpu_spec", 
"cpu_user_features"), 
diff --git a/ppc64.c b/ppc64.c
index f368bf8e1a08..0cc82ffbba0e 100644
--- a/ppc64.c
+++ b/ppc64.c
@@ -694,11 +694,9 @@ ppc64_init(int when)
                         */
                        BZERO(&machdep->machspec->hwintrstack,
                                NR_CPUS*sizeof(ulong));
-               if (!machdep->hz) {
+               if (!machdep->hz)
                        machdep->hz = HZ;
-                       if (THIS_KERNEL_VERSION >= LINUX(2,6,0))
-                               machdep->hz = 1000;
-               }
+
                /*
                 * IRQ stacks are introduced in 2.6 and also configurable.
                 */
diff --git a/x86.c b/x86.c
index de0d3d3114d0..ab34052da7af 100644
--- a/x86.c
+++ b/x86.c
@@ -1998,11 +1998,8 @@ x86_init(int when)
                                &machdep->nr_irqs);
                else
                        machdep->nr_irqs = 224;  /* NR_IRQS */
-               if (!machdep->hz) {
+               if (!machdep->hz)
                        machdep->hz = HZ;
-                       if (THIS_KERNEL_VERSION >= LINUX(2,6,0))
-                               machdep->hz = 1000;
-               }
 
                if (machdep->flags & PAE) {
                        if (THIS_KERNEL_VERSION < LINUX(2,6,26))
diff --git a/x86_64.c b/x86_64.c
index 23a40a04bbc4..3e6750708659 100644
--- a/x86_64.c
+++ b/x86_64.c
@@ -660,11 +660,8 @@ x86_64_init(int when)
                machdep->show_interrupts = x86_64_show_interrupts;
                if (THIS_KERNEL_VERSION < LINUX(2,6,24))
                        machdep->line_number_hooks = x86_64_line_number_hooks;
-               if (!machdep->hz) {
+               if (!machdep->hz)
                        machdep->hz = HZ;
-                       if (THIS_KERNEL_VERSION >= LINUX(2,6,0))
-                               machdep->hz = 1000;
-               }
                machdep->section_size_bits = _SECTION_SIZE_BITS;
                if (!machdep->max_physmem_bits) {
                        if ((string = 
pc->read_vmcoreinfo("NUMBER(MAX_PHYSMEM_BITS)"))) {
-- 
2.26.2

--
Crash-utility mailing list
Crash-utility@redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility

Reply via email to