MSI 인터럽트 처리

NDIS는 NIC(네트워크 인터페이스 카드)에서 인터럽트를 생성할 때 MiniportMessageInterrupt 함수를 호출합니다. 이 함수의 MessageId 매개 변수는 MSI-X 메시지를 식별합니다.

메시지 인터럽트는 공유되지 않으므로 MiniportMessageInterrupt는 인터럽트를 처리한 후 항상 TRUE를 반환해야 합니다.

미니포트 드라이버는 MiniportMessageInterrupt 함수에서 가능한 한 적은 작업을 수행해야 합니다. 드라이버는 NDIS가 인터럽트의 지연 처리를 완료하기 위해 호출하는 MiniportMessageInterruptDpc 함수로 I/O 작업을 연기해야 합니다.

MiniportMessageInterrupt가 반환된 후 추가 DPC(지연 프로시저 호출)를 큐에 넣기 위해 미니포트 드라이버는 MiniportMessageInterrupt 함수의 TargetProcessors 매개 변수의 비트를 설정합니다. MiniportMessageInterrupt 또는 MiniportMessageInterruptDPC에서 추가 DPC를 요청하려면 미니포트 드라이버가 NdisMQueueDpc 함수를 호출할 수 있습니다.

미니포트 드라이버는 NdisMQueueDpc 를 호출하여 다른 프로세서에 대한 추가 DPC를 요청할 수 있습니다.

NDIS 6.1 이상 버전은 동일한 CPU에 대해 예약된 다른 메시지의 DPC가 별도로 큐에 대기되도록 보장합니다. 예를 들어 미니포트 드라이버가 CPU 1(메시지 0용 DPC 1개, 메시지 1의 경우 다른 DPC)에서 두 개의 DPC를 동시에 예약하는 경우 CPU 1(메시지 0이 있는 DPC 1개 및 메시지 1이 있는 다른 DPC)에 대해 두 개의 DPC가 큐에 대기됩니다.

또한 NDIS는 다른 CPU에서 예약된 동일한 메시지의 DPC가 별도로 큐에 대기되도록 보장합니다. 예를 들어 미니포트 드라이버가 두 개의 DPC(메시지 0의 경우 CPU 0의 DPC 1개, 메시지 0의 경우 CPU 1의 DPC 1)를 예약하는 경우 두 개의 개별 DPC가 CPU 0 및 CPU 1에서 큐에 대기합니다( 둘 다 메시지 0용).