2013-09-21 2 views
1

이것은 Linux (드라이버 관련)에 대한 질문입니다. 대규모 DMA 액세스 (멀티 메가 바이트 읽기 또는 쓰기, CUDA 카드 또는 네트워크 카드에 대해 생각할 수 있음)를 수행 할 수있는 하드웨어가 있다고 가정합니다. 장치와주고받는 데이터는 사용자 공간에 할당되고 사용자 공간에 배치됩니다.DMA가 보류중인 페이지를 munlock하려고 시도했습니다.

따라서 올바른 방법은 DMA로 액세스 할 메모리 범위 인 mlock()입니다. 그런 다음 사용자 프로세스가 내 드라이버에게 전화를 걸어 DMA 전송을 시작합니다. 전송이 시작되면 내 사용자 공간 프로세스가 다른 스레드에서 계속 작동합니다.

나중에 데이터가 전송되었다고 생각하면 munlock() 사용자 공간 스레드의 메모리 범위를 사용하고 싶습니다.

정상인가요? 실제 DMA 전송이 끝나기 전에 munlock()으로 전화하면 어떻게됩니까?

munlock() 성공 또는 실패할까요? 또는 DMA 전송이 완료 될 때까지 차단됩니까?

PS : question is originally Zan Lynx, id13422, SO.

답변

1

DMA에 사용되는 모든 메모리를 잠그고 잠금 상태를 유지하는 것은 장치 드라이버의 책임입니다.

메모리가 이미 잠겨 있으면 드라이버가 너무 빨리 잠금 해제되지 않도록 페이지에 대한 추가 참조를 가져와야합니다.

관련 문제