Şimdiye kadar okuduğum şeye göre, "çekirdek bir kesinti aldığında, tüm kayıtlı işleyiciler çağrılır."
Her bir IRQ için kayıtlı işleyicilerin görüntülenebileceğini /proc/interrupts
anlıyorum ve ayrıca kayıtlı işleyicilerin, request_irq
kabaca formun geri çağrısında geçiş çağrısında bulunan sürücülerden geldiğini de anlıyorum :
irqreturn_t (*handler)(int, void *)
Bildiklerime dayanarak, belirli IRQ ile ilişkili bu kesme işleyici geri çağrılarının her biri çağrılmalıdır ve kesmenin gerçekten kendisi tarafından işlenip işlenmeyeceğini belirlemek işleyiciye bağlıdır. İşleyici belirli bir kesmeyi işlemezse, çekirdek makrosunu döndürmelidir IRQ_NONE
.
Ne anlamakta sorun yaşıyorum, her sürücünün kesmeyi işlemesi gerekip gerekmediğini nasıl belirlemesi bekleniyor. Sanırım bir kesinti beklerse, dahili olarak takip edebilirler. Eğer öyleyse, aynı IRQ'nun arkasındaki birden fazla sürücünün bir kesinti beklediği durumla nasıl başa çıkacaklarını bilmiyorum.
Bu ayrıntıları anlamaya çalışmamın nedeni kexec
, bir PCIe köprüsünün yanı sıra bir alt PCI üzerindeki sıfırlama pinleri ve çeşitli kayıtlarla oynarken sistem işleminin ortasında çekirdeği yeniden yürütme mekanizmasıyla uğraşmam. cihaz. Ve bunu yaparken, yeniden başlatmanın ardından çekirdek panikleri ya da başka sürücüler, herhangi bir işlem yapılmamasına rağmen kesinti aldıklarından şikayet ediyorlar.
İşleyicinin kesmenin onun tarafından ele alınması gerektiğine nasıl karar verdiği gizemdir.
Düzenleme: İlgili olması durumunda, söz konusu CPU mimarisi söz konusudur x86
.