[질문] 커널 메모리 할당 cache영역에 할당하지 않으려면?
글쓴이: pangjun / 작성시간: 수, 2004/08/25 - 10:06오전
모듈에서 __get_free_pages 로 메모리를 할당했습니다.
이 할당한영역을 mmap으로 유저에서 접근하려구 하거든요.
유저에서 이 영역에 데이트를 주루룩~~ 쓰고,
ioctl로 command 하나 날리면,
그 영역의 데이타를 모듈에서 주루룩~~ 읽어서 외부 디바이스로
전송해 주려고하는데요.
분명 유저에서 메모리에 다 write를 한다음에 모듈에서 읽어보면
제대로 update가 되지 않고 있구요,
한~~참.. (2-3초) 지난 다음에 읽어보면 update가 되어 있습니다.
모듈에서 메모리 할당할때 kmalloc이나 getpage 같은거 안쓰고,
커널에서 총 16M메모리중 15M만 할당하고 나머지 1M를
ioremap 한 다음 그넘을 uncached로 설정하면 잘되는데...
아무래도 get page나 kmalloc은 cache 로 잡혀서 그런것 같은데,
cache로 안잡는 방법이 없을까요?
찾아봐도 잘 못찾겟네요.
Forums:
cache corerency:- 필요할때마다 플러시 해주거나- U
cache corerency:
- 필요할때마다 플러시 해주거나
- Uncached 영역을 쓰면 됩니다.
low 16MByte 영역을 쓰시려면 GFP_DMA 플래그를 세트해주시면 됩니다. pci_alloc_consistent 나 dma_alloc_coherent 도 결국에는 다 비슷비슷하게 get_free_pages 로 종착이 되죠.
외부 디바이스가 PCI bus master라면 그냥 pci_alloc_consistent를 사용하면 해당 디바이스 정보에 맞게 알아서 해줄겁니다.
댓글 달기