LINUX.ORG.RU

баг в ядре?


0

0

2.6.17

kernel/softirq.c/ksoftirqd() - я так понял этого демона нормально не убивают т.к. поле kthread_stop_info.k ни где не выставляется:

int kthread_should_stop(void) {

return (kthread_stop_info.k == current);

}

Поправьте меня плиз или кто регулярно пишет/читает в mailinglist kernel напишите туда, мне подписываться не с руки на тонны писем, которые мне не очень нужны.


вопрос сформулирован с замечательной ясностью, не уверен, что понял...

единственная причина, по которой нужно убить этот kthread - это событие
CPU_DEAD. оно это и делает, см cpu_callback().

и не могу удержаться... вы такие простые вопросы задаете на этом форуме,
для ответа достаточно просто глянуть в исходники. и при этом не устаете
ругать код ядра ;)

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

Спасибо :)

Невнимательность... когда искал kthread_stop_info.k = ... пропустил:
int kthread_stop_sem(struct task_struct *k, struct semaphore *s)
{
...
	kthread_stop_info.k = k;
...
}


Спасибо :)

Тогда меня мучают сомнения, правильно ли я понимаю, что этот код будет выполняться толко на много процессорных машиах, которые поддерживают hotplug cpu?

static int ksoftirqd(void * __bind_cpu)
{
	set_user_nice(current, 19);
	current->flags |= PF_NOFREEZE;

	set_current_state(TASK_INTERRUPTIBLE);

	while (!kthread_should_stop()) {
...
}
 __set_current_state(TASK_RUNNING);
return 0;

wait_to_die:
preempt_enable();
/* Wait for kthread_stop */
set_current_state(TASK_INTERRUPTIBLE);
while (!kthread_should_stop()) {
schedule();
set_current_state(TASK_INTERRUPTIBLE);
}
__set_current_state(TASK_RUNNING);
return 0;
}


P.S. что ж его не ругать, тяжко читать код ;)

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

Ты хочешь сказать что если не SMP и нет хотплага, то программных прерываний нету?

По моему очень сложно понять, что ты спрашиваешь.

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

Я имею ввиду содержание функции cpu_callback()

Насколько я её понял, CPU_DEAD может быть, если есть CONFIG...HOTPLUG , т.е. только на SMP и hotplug cpu. Этак или нет? Или на одноядерном проце via CPU_DEAD рщездгп сзг тоже может сработать?

т.е. выставить поле .k = "указатель на структуру описвающую zlhjdjuj демона ksoftirqd"

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

> Насколько я её понял, CPU_DEAD может быть, если есть CONFIG...HOTPLUG ,
> т.е. только на SMP и hotplug cpu. Этак или нет?

да. (на всякий случай, suspend использует hotplug)

> P.S. что ж его не ругать, тяжко читать код ;)

так не читайте, но не ругайте тогда! :)

вот этот ваш вопрос, например.... cpu_callback() - это 45 строк. интересующий
вас код находится под "#ifdef CONFIG_HOTPLUG_CPU". без микроядерной архитектуры
не разобраться?

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

> без микроядерной архитектуры не разобраться?

Нельзя быть таким политизированным :-D

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

Тогда возникает вопрос: каким образом убивается демон ksoftirqd на однопроцессорных системах у которых нет CONFIG_HOTPLUG_CPU и соответсвенно состояний CPU_DEAD, которые я так понимаю могут быть только у многопроцессорных систем?

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

> Правильно ли я понимаю, что ksoftirqd на машинах без hotplug_cpu, без smp не может корректно убиваться?

У меня встречный вопрос - а зачем убивать ksoftirqd на однопроцессорной машине?

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

> Для того чтобы корректно завершить работу ядра.

Для этого нет никакой необходимости убивать ksoftirqd. Точно так же, как нет необходимости, например, снимать обработчики прерваний устройств.

tailgunner ★★★★★
()

Есть такое, вроде, в следующей версии ядра собираются пофиксить. Но как всегду - пофиксят одно, поломают другое

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