[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

missing timer interrupt



Hi there.

I am trying to put IPSec security freeware FreeS/WAN
on etrax board. This freeware patches the kernel by
adding a virtual network driver(using register_netdev())
and routing all network traffic thru that driver. This
network device driver then does an encryption/decryption
on top of IP layer to achieve security.

Unfortunately, heavy computaion in (de)encryption is having
a bad effect - when there is a lot of network traffic
(note that every network packet is encrypted/decrypted),
my system clock slows down. When the traffic gets low,
the clock runs normal.

I digged a lot about this in kernel books and source code -

1. In linux 2.0.38, are bottom halves atomic w.r.t. each
   other? Encryption is called in net_bh() bottom half
   (via dev_transmit()). Is it possible that when a
   bottom half net_bh() is running, in some way, I am
   sometimes missing the timer interrupt. Ideally it
   shouldnt happen :-)

2. Why is timer_interrupt() shared(SA_SHIRQ) with "serial
   dma timeout"(what is that, by the way?) in etrax-uclinux?

3. Any other possible guesses?

4. Where are interrupt priorities mentioned in linux
   kernel? In request_irq(), you assign a number to
   IRQ, make it shared+fast/slow, then add a bottom
   half to ISR. But can I someway assign a priority
   level to an interrupt? In a similar thought, can
   I someway make bottom half of one interrupt at a
   higher priority than other one, if necessary? 

best wishes,
-- prabhat

--
Prabhat Avasare    IMEC (DESICS)          email: avasare@xxxxxxx.be
                   Kapeldreef 75            Tel: +32-16-281525
                   B3001 Leuven             Fax: +32-16-281515
                   Belgium.