मैं लिनक्स कर्नेल के लिए एफपीजीए ड्राइवर पर काम कर रहा हूं। कोड x86 पर ठीक काम करता प्रतीत होता है, लेकिन x86_64 पर मुझे कुछ समस्याएं आई हैं। मैंने स्ट्रीमिंग डीएमए लागू किया। तो यह जाता हैपीसीआईई लिनक्स कर्नेल ड्राइवर में स्ट्रीमिंग डीएमए
get_user_pages(...);
for (...) {
sg_set_page();
}
pci_map_sg();
लेकिन pci_map_sg
तरह 0xbd285800
जैसे पतों का है, जो PAGE_SIZE
से गठबंधन नहीं कर रहे हैं लौट आए, तो मैं पूर्ण पहले पृष्ठ नहीं भेज सकते, क्योंकि PCIE विनिर्देश कहते
"अनुरोध उल्लेख नहीं होना चाहिए एक पता/लंबाई संयोजन जो को 4-केबी सीमा पार करने के लिए मेमोरी स्पेस एक्सेस का कारण बनता है। "
क्या गठबंधन पते प्राप्त करने का कोई तरीका है, या क्या मैंने अभी कुछ महत्वपूर्ण याद किया है?
क्या आप अपने असली स्रोत से कोड शामिल कर सकते हैं? बग को खोजने के लिए पर्याप्त नहीं है। –
हाँ, ज़ाहिर है। मूल पोस्ट से जुड़ा हुआ है। – soh
@soh: इसे जनता को छोड़ने की कोई योजना है? मैं एक खुले ड्राइवर के लिए चारों ओर देख रहा था और एक अच्छा नहीं मिला। खुद को लिखने के लिए बहुत आलसी होने के नाते, मैं योगदान करने और परीक्षण में सहायता करने के लिए खुश हूं। –