Qual opção '.config' do kernel causa a mensagem kmsg / dmesg: “Roteamento APIC comutado para físico plano”.

1

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.

    
por Marcus Linsner 07.09.2018 / 07:25

0 respostas