Является ли __alloc_pages_slowpath () реентрант-безопасным или нет? - PullRequest
3 голосов
/ 22 января 2011

Может ли вызов __alloc_pages_slowpath () пережить прерывание устройства, которое также вызывает __alloc_pages_slowpath (), или второй вызов повреждает первый?

Я вижу программный вызов read (2) изобычный файл в файловой системе XFS.Трассировка стека ядра показывает, что в конце концов __alloc_pages_slowpath () вызывается, затем происходит IRQ e1000e, который также в конечном итоге вызывает __alloc_pages_slowpath (), а затем сообщение журнала «fooprog: сбой выделения страницы. Order: 0, mode: 0x4020» почти сразу происходит.

Весь след стека можно увидеть здесь: https://gist.github.com/790577

1 Ответ

1 голос
/ 24 января 2011

«fooprog: ошибка выделения страницы. Порядок: 0, режим: 0x4020» связан с проблемой драйвера e1000e. Установка vm.min_free_kbytes для удвоения текущего значения предотвращает их. __alloc_pages_slowpath (), вероятно, безопасен для повторного входа.

Обновление: (1) это "нормальное поведение", когда огромные следы стека печатаются в системном журнале ядра Linux, когда драйвер сетевого устройства пытается выделить страницу и считает, что это невозможно. (2) кто-то представил патч, и в течение шести месяцев он игнорировался, пока я не попросил его продолжить установку патча. После этого сеть KVM / qemu virtio перестала блокироваться, когда виртуальным машинам не хватало памяти. (3) альтернативы Linux мне, к сожалению, хуже использовать для реальной работы.

...