6

क्या कोई शरीर बता सकता है कि क्यों एमएसआई इंटरप्ट लिनक्स में साझा नहीं किया जा सकता है।एमएसआई इंटरप्ट क्यों साझा नहीं किए जाते हैं?

पिन आधारित इंटरप्ट को डिवाइस द्वारा साझा किया जा सकता है, लेकिन एमएसआई इंटरप्ट्स डिवाइस द्वारा साझा नहीं किए जाते हैं, प्रत्येक डिवाइस को अपना स्वयं का एमएसआई आईआरक्यू नंबर मिलता है। एमएसआई इंटरप्ट क्यों साझा नहीं किया जा सकता है?

उत्तर

4

इंटरप्ट शेयरिंग संसाधन बाधाओं के कारण एक हैक है, जैसे ध्यान देने वाले प्रत्येक डिवाइस के लिए पर्याप्त भौतिक आईआरक्यू लाइन नहीं है। यदि इंटरप्ट्स उन संदेशों द्वारा दर्शाए जाते हैं जिनके पास बड़ी आईडी स्पेस है, तो आप ऐसा क्यों करेंगे?

"वह" अर्थ: उन्हें एक ही पहचान दे रहा है ताकि डिवाइस को जांचने की आवश्यकता हो कि यह पता लगाने के लिए कि कौन सी आईडी वास्तव में बाधित होती है।

असल में, हम कभी-कभी एक डिवाइस के लिए कई इंटरप्ट्स करना चाहते हैं। उदाहरण के लिए, यह उपयोगी है अगर इंटरप्ट आईडी हमें न बताती है कि कौन सा डिवाइस केवल बाधित नहीं करता है: जैसे इनपुट के आने या आउटपुट बफर की निकासी के कारण यह क्यों है? यदि इंटरप्ट लाइनें "सस्ती" हैं क्योंकि वे केवल बिट्स के साथ सॉफ़्टवेयर आईडी हैं, तो हम इसे प्राप्त कर सकते हैं।

5

वर्ष INTx बीच दो समस्याग्रस्त गुण होते हैं:

  1. प्रत्येक INTx संकेत हार्डवेयर में एक अलग संकेत लाइन की आवश्यकता है; और
  2. इंटरप्ट सिग्नल अन्य डेटा सिग्नल से स्वतंत्र है, और यह असीमित रूप से भेजा जाता है।

परिणाम है कि

  1. कई उपकरणों और ड्राइवरों (व्यवधान हैंडलर अगर इसकी डिवाइस वास्तव में बाधा उठाया जाँच करने के लिए की जरूरत है) बीच में आता है साझा करने के लिए सक्षम होना चाहिए रहे हैं; और
  2. जब ड्राइवर को कोई बाधा प्राप्त होती है, तो यह सुनिश्चित करने के लिए कि डिवाइस द्वारा किए गए किसी भी पिछले डीएमए लिखने से CPU पर दिखाई दे, कुछ डिवाइस रजिस्टर को पढ़ने की आवश्यकता है।

आमतौर पर, दोनों मामलों को ड्राइवर द्वारा अपने डिवाइस के इंटरप्ट स्थिति रजिस्टर को पढ़ने के द्वारा संभाला जाता है।

संदेश-सिग्नल इंटरप्ट्स को एक अलग सिग्नल लाइन की आवश्यकता नहीं है लेकिन डेटा बस पर एक संदेश के रूप में भेजा जाता है। इसका अर्थ यह है कि वही हार्डवेयर कई और इंटरप्ट्स का समर्थन कर सकता है (इसलिए इसे आवश्यक नहीं साझा करना), और यह कि इंटरप्ट संदेश स्वचालित रूप से किसी भी डीएमए एक्सेस के साथ सिंक्रनाइज़ किया जाता है। नतीजतन, बाधा हैंडलर को कुछ भी करने की आवश्यकता नहीं है; बाधा को अपने डिवाइस से आने की गारंटी है, और डीएमएड डेटा पहले ही पहुंचने की गारंटी है।

यदि कुछ ड्राइवर कुछ एमएसआई साझा करने के लिए लिखे गए थे, तो इंटरप्ट हैंडलर को फिर से यह जांचना होगा कि अंतराल वास्तव में अपने डिवाइस से आया है, और आईएनटीएक्स इंटरप्ट्स पर कोई फायदा नहीं होगा।

MSIs साझा नहीं किया जाता है क्योंकि यह संभव नहीं होगा, लेकिन क्योंकि यह आवश्यक नहीं है।


कृपया ध्यान दें कि एक MSI साझा करने वास्तव में संभव है: उन्नत त्रुटि रिपोर्टिंग, विद्युत प्रबंधन घटनाक्रम के रूप में /proc/interrupts से इस अंश में देखा, और हॉटप्लगिंग ड्राइवरों एक बाधा का हिस्सा:

64:   0   0 PCI-MSI-edge  aerdrv, PCIe PME, pciehp 

ये ड्राइवर वास्तव में समान डिवाइस से जुड़े हुए हैं, लेकिन वे अभी भी आईएनटीएक्स ड्राइवरों के समान व्यवहार करते हैं, यानी वे IRQF_SHARED के साथ अपने बाधा को पंजीकृत करते हैं, और इंटरप्ट हैंडलर जांचते हैं कि यह उनका स्वयं का कार्य था जो बाधा उत्पन्न करता था।

संबंधित मुद्दे