Hi,
I am using F11 (Kernel 2.6.30). My application reads data from A/D card once the card sends IRQ interrupt. Those interrupts are received once every 40 ms, if the system in the acquisition mode.
In this case, I have a module loaded to the kernel to handle those interrupts. Once an interrupt is received the module sends a signal to the my application in the user space (the code showed below).
The PROBLEM is that after data acquisition for a bout an hour Linux freezes (i.e. cannot use mouse, keyboard, etc).
One of the solutions I tried is to boot the kernel with the "noapic" option. This caused the system to hangs after about 4 hours of data acquisition. Perhaps, because my IRQ is now handled by only CPU0 as shown in file /proc/interrupts (i.e. my system has two CPUs).
How to work around this problem.
Please note that my IRQ handler in the kernel module is written as follows, in case I have a problem with it:
static irqreturn_t e5000_irq_handler(int irq, void *dev_id, struct pt_regs * regs) {
struct siginfo info;
struct task_struct *tsk = NULL;
memset(&info, 0, sizeof (struct siginfo));
info.si_signo = SIGUSR1;
info.si_code = SI_KERNEL;
rcu_read_lock();
tsk = find_task_by_vpid(Acq_Data_PID);
rcu_read_unlock();
if (tsk != NULL) {
send_sig_info(SIGUSR1, &info, tsk);
}
return IRQ_HANDLED;
}