From mboxrd@z Thu Jan 1 00:00:00 1970 From: narkewoody@gmail.com (Woody Wu) Date: Fri, 21 Dec 2012 23:34:51 +0800 Subject: How kernel handle interrupts In-Reply-To: References: <20121220142745.GB3578@zuhnb712> Message-ID: <20121221153451.GB5530@zuhnb712> To: kernelnewbies@lists.kernelnewbies.org List-Id: kernelnewbies.lists.kernelnewbies.org On Thu, Dec 20, 2012 at 10:05:05AM -0800, anish singh wrote: > On Dec 20, 2012 6:30 AM, "Woody Wu" wrote: > > > > Hi, List > > > > Where is the Kernel code that handles external interrupts? I want to > > have a look at it but haven't found out where it is. > > > > Actually, I have some basic questions about interrupt handling in Linux. > > 1. After Kernel's ISR received an interrupt, I believe it will invoke a > > handler defined in a device driver if any. But it should be the > > device driver's responsibility or kernel ISR's responsibility to > > clear (or acknowledge) the interrupt? > If the interrupt in question is currently being handled then in > the case of edge triggered interrupt we just mask the interrupt,set it > pending and bail out.Once the interrupt handler completes then we check for > pending interrupt and handle it.In level triggered we don't do that. > Kerenel ISR -this is mixture of core kernel interrupt handling code + your > device driver interrupt handler(if this is chip driver which is supposed to > get one interrupt and is reponsible for calling other interrupt handlers > based on the chip register status then you do explicit masking unmasking > yourself). > If you device driver is a interrupt controller driver then you register > your driver with kernel interrupt handling code and need to write some > callbacks such as .mask,.unmask and so on.This callbacks are called at > appropiate places whenever the interrupt is raised.This interrupt is then > passed to drivers who has requested for this interrupt by calling > request_irq. > > > > 2. My device, an AX88796B network controller, asserting the interrupt > > line in a level-triggered manner. Now I met problem with the device > that > > might caused by the CPU interrupt mode is not set as level-triggered by > > edge trigger. My CPU is Samsung S3C2410, an ARM920T powered one. Does > > anyone know usually where and how should I do this kind of setting? > Just pass the parameter "level triggered" in request_irq in your device > driver. Hi Sign, I searched the interrupt.h for the all the defined flags that I can pass to the request_irq, but there is no a flag looks like "level triggered". Would you tell me what you mean the parameter "level triggered"? Thanks. > > > > > > Thanks in advance. > > > > -- > > woody > > I can't go back to yesterday - because I was a different person then. > > > > _______________________________________________ > > Kernelnewbies mailing list > > Kernelnewbies at kernelnewbies.org > > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies -- woody I can't go back to yesterday - because I was a different person then.