Page 1 of 1

Read '0' from local APIC timer registers.

Posted: Tue Feb 26, 2019 12:15 am
by wangt13
I am writing a Linux kernel module to read dump local APIC timer registers.
I am using Ubuntu 16.04 desktop on X86_64 platform.
X2APIC is disabled, and nohz=off in grub.cfg.

Here comes the code.

#include <linux/slab.h>
#include <linux/time.h>
#include <asm/string.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/hrtimer.h>
#include <linux/ktime.h>
#include <asm/apic.h>

void read_apic_timer(void)
{
printk("APIC_TDCR = 0x%x\n", apic_read(APIC_TDCR));
printk("APIC_TMICT = 0x%x\n", apic_read(APIC_TMICT));
printk("APIC_TMCCT = 0x%x\n", apic_read(APIC_TMCCT));
}

static int __init timer_init(void)
{
read_apic_timer();
return 0;
}

static void __exit timer_exit(void)
{
printk("module uninstalling\n");
}

module_init(timer_init);
module_exit(timer_exit);
MODULE_LICENSE("GPL");

And what I got is below,

[ 5619.047497] APIC_TDCR = 0x0
[ 5619.047498] APIC_TMICT = 0x0
[ 5619.047499] APIC_TMCCT = 0x0

I am not sure if it is correct or NOT.

Thanks,

Re: Read '0' from local APIC timer registers.

Posted: Thu Feb 28, 2019 8:18 pm
by wangt13
Finally, I got the reason of 0s.
It is because, in my host, it supports TSC_DEADLINE mode, so Linux will configure APIC timer to this mode, without using TMICT/TMCCT/TMDCR.

Thanks,