информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаГде водятся OGRыЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 ФБР нашла русский след в атаках... 
 Массовый взлом SharePoint 
 Microsoft Authenticator прекращает... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / operating systems
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[NT] Управление питанием 22.01.03 12:12  Число просмотров: 1422
Автор: Sandy <Alexander Stepanov> Статус: Elderman
<"чистая" ссылка>
> На днях отлаживал драйвер, нашел свою ошибку, исправил. Но
> по-пути пришел к выводу что в системе управления питанием
> W2K/XP и т.д. возможен "корректный" deadlock.
> Возможно что я ошибаюсь, вот собственно поэтому и хочу
> обсудить...
>
> 1) Имеем два устройства "bus enumerator" - BusFDO и его
> "child device" - ChildPDO. Оба устройства без
> DO_POWER_INRUSH;
> 2) Предположим что в некоторый момент времени BusFDO был в
> PowerDeviceD1, а ChildPDO в PowerDeviceD2;
> 3) Далее юзер начинает использовать ChildPDO, и
> function-драйвер над ChildPDO запускает запрос на
> PowerDeviceD0 для стека ChildPDO;
> 4) Предположим, что одновременно с этим истекает интервал
> IdleDetection для BusFDO, и "Power Manager" запускает
> запрос на PowerDeviceD3 для BusFDO (или еще как-нибудь
> возникает запрос на PowerDeviceD3);
> 5) Далее bus-драйвер для ChildPDO запускает запрос на
> PowerDeviceD0 для BusFDO и ждет результата, при этом
> power-стек ChildPDO остается занятым;
> 6) Но и стек BusFDO уже занят запросом PowerDeviceD3,
> причем драйвер BusFDO сначала выключит все
> child-устройства, и только потом продолжит обработку
> запроса на PowerDeviceD3;
> 7) В итоге получается deadlock между запросами, и его
> нельзя просто "развязать" в bus-драйвере, потому что
> обработка power-запросов должна быть последовательной хотя
> и асинхронной, и всегда начинаться с верхушки стека;
>
> Ну хоть кто-нибуть что-нибудь понял ?

А разве повер манагер по таймауту от повердевайса0 не отвалится?
<operating systems>
[NT] Управление питанием 22.01.03 11:25  
Автор: leo <Леонид Юрьев> Статус: Elderman
<"чистая" ссылка>
На днях отлаживал драйвер, нашел свою ошибку, исправил. Но по-пути пришел к выводу что в системе управления питанием W2K/XP и т.д. возможен "корректный" deadlock.
Возможно что я ошибаюсь, вот собственно поэтому и хочу обсудить...

1) Имеем два устройства "bus enumerator" - BusFDO и его "child device" - ChildPDO. Оба устройства без DO_POWER_INRUSH;
2) Предположим что в некоторый момент времени BusFDO был в PowerDeviceD1, а ChildPDO в PowerDeviceD2;
3) Далее юзер начинает использовать ChildPDO, и function-драйвер над ChildPDO запускает запрос на PowerDeviceD0 для стека ChildPDO;
4) Предположим, что одновременно с этим истекает интервал IdleDetection для BusFDO, и "Power Manager" запускает запрос на PowerDeviceD3 для BusFDO (или еще как-нибудь возникает запрос на PowerDeviceD3);
5) Далее bus-драйвер для ChildPDO запускает запрос на PowerDeviceD0 для BusFDO и ждет результата, при этом power-стек ChildPDO остается занятым;
6) Но и стек BusFDO уже занят запросом PowerDeviceD3, причем драйвер BusFDO сначала выключит все child-устройства, и только потом продолжит обработку запроса на PowerDeviceD3;
7) В итоге получается deadlock между запросами, и его нельзя просто "развязать" в bus-драйвере, потому что обработка power-запросов должна быть последовательной хотя и асинхронной, и всегда начинаться с верхушки стека;

Ну хоть кто-нибуть что-нибудь понял ?
[NT] Управление питанием 22.01.03 12:12  
Автор: Sandy <Alexander Stepanov> Статус: Elderman
<"чистая" ссылка>
> На днях отлаживал драйвер, нашел свою ошибку, исправил. Но
> по-пути пришел к выводу что в системе управления питанием
> W2K/XP и т.д. возможен "корректный" deadlock.
> Возможно что я ошибаюсь, вот собственно поэтому и хочу
> обсудить...
>
> 1) Имеем два устройства "bus enumerator" - BusFDO и его
> "child device" - ChildPDO. Оба устройства без
> DO_POWER_INRUSH;
> 2) Предположим что в некоторый момент времени BusFDO был в
> PowerDeviceD1, а ChildPDO в PowerDeviceD2;
> 3) Далее юзер начинает использовать ChildPDO, и
> function-драйвер над ChildPDO запускает запрос на
> PowerDeviceD0 для стека ChildPDO;
> 4) Предположим, что одновременно с этим истекает интервал
> IdleDetection для BusFDO, и "Power Manager" запускает
> запрос на PowerDeviceD3 для BusFDO (или еще как-нибудь
> возникает запрос на PowerDeviceD3);
> 5) Далее bus-драйвер для ChildPDO запускает запрос на
> PowerDeviceD0 для BusFDO и ждет результата, при этом
> power-стек ChildPDO остается занятым;
> 6) Но и стек BusFDO уже занят запросом PowerDeviceD3,
> причем драйвер BusFDO сначала выключит все
> child-устройства, и только потом продолжит обработку
> запроса на PowerDeviceD3;
> 7) В итоге получается deadlock между запросами, и его
> нельзя просто "развязать" в bus-драйвере, потому что
> обработка power-запросов должна быть последовательной хотя
> и асинхронной, и всегда начинаться с верхушки стека;
>
> Ну хоть кто-нибуть что-нибудь понял ?

А разве повер манагер по таймауту от повердевайса0 не отвалится?
[NT] Re: А разве 22.01.03 13:02  
Автор: leo <Леонид Юрьев> Статус: Elderman
<"чистая" ссылка>
> А разве повер манагер по таймауту от повердевайса0 не
> отвалится?

Как он может отвалиться если на стеке активный IRP-запрос без IoCancel.
[NT] Тады "Ой!"... :) Видимо, будет клинч... 22.01.03 15:14  
Автор: Sandy <Alexander Stepanov> Статус: Elderman
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach