Не удалось прочитать регистры таймера APIC - PullRequest
0 голосов
/ 26 февраля 2019

Я пишу модуль ядра Linux для чтения дампов локальных регистров таймера APIC.
Я использую рабочий стол Ubuntu 16.04 на платформе X86_64.
X2APIC отключен, а nohz = off в grub.cfg.

Я использую следующие коды для чтения регистров таймера APIC.

#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");

И я получил это,

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

К моему удивлению, начальный счетчик и текущий счетчик - все 0, это правильно?

Или я пропустилчто-то или сделать что-то не так?

1 Ответ

0 голосов
/ 28 февраля 2019

Я думаю, что получил ответ.Это потому, что CPU поддерживает функцию / режим крайнего срока TSC для таймера LAPIC.В этом режиме APIC_TDCR / TMICT / TMCCT не используются.Вот и все.

...