"Легальный" deadlock при управлении питанием в W2K/XP
- From
- Gennady Mayko ()
- To
- Leo Yuriev ()
- Date
- 2003-01-22T13:04:39Z
- Area
- SU.WINDOWS.NT.PROG
From: "Gennady Mayko" <gennady.mayko@broadcom.com>
Добрый день!
LY> From: "Leo Yuriev" <ly@elcat.kg>
LY> Hi All,
LY> На днях отлаживал драйвер, нашел свою ошибку, исправил. Но по-пути пришел
LY> к выводу что в системе управления питанием W2K/XP и т.д. возможен
LY> "легальный" deadlock.
LY> Возможно что я ошибаюсь, вот собственно поэтому и хочу обсудить...
LY> 1) Имеем два устройства "bus enumerator" - BusFDO и его "child device" -
LY> ChildPDO. Оба устройства без DO_POWER_INRUSH;
LY> 2) Предположим что в некоторый момент времени BusFDO был в PowerDeviceD1,
LY> а ChildPDO в PowerDeviceD2;
LY> 3) Далее юзер начинает использовать ChildPDO, и function-драйвер над
LY> ChildPDO запускает запрос на PowerDeviceD0 для стека ChildPDO;
LY> 4) Предположим, что одновременно с этим истекает интервал IdleDetection
LY> для BusFDO, и "Power Manager" запускает запрос на PowerDeviceD3 для
LY> BusFDO (или еще как-нибудь возникает запрос на PowerDeviceD3);
LY> 5) Далее bus-драйвер для ChildPDO запускает запрос на PowerDeviceD0 для
LY> BusFDO и ждет результата, при этом power-стек ChildPDO остается занятым;
LY> 6) Но и стек BusFDO уже занят запросом PowerDeviceD3, причем драйвер
LY> BusFDO сначала выключит все child-устройства, и только потом продолжит
LY> обработку запроса на PowerDeviceD3;
LY> 7) В итоге получается deadlock между запросами, и его нельзя просто
LY> "развязать" в bus-драйвере, потому что обработка power-запросов должна
LY> быть последовательной хотя и асинхронной, и всегда начинаться с верхушки
LY> стека;
--
А кто является "power policy owner"? Насколько я знаю, только один из
драйверов в стеке драйверов может выполнять такую роль. А если я правильно
понял твое объяснение, здесь есть 2 драйвера в одном стеке, которые пытаются
управлять состоянием power. Нет ли здесь проблемы?
LY> Ну хоть кто-нибуть что-нибудь понял ?
LY> http://leo.yuriev.ru
--
C уважением,
Геннадий Майко.
--- ifmail v.2.15dev5
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)