Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:2
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Отладочные платы » SK-iMX233
Ядро freescale из git
sasamy
Добавлено 30.01.2011 23:50 Редактировалось 30.01.2011 23:55 Сообщение: 21
sasamy
4.70

Пункты: 77333
Регистрация: 14.08.2009
Цитата

# BUG: scheduling while atomic: swapper/0/0x40000100
Modules linked in:


фрискейловцы славятся тем что суют мьютексы где надо и ненадо, в вашем случае они явно сунули его там где не должно его быть, похоже код выполняющийся в контексте softirq пытается уйти в состояние ожидания при захвате мьютекса, что для softirq недопустимо
Цитата

[<c035ccf8>] (mutex_lock+0x0/0x30) from [<c025550c>] (dcp_perform_op+0x15c/0x2dc)


смотрите код модуля dcp - сравните с тем что было в старом ядре. Я сейчас практически не занимаюсь этим, нет времени. Следите за изменениями в git - у них уже 3 бранча для ядра 2.6.35, возможно в последнем уже нет этой ошибки, я там патч специально сделал чтобы можно было быстро адаптировать для нашей платы новые ветки. В принципе если отключить crypto device в ядре проблема уйдет но с ней придет медленная работа wifi с програмным шифрованием.
Спуститься к концу Подняться к началу
Персональная информация
BallHome
Добавлено 31.01.2011 00:15 Сообщение: 22
BallHome
0

Пункты: 976
Регистрация: 27.09.2010
Пол: Мужчина
Спасибо, я понял, как разберусь - отпишусь, может кому пригодится.
Спуститься к концу Подняться к началу
Персональная информация
BallHome
Добавлено 31.01.2011 22:38 Сообщение: 23
BallHome
0

Пункты: 976
Регистрация: 27.09.2010
Пол: Мужчина
Итак, промежуточные результаты: кровь пили два мьютекса - один в файле "/.../drivers/crypto/dcp.c" функция "dcp_perform_op" и следом за ней вызывалась функция "dcp_clock", где то там, в глубине тоже был мьютекс. После комментирования пар "lock - unlock" - стало все чистенько, работает без сбоев. Зачем они там нужны, вот вопрос? Посмотрел в старом ядре - все также, а работало. Новые ветви из git пока не скачал, очень медленно тянет почему то...
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 01.02.2011 01:30 Редактировалось 01.02.2011 02:00 Сообщение: 24
sasamy
4.70

Пункты: 77333
Регистрация: 14.08.2009
Цитата
Зачем они там нужны, вот вопрос? Посмотрел в старом ядре - все также, а работало.


А вы там посмотрите конфиг - может dcp не включено было :) Очевидно что это критическая область и там нужен атомарный доступ, но они не учли что этот код может быть вызван в контексте softirq. Лучше замените соостветствующие мьютексы спин-блокировками, думаю там наиболее подходящий вариант

spin_lock_bh()/spin_unlock_bh()

он кроме блокировки отключает softirq к тому же может быть выван в любом контексте - в отличии от мьютексов на спин-блокировке поток не засыпает а находится в состоянии активного ожидания.
Спуститься к концу Подняться к началу
Персональная информация
BallHome
Добавлено 01.02.2011 07:33 Сообщение: 25
BallHome
0

Пункты: 976
Регистрация: 27.09.2010
Пол: Мужчина
Не, dcp включено.
Почитав про мьютексы в прерываниях, я именно так и решил сделать, как вы посоветовали - использовать спин-локи, уже начал реализовывать, посмотрим что получится.
Ядро с git я так и не смог скачать(:
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-iMX233