커널 2.6에서 kmalloc으로 할당한 메모리영역의 물리주소를 알려고 합니다.

virt_addr = kmalloc(...);
phys_addr = __pa(virt_addr);

이렇게해서 virt_addr이랑 phys_addr을 printk로 찍어보니깐 주소값이 동일하
네요... 제대로 된건지 안된건지 잘모르겠습니다.
조언좀 부탁합니다.


그리고 pci-x에 관해서 궁금한점이 있습니다.
지금 pci-x스펙을 fpga구현하고 pcb를 뜨고 pci-x슬롯에 꼿았습니다.
그리고 lspci -v, lspci -xxx등을 통해 커널(2.6(fedora core 2))에서 제대로
인식되는 것을 확인했습니다. pci-x는 커널 2.6부터 지원가능한것 맞나요??

그런데 아시겠지만 pci-x는 transaction때 보낼 데이타의 갯수를 attribute
phase에 알려주잖아요..

그렇다면 디바이스 드라이버에서 pci_find_device, pci_read_config_dword를
통해 base_address를 알아내고 실제 transaction을 하기 전에 transaction할
데이타의 갯수를 정해주는 함수가 있을듯한데 모르겠습니다.


질문들을 정리하면....
1. 2.6에서 kmalloc을 통해 얻는 메모리영역의 물리주소를 어떻게 알아내는가?
2. pci-x를 지원하는 커널은 버전 몇부터인가?
3. pci-x드라이버를 작성하기 위한 자료나 홈페이지나 아무것이라고 좀 알려주
세요~?

읽어주셔서 감사합니다.