LINUX.ORG.RU
ФорумTalks

В ядре Linux обнаружили смешной баг, отключающий USB-устройства

 ,


0

1

Один из разработчиков ядра Linux Сара Шарп из компании Intel посыпает голову пеплом: за восемь лет работы над стеком Linux USB они неоднократно сталкивались с ситуацией, когда USB-устройство внезапно отключалось после выхода из режима ожидания при включенной функции auto-suspend. Все это время проблему списывали на китайских производителей дешевых флэшек, мышек и клавиатур. Обсуждалась даже идея внедрить «черный список» моделей таких устройств прямо в ядро, чтобы для них не активировался режим энергосбережения. От идеи отказались только когда стало ясно, что список будет слишком большим: так много было USB-устройств, которые вели себя некорректно.

Сейчас выяснилось, что сбои не всегда были аппаратными.

В коде хост-контроллера Intel xHCI (drivers/usb/core/hub.c) есть строчка с лаконичным комментарием «TRSMRCY = 10 msec». В соответствии с пунктом 7.1.7.7 спецификаций USB 2.0, система USB System Software должна обеспечить время в 10 миллисекунд для восстановления работы устройства, в течение которых не отправлять на него никаких запросов. В ядро Linux просто вставили таймаут 10 мс. Но специалисты по аппаратному обеспечению сейчас обратили внимание разработчиков ядра Linux, что в таблице 7-14 спецификаций USB 2.0 указано, что таймаут должен быть минимум 10 миллисекунд, а не максимум. Это означает, что устройство может восстанавливаться дольше, чем сейчас установлено в строке TRSMRCY в Linux USB. В таких случаях при попытке обратиться к нему может возникнуть ошибка передачи данных — тогда операционная система считает устройство отключенным.

Тесты показали, что выход устройства из спящего режима никогда не занимает больше 17 мс, но в 8% случаев превышает 10 мс. Для исправления бага достаточно увеличить значение таймаута с 10 до 20 мс, после чего все USB-устройства начнут нормально работать. Сара Шарп уже подготовила патч.

Разработчики говорят, что больше всего от бага страдают пользователи ChromeOS, потому что эта система очень агрессивно использует режим энергосбережения для USB, активируя auto-suspend для всех внутренних USB-устройств, включая WiFi и Bluetooth.

(c) x
UDP: Посоны, расходимся

I guess the xHCI hardware engineers just assumed software would always wait for the interrupt from the port status change event, rather than using a simple 10 ms timer. I bet they didn't even realize that that the transition took longer than 10ms, because Windows waited for the port status change event.

(c) src



Последнее исправление: cetjs2 (всего исправлений: 2)

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

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

там ралинк и пиппириеритарирная прошивка, не круто

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

Не знаю у кого оно там отваливается, а у меня usb и pci atheros'ы норм работают и не отваливаются

что я могу сказать - повезло. Но твоей заслуги в этом нет. Многим - не повезло.

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

То есть на 2 из 3 ядер 12.04 не работает, но реклама всё равно убунте? Убунтуюзеры такие убунтуюзеры %)

ты так говоришь, как будто в дебиане другие ядра

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

Такой вывод только у упоротых может получиться.

ну да, конечно. А в 3.2 всё работало благодаря молитвам.

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

Костылям скорее, но если ты такой набожный, то помолись, авось и в 3.8 заработает. У меня на 2х ноутах адаптеры от атероса работают и не отваливаются. Так же с помощью адаптера TP-Link TL-WN822N построена точка доступа и с ней проблем тоже нет.

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

У меня

аргумент. Сразу показывает интеллектуальный уровень, ведь если у кого-то работает - значит у всех должно работать.

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

Аналогично с твоей стороны: если у тебя не работает, значит у всех не работает

для тупых могу процитировать себя же:

что я могу сказать - повезло. Но твоей заслуги в этом нет. Многим - не повезло.

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

Для тебя, как для альтернативно одарённого, ещё раз повторю, что в большинстве тредов про отваливающийся или не работающий вафляй выясняется, что проблема таки в ACPI. Но ты продолжай думать что виноваты чипы от атероса и дрова.

daemonpnz ★★★★★
()
Последнее исправление: daemonpnz (всего исправлений: 1)
Ответ на: комментарий от daemonpnz

Для тебя, как для альтернативно одарённого, ещё раз повторю, что в большинстве тредов про отваливающийся или не работающий вафляй выясняется, что проблема таки в ACPI.

объясни альтернативно одаренному, почему проблем с ACPI нет в старых ядрах?

Но ты продолжай думать что виноваты чипы от атероса и дрова.

нет, наверняка виноват пользователь. Или ктулху. Или ЛЛМ. А святые мантейнеры ядра святые, и ошибок не совершают

(из под-ковра за тредом внимательно наблюдает 12309)

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

В твоем положении не укоризну надо демонстрировать, а сожаление %)

ты меня затролел

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

ибо подпорки в виде костылей были, а потом их взяли и убрали.

«долбитесь конем, дорогие пользователи», да?

во-первых, все подпорки в ядре помечены - и их просто так не убирают. Во-вторых, регрессии могут возникнуть на ровном месте в любой подсистеме - это не значит, что там были подпорки, которые убрали. Я ставлю на регрессию, причем скорее всего эта регрессия в нескольких местах, судя по букету проблем с atheros. Та же хрень, что и с 12309, а следовательно ждать быстрого исправления не приходится (

geek ★★★
()

О, может, у меня сканер по этой причине через раз распознается, и иногда после сканирования N страниц отваливается. Будем ждать фикса.

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

судя по букету проблем с atheros

судя по букету предвзятого отношения к atheros вашей стороны и нежеланию открыть глаза и посмотреть на проблему с другой стороны

Та же хрень, что и с 12309

ага, давненько я его кстати не наблюдал

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

судя по букету предвзятого отношения к atheros вашей стороны

ммм. Я где-то писал, шо атерос говно? Наоборот, я писал, что всё работало, пока чьи-то кривые ручки не приняли в ядро пачку чьих-то кривых патчей )

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

Кривые руки производителя твоей мамки или ноутбука, инфа 146%

если бы это было так - то не работало бы и на старых ядрах.

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

Пользователи ChromeOS должны страдать!

Как и пользователи Linux на десктопе вообще.

wintrolls ☆☆
()
Ответ на: комментарий от geek

Это же фанатики — они в параллельной вселенной живут. У них спеки кривые и флешки китайские, одно лишь ядро святое. Что с них взять.

wintrolls ☆☆
()

Может быть им создать какую-нибудь комиссию, которая перероет ядро на баги и уязвимости?

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

Может быть, достаточно вежливо попросить у АНБ

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

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

То-то там одно из самых распространенных слов в комментариях — «fuck».

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

Как и при любом труде, в общем-то.
А конкретно эта тетка недавно дополнительно прославилась срачем на тему «вежливости» в рассылке.

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

неверно: просто какие-то умники в cannonical compat-wireless вкомпилили только в ядро 3.2 для 12.04

для 3.2 cw присутствует в виде отдельного пакета, впрочем, как и для 3.5. И да, ни установка cw для версий старше 3.2, ни компиляние вручную неюзабельность atheros не исправляют.

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