Eu recompilei o kernel do Linux (4.18.5) com o mínimo de .config
e observei que, comparado com o kernel anterior, agora estou sem a linha dmesg:
Switched APIC routing to physical flat.
Qual é a opção CONFIG_
do kernel que a traz de volta?
No contexto, o kernel antigo tem a linha:
[ 0.001000] console [hvc0] enabled
[ 0.001000] ACPI: Core revision 20180531
[ 0.001000] ACPI: setting ELCR to 0200 (from ffff)
[ 0.001000] Failed to register legacy timer interrupt
[ 0.001000] APIC: Switch to symmetric I/O mode setup
[ 0.001000] x2apic: IRQ remapping doesn't support X2APIC mode
[ 0.001000] Switched APIC routing to physical flat.
[ 0.001000] tsc: Unable to calibrate against PIT
[ 0.001000] tsc: No reference (HPET/PMTIMER) available
[ 0.001000] tsc: Detected 3696.282 MHz processor
[ 0.001000] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x6a8f3c48a1e, max_idle_ns: 881591127766 ns
[ 0.001000] Calibrating delay loop (skipped), value calculated using timer frequency.. 7392.56 BogoMIPS (lpj=3696282)
O novo kernel ( ver .config
changes ) não tem a linha:
[ 0.001000] console [hvc0] enabled
[ 0.001000] ACPI: Core revision 20180531
[ 0.001000] ACPI: setting ELCR to 0200 (from ffff)
[ 0.001000] Failed to register legacy timer interrupt
[ 0.001000] APIC: Switch to symmetric I/O mode setup
[ 0.001000] x2apic: IRQ remapping doesn't support X2APIC mode
[ 0.001000] tsc: Unable to calibrate against PIT
[ 0.001000] tsc: No reference (HPET/PMTIMER) available
[ 0.001000] tsc: Detected 3696.202 MHz processor
[ 0.001000] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x6a8ea3d0e9b, max_idle_ns: 881590648040 ns
[ 0.001000] Calibrating delay loop (skipped), value calculated using timer frequency.. 7392.40 BogoMIPS (lpj=3696202)
O que eu tentei:
What is the kernel CONFIG_ option that brings it back?
Tecnicamente, é CONFIG_X86_LOCAL_APIC
, mas isso não é selecionável pelo usuário. Em vez disso, ele é selecionado automaticamente quando sua condição Depends on
é atendida:% X86_64 [=y] || SMP [=y] || X86_32_NON_STANDARD [=n] || X86_UP_APIC [=n] || PCI_MSI [=y]
. Então, já é =y
.
De acordo com o arch/x86/kernel/apic/Makefile
, a linha de obj-$(CONFIG_X86_LOCAL_APIC) += probe_$(BITS).o
é aquele que compila arch/x86/kernel/apic/probe_64.c
que tem o código que exibe a mensagem:
pr_info("Switched APIC routing to %s.\n",
apic->name);
E o código que está chamando está em arch/x86/kernel/apic/apic.c
:
case APIC_SYMMETRIC_IO:
pr_info("APIC: Switch to symmetric I/O mode setup\n");
default_setup_apic_routing();
break;
É daí que esta linha do dmesg vem:
[ 0.001000] APIC: Switch to symmetric I/O mode setup
Além disso, a linha
[ 0.001000] x2apic: IRQ remapping doesn't support X2APIC mode
vem de CONFIG_X86_X2APIC=y
:
┌── Search Results ─────────────────────────────────────────────────────────────────────────────┐
│ │
│ Symbol: X86_X2APIC [=y] │
│ Type : bool │
│ Prompt: Support x2apic │
│ Location: │
│ -> Processor type and features │
│ Defined at arch/x86/Kconfig:412 │
│ Depends on: X86_LOCAL_APIC [=y] && X86_64 [=y] && (IRQ_REMAP [=y] || HYPERVISOR_GUEST [=y]) │
└───────────────────────────────────────────────────────────────────────────────────────────────┘
Ok, mas o que causa a linha:
[ 0.001000] Switched APIC routing to physical flat.
Existem apenas dois nomes de configuração APIC
-containing que não são =y
:
┌── Search Results ─────────────────────────────────────────────────────────────────────────────────────┐
│ Symbol: X86_UP_APIC [=n] │
│ Type : bool │
│ Prompt: Local APIC support on uniprocessors │
│ Location: │
│ -> Processor type and features │
│ Defined at arch/x86/Kconfig:1053 │
│ Depends on: X86_32 [=n] && !SMP [=y] && !X86_32_NON_STANDARD [=n] │
│ │
│ │
│ Symbol: X86_UP_IOAPIC [=n] │
│ Type : bool │
│ Prompt: IO-APIC support on uniprocessors │
│ Location: │
│ -> Processor type and features │
│ -> Local APIC support on uniprocessors (X86_UP_APIC [=n]) │
│ Defined at arch/x86/Kconfig:1067
│ Depends on: X86_UP_APIC [=n] │
└───────────────────────────────────────────────────────────────────────────────────────────────────────┘
A configuração CONFIG_X86_UP_APIC
não pode ser porque requer um processador de 32 bits e como o próximo ( CONFIG_X86_UP_IOAPIC
) depende do anterior, também não pode ser.
EDIT: Até novo aviso, vou assumir que a razão pela qual essa mensagem não aparece é, de acordo com a minha interpretação do código-fonte , porque não há drivers apic, ou o driver flat
falha em sondar (ou não tem uma função de teste () ou o driver atual já é o driver simples, portanto não há necessidade de alternar para ele.