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)