주석 보니까 virt_to_phys 는 드라이버에서 쓰지 말라고 되어있던데
(제가 영어를 잘못해석했을 수도 있습니다)
여태까지 아무런 의심없이 커널영역에서 물리적으로 contiguous 한 kmalloc 같은 함수들을 물리주소로 바꿔서 dma 보내곤 했었거든요?
실제로 intel 네트웤 드라이버에도 그런 코드가 많이 있었던거 같은데 당황스럽네요
아무 생각 없이 그냥 썼었거든요
내가 여태 만들었던게 다 잘못된건가 하는 멘붕이 오더군요
대충 어감이 웬지 직접 주소 변환 해도 되긴하는데 유저가 만드는 드라이버 레벨에서 위험하니까 dma 래핑함수 쓰시오 그런거 같은데 맞나요?
쓰면 패닉나니까 절대로 쓰지마시오 이런건 아닌거 같은데
커널 dma제공 함수는 용량도 작고 scatterlist 같은거도 느리고? 복잡하고 그렇기도 하고
대용량 필요하면 cma같은거 쓰라 이말인가요?
몰랐는데 cma가 dma 하부 시스템으로 존재하는거 같기도하고(써본적은 없습니다)
댓글 0