Hi people! I have a kernel module working on kernel 2.2.14(RedHat 6.2)... When interrupt occurs, special signal sends to the user process in the bottom-half of the interrupt handler. And i have a corruption of signal information when signal come to the user handler Signal sending: ... struct XXX_cbd { unsigned long signature; void (*isr)(void); struct sigaction sa; sigset_t mask; }; ... struct siginfo info; info.si_signo = dev->callback[channel].signo; info.si_errno = channel; info.si_code = SI_MESGQ; // must be < 0 for info.si_ptr info.si_pid = 0; /* sending from kernel */ info.si_uid = 0; info.si_ptr = dev->callback[channel].context; /* XXX_cbd struct */ send_sig_info(info.si_signo, &info, dev->callback[channel].process); ... In user process in signal handler this signal is catched: ... static void XXX_signal_handler(int signo, siginfo_t * siginfo, void * arg) { if(signo == SIGUSR2 && siginfo->si_signo == SIGUSR2 && siginfo->si_code == SI_MESGQ && siginfo->si_pid == 0 && siginfo->si_uid == 0) { struct XXX_cbd * cptr = (struct DM6420HR_cbd *)siginfo->si_ptr; if(cptr->signature == magic_signature && cptr->isr != NULL) (*cptr->isr)(); } } ... But there is strange things: siginfo->si_code is 0 instead of SI_MESGQ siginfo->si_uid not equal 0 and siginfo->si_ptr is 0 instead of valid pointer. What a problem here? PS. In RedHat 7.3 ( kernel 2.4.18) all works fine. -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/