"Легальный" 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)