Какая опция ядра `.config` вызывает сообщение kmsg / dmesg:« Переключена маршрутизация APIC в физическую плоскость ».

Я перекомпилировал kernel ​​Linux (4.18.5) с минимальными опциями .config и заметил, что по сравнению с загрузкой предыдущего ядра я теперь пропускаю строку dmesg:
Switched APIC routing to physical flat.

Что CONFIG_ опция ядра CONFIG_ которая возвращает его обратно?

В контексте у старого ядра есть строка:

 [ 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) 

Новое kernel ​​( см. Изменения .config ) не имеет строки:

 [ 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) 

Что я пробовал:

Что такое опция ядра CONFIG_, которая возвращает его обратно?

Технически это CONFIG_X86_LOCAL_APIC но это не выбирается пользователем, а автоматически выбирается, когда выполняется условие Depends on :
X86_64 [=y] || SMP [=y] || X86_32_NON_STANDARD [=n] || X86_UP_APIC [=n] || PCI_MSI [=y] X86_64 [=y] || SMP [=y] || X86_32_NON_STANDARD [=n] || X86_UP_APIC [=n] || PCI_MSI [=y] . Так что это уже =y .

В соответствии с arch/x86/kernel/apic/Makefile , строка
obj-$(CONFIG_X86_LOCAL_APIC) += probe_$(BITS).o
это тот, который компилирует arch/x86/kernel/apic/probe_64.c который имеет код, который отображает это сообщение:

 pr_info("Switched APIC routing to %s.\n", apic->name); 

И вызывающий код находится в 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; 

Так вот откуда взялась эта строка dmesg:
[ 0.001000] APIC: Switch to symmetric I/O mode setup
Кроме того, линия
[ 0.001000] x2apic: IRQ remapping doesn't support X2APIC mode
исходит от 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]) │ └───────────────────────────────────────────────────────────────────────────────────────────────┘ 

Хорошо, но что вызывает строку:

 [ 0.001000] Switched APIC routing to physical flat. 

Есть только два APIC содержащих имени конфигурации, которые не =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] │ └───────────────────────────────────────────────────────────────────────────────────────────────────────┘ 

Конфиг CONFIG_X86_UP_APIC не может быть таким, потому что для этого требуется 32- CONFIG_X86_UP_IOAPIC процессор, и поскольку следующий ( CONFIG_X86_UP_IOAPIC ) зависит от предыдущего, он также не может быть им.

РЕДАКТИРОВАТЬ: До дальнейшего уведомления, я буду считать, что причина, по которой это сообщение не появляется, в соответствии с моей интерпретацией исходного кода , либо потому, что нет драйверов apic, либо flat драйвер не в состоянии исследовать (или не ‘ у него есть функция probe (), или текущий драйвер уже плоский драйвер, поэтому нет необходимости переключаться на него.