trouble with signals and skb_rec_datagram()
reich at ulticom.com
Mon Dec 14 19:45:50 UTC 2009
I am working on trying to port a LINUX kernel
driver from RedHat AS 4/5 to Fedora 11 & 12.
Within this driver, I create some threads.
The threads call skb_rec_datagram().
When it is time to shut down the system,
my main kernel code ( in RH 4 & 5 ) called kill_proc( pid, SIGTERM, 0 )
to terminate the threads created above.
The skb_rec_datagram() would return with an error,
and the threads would then exit cleanly.
Now for Fedora 11 & 12, I understand that kill_proc() is no
longer available to use. So, I have performed experiments that
replace the kill_proc() with kill_pid()
or with send_sig_info().
Neither of these routines are terminating my threads.
I have added extra debug to the code. The return codes from
kill_pid() and send_sig_info() are zero, implying that
what I asked for was accomplished.
Yet, my threads did not terminate. I added code
after the skb_rec_datagram() call to print out the error value.
This printk statement does not execute when the SIGTERM
Using "crash" on a live Fedora 12 system, I see that my threads
are, as expected, sitting inside skb_rec_datagram().
So, I am left with two choices. Either the
replacements for kill_proc() are not functioning, or
skb_rec_datagram() has changed its behavior that ignores
Interestingly, I can "kill -9 " my threads as ROOT from the command
line on a RH 4/5 system. But
I can not do so on a Fedora 11/12 system. This would seem to imply that
my signals are not masked correctly. However, inspection via
'crash' on a live system seems to indicate that my signal mask is ok.
Does anyone know if the behavior of skb_rec_datagram() has changed
in the newer kernels ?
More information about the fedora-devel-list