Я пытаюсь изменить код, который приносит вниз центральный процессор, и попал во что-то я не совсем понимаю:Почему возникает вызов mdelay (1) при сбросе аффинности прерывания?
Одна из вещей, которые происходят после того, как ядро удаляются из cpu_online_mask, является переналаживанией прервать сродство. Это делается в функции fixup_irqs(), которая находится в /arch/x86/kernel/irq.c. Функция сбрасывает аффинности прерываний, затем вызывает mdelay (1) (который просто ждет 1 миллисекунду) и, наконец, обращается к возможно «потерянным» прерываниям.
Мой вопрос: почему нужен вызов mdelay (1)? что может произойти без него? Моя догадка заключается в том, что требуется время для перенаправления в APIC, чтобы вступить в силу ... но я уверен, что для этого есть более убедительное объяснение.
Спасибо!
Если вам повезет, это может быть добавлено сообщение 2.6.12, и если вы выполняете «git-вину» и обнаруживаете фиксацию, которая ввела эту задержку, может возникнуть объяснение в сообщении фиксации. – Shahbaz
@Shahbaz, yup, здесь возможно информация: 5231a68614b9. – 0andriy
@ Энди Шевченко, если вы имеете в виду [это] (http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=5231a68614b94f60e8f6c56bc6e3d75955b9e75e), то я не думаю, что это дает объяснение. Этот фиксатор просто удаляет прерывание/запрет, окружающий mdelay (1). А именно, mdelay был там до ... – Noamiko