LINUX.ORG.RU

scheduling while atomic


0

0

Есть модуль ядра, который должен совершать определенные действия
в ответ на действия пользователя, те запускать программу, используя
call_usermodehelper(). Так вот при попытке выполнения этой ф-и я в логе
вижу scheduling while atomic.....

перед вызовом call_usermodehelper() ставил spin_lock(), a после
spin_unlock(), но проблема осталась.

anonymous

Ну так чего не ясно. Ты пытаешься произвести sсheduling из atomic-контекста, чего делать нельзя... и локи здесь ИМХО нипричём. Измени контекст вызывающего процесса.

anonymous
()
Ответ на: комментарий от anonymous

внутри spin_lock() нельзя шедулится, юзерспейсная программа априори будет шедулится, вот ты и получаешь отлуп. Уберай спинлоки, меняй в лучшем случае на мьютексы, а лучше совсем убрать.

anonymous
()
Ответ на: комментарий от anonymous

> ×ÎÕÔÒÉ spin_lock() ÎÅÌØÚÑ ÛÅÄÕÌÉÔÓÑ,

×ÅÒÎÏ

> ÀÚÅÒÓÐÅÊÓÎÁÑ ÐÒÏÇÒÁÍÍÁ ÁÐÒÉÏÒÉ ÂÕÄÅÔ ÛÅÄÕÌÉÔÓÑ, ×ÏÔ ÔÙ É ÐÏÌÕÞÁÅÛØ ÏÔÌÕÐ.

ÎÅ ÓÏ×ÓÅÍ. ÔÏ, ÞÔÏ ÎÏ×ÙÊ ÐÒÏÃÅÓÓ ÛÅÄÕÌÉÔÓÑ, ÎÁÓ ÎÅ ×ÏÌÎÕÅÔ, ÉÍÅÎÎÏ ÐÏÔÏÍÕ,
ÞÔÏ ÜÔÏ ÄÒÕÇÏÊ ÐÒÏÃÅÓÓ.

ÒÕÇÁÅÃÃÏ ÖÅ ÏÎÏ ÐÏÔÏÍÕ, ÞÔÏ ÍÙ ÖÄÅÍ (ÓÐÉÍ) ÚÁ×ÅÒÛÅÎÉÑ ÜÔÏÇÏ ÐÒÏÃÅÓÓÁ, Á ÄÅÌÁÔØ
ÜÔÏ ÐÏÄ spinlock_t ÎÅÌØÚÑ.

ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ UMH_NO_WAIT, ÐÏ ÉÄÅÅ ÄÏÌÖÎÏ ÓÒÁÂÏÔÁÔØ, ÎÏ ×Ù ÎÅ ÕÚÎÁÅÔÅ
ÒÅÚÕÌØÔÁÔÁ call_usermodehelper().

idle ★★★★★
()
Ответ на: комментарий от idle

> ×ÎÕÔÒÉ spin_lock() ÎÅÌØÚÑ ÛÅÄÕÌÉÔÓÑ,

×ÅÒÎÏ

> ÀÚÅÒÓÐÅÊÓÎÁÑ ÐÒÏÇÒÁÍÍÁ ÁÐÒÉÏÒÉ ÂÕÄÅÔ ÛÅÄÕÌÉÔÓÑ, ×ÏÔ ÔÙ É ÐÏÌÕÞÁÅÛØ ÏÔÌÕÐ.

ÎÅ ÓÏ×ÓÅÍ. ÔÏ, ÞÔÏ ÎÏ×ÙÊ ÐÒÏÃÅÓÓ ÛÅÄÕÌÉÔÓÑ, ÎÁÓ ÎÅ ×ÏÌÎÕÅÔ, ÉÍÅÎÎÏ ÐÏÔÏÍÕ, ÞÔÏ ÜÔÏ ÄÒÕÇÏÊ ÐÒÏÃÅÓÓ.

ÒÕÇÁÅÃÃÏ ÖÅ ÏÎÏ ÐÏÔÏÍÕ, ÞÔÏ ÍÙ ÖÄÅÍ (ÓÐÉÍ) ÚÁ×ÅÒÛÅÎÉÑ ÜÔÏÇÏ ÐÒÏÃÅÓÓÁ, Á ÄÅÌÁÔØ ÜÔÏ ÐÏÄ spinlock_t ÎÅÌØÚÑ.

ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ UMH_NO_WAIT, ÐÏ ÉÄÅÅ ÄÏÌÖÎÏ ÓÒÁÂÏÔÁÔØ, ÎÏ ×Ù ÎÅ ÕÚÎÁÅÔÅ ÒÅÚÕÌØÔÁÔÁ call_usermodehelper().

idle ★★★★★
()
Ответ на: комментарий от anonymous

The problem is that call_usermodehelper() does wait_for_completion() and
thus schedules, this is not allowed under spin_lock().

You can use call_usermodehelper(UMH_NO_WAIT), this should work afaics in
any context, but this way you can't get the result of fork/exec.

It turns out I can't post koi-8 messages here. Bye LOR.

idle ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.