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)

Она сама пилила usb стек и сама же исправила ошибку! Женщины они такие...

gh0stwizard ★★★★★
()

Ааааа теперь понятно почему ТП-Линк 822 отваливался.
Одна из версий. Ох ши~ он у меня при нагрузке отпадал.

Deleted
()

И эти люди еще ругаются на Линуса за его ругань.

iSage ★★★★
()

это еще ничего, вон в шиндошс 81 при выходе из suspend (без разницы to ram или to disk) отваливается atheros wi-fi, причем починить это можно только перезагрузкой (даже включение/выключение не катит, потому что мелкомягкие запилили в венде аналог preload)

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

может быть, у меня

24:00.0 Network controller: Atheros Communications Inc. AR9285 Wireless Network Adapter (PCI-Express) (rev 01)

под линуксом все работает, естественно

BMX ★★☆
()
Последнее исправление: BMX (всего исправлений: 1)
Ответ на: комментарий от BMX
krab@notebook:~$ lspci | grep Wireless
05:00.0 Network controller: Atheros Communications Inc. AR9285 Wireless Network Adapter (PCI-Express) (rev 01)

Все вопрядке. Другое дело что у меня под современными линуксами уже 2 года не работает ни suspend, ни hibernate. Абанта, фёдура, опенсасе.

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

Почему так долго обнаруживали?

Потому что Сара разводила феминизм вместо написания кода и тестов.

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

странно, а венда точно 8.1 enterprise preview?

я сначала думал, что проблем в bios'е, даже пробовал эмуляцию uefi - не помогает

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

Сара:

Well, shoot, I thought I had solved world hunger, or at least USB power management issues. :)

ttnl ★★★★★
()

страдают пользователи ChromeOS

Все целых два человека? Пускай страдают, рабам гугла положено использовать кривой софт.

В ядре Linux обнаружили смешной баг

Оборжаться, но в FreeBSD смешнее

druganddrop-2 ★★
()
Ответ на: комментарий от getup

На Хакере — слоупоки. Неправоту Саре объяснили утром 22 числа, а статья у них вышла 23-го.

Не проверяют информацию, которую публикуют.

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

Скандалы! Интриги! Расследования!

getup
() автор топика

Почитал рассылку. Саре должно быть стыдно привлекать сторонних специалистов для решения ее задач. Все обсасывают что значат цифры в спеках. Епрст, позвони инженерам из отдела разработки Intel usb и пусть они объяснят на пальцах! Или она прикрывается интелом, или интелу плеват на свою репутацию...

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

Да тьфу вас вендузятников, 8.0 естественно.

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

Это здесь причем? Они что там рабы? Общаться запрещено? Они вообще-то делают один и тот же продукт. Участие интела в разработке спецификаций достаточно велико. Но не обращаться к своим... работать в волчьей стае... я был более высокого мнения.

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

На OpenSuse 11.3 была подобная хня - через некоторое время переставала отзываться мыш и вообще повисал гуй... Лечилось, по одному из рецептов, через запрещение usb устройствам засыпать... Потом вышел 11.4 и лечить стало не нужно (11.3 был забыт как глюкодром).

slackwarrior ★★★★★
()

Это ничерта не смешно, потому что при использовании внешней звуковухи под все три основные ОС мой комп с высокой вероятностью виснет при выходе из спящего режима. Чтобы усыпить комп нужно вначале руками выключать питание звуковухи.

stevejobs ★★★★☆
()

In fact, the hardware doesn't provide any
means of telling whether they are ready or not.

triple facepalm

stevejobs ★★★★☆
()

ЛИНАКС ГЛЮКОДРОМ!!11

u283
()

Для исправления бага достаточно увеличить значение таймаута с 10 до 20 мс

Когда вашим костылям нужны костыли

buddhist ★★★★★
()

Люди, как вы думаете, почему у меня одно из шести USB на материнской плате не работает? Я в Debian 5 с ядром 2.6.32 отмонтировал флешку, с тех пор не работает. Даже не так - это KANOTIX LiveCD (сборка Debian), записанный на флешку. Он попросил меня извлечь флешку и нажать Enter, и вот с тех пор этот USB не работает. Потом я бесчисленное количество раз пользовался этой флешкой, но другие разъёмы не блокировались.

В чём может быть дело? Может я ошибаюсь и линукс вообще ни при чём? Мне кажется что флешка безопасно извлеклась, и потом выключилось питание, и разъём с тех пор завис в этом состоянии.

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

Мне кажется что флешка безопасно извлеклась, и потом выключилось питание, и разъём с тех пор завис в этом состоянии.

Квинтесенция твоего бреда. А ещё на серьёзные темы берёшься рассуждать.

daemonpnz ★★★★★
()

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

pekmop1024 ★★★★★
()

Все это время проблему списывали на китайских производителей дешевых флэшек, мышек и клавиатур. Обсуждалась даже идея внедрить «черный список» моделей таких устройств прямо в ядро, чтобы для них не активировался режим энергосбережения

Facepalm

в таблице 7-14 спецификаций USB 2.0 указано, что таймаут должен быть минимум 10 миллисекунд, а не максимум

Разработчики ведра не читают манов?

восемь лет работы над стеком Linux USB
В ядро Linux просто вставили таймаут 10 мс

А как же швабодка и „миллионы глаз” сообщества?

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

Не бред. Смотри.

1). Я нажимаю «Безопасно извлечь» на флешку, устройство /dev/sdb пропадает из системы. Потом я её вытаскиваю, снова вставляю, всё работает.

2). Или я нажимаю «Безопасно извлечь» на флешку, не вытаскиваю её, забываю о её существовании. Перезагружаюсь - и комп флешку не видит. Казалось бы, компьютер же перезагружался, теперь система должна видеть вставленную флешку! Но не видит. Нужно вытащить и вставить.

3). Или я нажимаю «Безопасно извлечь» на флешку, не вытаскиваю её. Вообще выключаю компьютер. Тем не менее, на устройства USB подаётся питание, мышка светится красным. После включения компьютера система всё ещё не видит вставленную флешку, её нужно вытащить и встравить.

4). Здесь должен был быть процитированный тобой отрывок текста, который ты считаешь бредом. После 3 пункта то, что я предполагаю, теоретически может произойти.

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

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

Клава и мышь ещё не так страшно: у меня переносные винты периодически отваливаются (упс, sdc пропал, о!, вижу sdd).

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

У меня такая хрень с айфоном иногда бывала. Раньше грешил на видавший виды кабель.

pekmop1024 ★★★★★
()

Ога, ога, «китайские» флешки, «кривое» acpi ... а всё оказалось гораздо проще. Типичный линукс-стайл.

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

При перезагрузке компьютера USB контроллер сбрасывается в исходное состояние. Банально потому что у него нет энергонезависимой памяти, чтобы сохранить свои настройки. При каждом включении он находится в состоянии «по умолчанию».

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

При КЗ или чём-то в этом роде может произойти локальный перегрев чипа. Ничего не загорится снаружи, но внутри микросхемы часть проводников нагреется до такой температуры чтобы перегореть. Благо они там очень тонкие.

А может быть и в другом смысле. При подаче +5В питания на линии данных может пробить напряжением затворы полевых транзисторов, установленных на линии данных (и рассчитанных на 3 с чем-то вольта).

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

это еще ничего, вон в шиндошс 81 при выходе из suspend (без разницы to ram или to disk) отваливается atheros wi-fi, причем починить это можно только перезагрузкой (даже включение/выключение не катит, потому что мелкомягкие запилили в венде аналог preload)

в этом вашем шлинупсе atheros wifi тупо периодически отваливается в версиях ведра > 3.2.0

geek ★★★
()

Разработчики говорят, что больше всего от бага страдают пользователи ChromeOS

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

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