আমি এখনও অবধি যা পড়েছি তার অনুসারে, "যখন কার্নেলটি একটি বাধা পায়, তখন সমস্ত নিবন্ধিত হ্যান্ডলারের অনুরোধ করা হয়।"
আমি বুঝতে পারি যে প্রতিটি আইআরকিউর জন্য নিবন্ধিত হ্যান্ডলারের মাধ্যমে দেখা যেতে পারে /proc/interrupts
, এবং আমি আরও বুঝতে পারি যে নিবন্ধিত হ্যান্ডলারগুলি request_irq
ফর্মের একটি কলব্যাকটি পাস করার আহ্বান জানিয়েছে এমন ড্রাইভারদের কাছ থেকে এসেছে :
irqreturn_t (*handler)(int, void *)
আমি যা জানি তার উপর ভিত্তি করে, নির্দিষ্ট আইআরকিউ সম্পর্কিত এই প্রতিটি বাধা হ্যান্ডলার কলব্যাকগুলি আহ্বান করা উচিত এবং বাধাটি সত্যই এটির দ্বারা পরিচালনা করা উচিত কিনা তা নির্ধারণ করা হ্যান্ডলারের উপর নির্ভর করে। যদি হ্যান্ডলারটি বিশেষ বাধা না দেয় তবে এটি অবশ্যই কার্নেল ম্যাক্রোকে ফিরিয়ে আনবে IRQ_NONE
।
আমার বুঝতে সমস্যা হচ্ছে তা হ'ল, প্রতিটি ড্রাইভার কীভাবে এটি নির্ধারণ করতে পারে যে এটি বাধাগুলি পরিচালনা করবে কিনা। আমি মনে করি যদি তারা বাধা আশা করে বলে মনে করা হয় তবে তারা অভ্যন্তরীণভাবে ট্র্যাক রাখতে পারে। যদি তা হয় তবে আমি জানি না যে কীভাবে একই আইআরকিউর পিছনে একাধিক চালক বাধাগ্রস্থ হওয়ার প্রত্যাশা করে সেই পরিস্থিতিটি মোকাবেলা করতে সক্ষম হবেন।
আমি এই বিবরণগুলি বোঝার চেষ্টা করছি কারণ আমি kexec
একটি পিসিআই ব্রিজের রিসেট পিন এবং বিভিন্ন রেজিস্টারগুলির পাশাপাশি একটি ডাউনস্ট্রিম পিসিআইয়ের সাথে খেলতে গিয়ে সিস্টেম অপারেশনের মাঝামাঝি কার্নেলটি পুনরায় কার্যকর করার প্রক্রিয়াটির সাথে গণ্ডগোল করছি যন্ত্র. এবং এটি করার পরে, একটি রিবুট করার পরে আমি হয় কর্নেল প্যানিক্স পাচ্ছি, বা অন্য চালকরা অভিযোগ করছেন যে কোনও অপারেশন না হয়েও তারা বাধা পেয়েছে।
হ্যান্ডলার কীভাবে সিদ্ধান্ত নিয়েছে যে বাধাদান এটির মাধ্যমে পরিচালনা করা উচিত তা হ'ল রহস্য।
সম্পাদনা: যদি এটি প্রাসঙ্গিক হয় তবে প্রশ্নে থাকা সিপিইউ আর্কিটেকচারটি x86
।