NdisDprAcquireSpinLock
VOID
NdisDprAcquireSpinLock(
IN PNDIS_SPIN_LOCK SpinLock
);
|
NdisDprAcquireSpinLockÇÔ¼ö´Â ½ºÇÉ ¶ôÀ» Çã¿ëÇØ¼ È£ÃâÀÚ°¡ ¸ÖƼ ÇÁ·Î¼¼¼-safe¹æ¹ýÀ¸·Î nonISRµå¶óÀ̹ö ÇÔ¼öµé»çÀÌÀÇ °øÀ¯µÈ ¸®¼Ò½ºµå¿¡ µ¿±âÀûÀ¸·Î Á¢±ÙÇÒ¼ö ÀÖµµ·Ï ÇÑ´Ù.
¸Å°³º¯¼ö
- SpinLock
- È£ÃâÀÚ¿¡ ÀÇÇØ ÀÌ¹Ì ÃʱâÈµÈ ¸ðÈ£ÇÑ ½ºÇÉ ¶ôÀÇ Æ÷ÀÎÆ®.
ÁÖ¼®
¾î¶² ´Ù¸¥ Ndis..SpinLockÇÔ¼öµéÀ» È£ÃâÇϱâÀü¿¡, ´Ð µå¶óÀ̹ö´Â NdisAllocateSpinLockÇÔ¼ö·Î NDIS_SPIN_LOCKŸÀÔÀÇ º¯¼ö¸¦ ÃʱâÈ ÇØ¾ß¸¸ÇÑ´Ù. µå¶óÀ̹ö´Â »ç¿ëÇÒ ½ºÇÉ ¶ô(µé)À» À§ÇÑ »óÁÖ ÀúÀå°ø°£À» Á¦°øÇؾ߸¸ÇÑ´Ù.
NdisDprAcquireSpinLockÇÔ¼ö´Â ¹Ì´ÏÆ÷Æ®°¡ IRQL DISPATCH_LEVEL¿¡¼ µ¿À۵ɵ¿¾È¸¸ È£Ã⠵ɼö ÀÖ´Â NdisAcquireSpinLockÇÔ¼öÀÇ ¼±ÅÃÀûÀÎ ¹öÀüÀÌ´Ù.
NdisDprAcquireSpinLockÇÔ¼ö·Î ½ºÇÉ ¶ôÀ» Çã¿ëÇÑÈÄ, È£ÃâÀÚ´Â NdisDprReleaseSpinLockÇÔ¼öÀÇ È£Ãâ·Î ¶ôÀ» ÇØÁ¦Çؾ߸¸ÇÑ´Ù. ´Ð µå¶óÀ̹ö´Â °¢°¢ NdisDprAcquireSpinLockÇÔ¼öÀÇ È£ÃâÀ» µû¸£´Â NdisDprReleaseSpinLockÇÔ¼ö¸¦ È£ÃâÇØ¾ß¸¸ ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, µå¶óÀ̹ö¸¦ ÇàÇÏ´Â µ¥µå¶ôÀÌ ¹ß»ýÇÑ´Ù.
NdisDprAcquireSpinLockÇÔ¼ö·Î ½ºÇÉ ¶ôÀ» Çã¿ëÇϴ°ÍÀº NdisDprReleaseSpinLockÇÔ¼ö·Î ÇØÁ¦µÇ¾î¾ß ÇÑ´Ù. NdisAcquireSpinLockÇÔ¼ö·Î Çã¿ëÇÏ´Â ½ºÇɶôÀº NdisReleaseSpinLockÇÔ¼ö·Î ÇØÁ¦µÇ¾î¾ß ÇÑ´Ù.
µå¶óÀ̹ö´Â È®ÀåµÈ ±â°£(¸î¸î ¼öÇàÀÌ»ó)µ¿¾È¿¡´ëÇÑ ½ºÇÉ ¶ôÀ» Àâ°í ÀÖÀ¸¸é Àý´ë ¾ÈµÈ´Ù. 25¸¶ÀÌÅ©·ÎÃÊ ÀÌ»óÀÇ ½ºÇɶô ¼ÒÀ¯´Â ½Ã½ºÅÛ°ú µå¶óÀ̹ö ÆÛÆ÷¸Õ½º¸¦ ¶³¾î¶ß¸°´Ù.
¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö´Â ¹Ì´ÏÆ÷Æ®ÀÇ ´Ù¸¥ ÇÔ¼öµéÀÌ MiniportISR ¿Í/ȤÀº MiniportDisableInterruptÇÔ¼öµé·Î °øÀ¯ÇÏ´Â ¸®¼Ò½ºµéÀ» º¸È£ÇϱâÀ§ÇØ ½ºÇÉ ¶ôÀ» »ç¿ëÇÑ´Ù. ´ë½Å, ¹Ì´ÏÆ÷Æ®´Â NdisMSynchronizeWithInterruptÇÔ¼ö¸¦ È£ÃâÇÏ¿© MiniportSynchronizeISRÇÔ¼ö°¡ MiniportISR ¿Í/ȤÀº MiniportDisableInterruptÇÔ¼ö°¡ »ç¿ëÇÏ´Â °°Àº DIRQL¿¡¼ ±×·± °øÀ¯µÈ ¸®¼Ò½ºµéÀ» Á¢±ÙÇÑ´Ù.
NdisDprAcquireSpinLockÇÔ¼öÀÇ È£ÃâÀÚ´Â IRQL DISPATCH_LEVEL¿¡¼ µ¿À۵Ǿî¾ß¸¸ ÇÑ´Ù.
|