Re: Spin locks

From
Alex Fedotov ()
To
Gennady Mayko
Date
2002-06-30T19:43:37Z
Area
SU.WINDOWS.NT.PROG
From: "Alex Fedotov" <me@alexfedotov.com>

Gennady Mayko wrote:

>  GM>> Поэтому, скоpее всего, не
>  GM>> имеет смысла говоpить о связях ID thread'а и ISR.
>
>  EM> Вот именно, а коppектно ли тогда использовать в качестве owner'а для
>  EM> spinlock'а идентификатоpа задачи, как это сделано в пpиведенном
>  EM> пpимеpе?
>  EM> По-моему, более пpавильно было бы использовать номеp пpоцессоpа.
> --
> Если я не ошибаюсь, речь идет о функции KSpin::Lock() из файла kspin.cpp,
> нет? Думаю, что она не предназначена для защиты данных между ISR и
> остальными функциями драйвера. Если этот случай исключить, то, IMHO,
> корректно использовать ID thread'а.
>
> Использование же номера процессора технически будет сложнее. Во-первых,
> судя по MSDN, получить номер процессора в kernel mode для текущего
> thread'a документированными средствами не удастся.

KeGetCurrentProcessorNumber.

> Во-вторых, если мы не ограничили специально AffinityMask для thread'a,
> нужно специально постараться, чтобы, с момента определения номера
> процессора, thread не переключился с него к тому времени, когда мы будем
> сравнивать owner'a для spinlock'a.

Для этого достаточно поднять IRQL до DISPATCH_LEVEL, что собственно и делают
обычные спин-локи в NT.

-- Alex Fedotov

--- ifmail v.2.15dev5
 * Origin: Demos online service (2:5020/400)