December 18th, 2014

Book

(no subject)

Некий бородач-железячник из Broadcom написал в 2012-2013 годах на перле (!) декомпилятор DMTF MOF-файлов, возвращаемых ACPI BIOS в качестве метаданных.

Это я продолжаю исследования кнопочек и лампочек. Как выяснилось, с лампочками у меня аппаратная проблема: отходит контакт где-то, и три из лампочек (винт, капс и вайфай) перестают работать. А так - капс и винт управляются безо всякой поддержки ОС.

В-общем, в легаси-режиме с eeepc-laptop работает теперь вообще всё. Для включения достаточно добавить acpi_osi=Linux в строку ядра и изрядно пропатчить скрипты acpi-eeepc-generic (пулл-реквесты все отправил).

C resume проблема решилась неожиданно: арчеводы наложили на стоковое ведро 3.17.6 сырой патч, которого пока нет в апстриме.

Касательно истории с декодером волшебных чисел. Новый драйвер правильно декодирует около половины кнопочек. Но волшебные числа, которыми он пользуется в режиме ядра, отличаются от волшебных чисел, приходящих в юзермод при использовании старого драйвера! Т.е. таблицу волшебных чисел для 100500 моделей (только еее моделей 36 штук), использующуюся старым подходом, заюзать не удастся!
Book

Обработка ошибок в ядре

http://lxr.free-electrons.com/source/drivers/platform/x86/asus-wmi.c#L1752

Идея там такова:
mFoo <- initFoo
case mFoo of
    Just foo -> do
        mBar <- initBar
        case mBar of
             Just bar -> return $ Just (foo, bar)
             Nothing -> doneFoo foo >> return Nothing
    Nothing -> return Nothing
Как такие транзакции (done == rollback) делать правильно для длинных цепочек?