Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 1 Dec 1998 15:44:38 +0100 (CET)
From:      Etienne de Bruin <Etienne.Debruin@KryptoKom.DE>
To:        freebsd-hackers@FreeBSD.ORG (Hackers FreeBSD)
Subject:   Kernels and Bottom halves
Message-ID:  <199812011444.PAA02871@borg.kryptokom.de>

next in thread | raw e-mail | index | archive | help
greets... i have a semi complex problem which i need to explain in a 
semi detailed way.  it has to do with bottom halves of kernels and interrupts.

once a complete packet has been received from the network device driver,
an interrupt takes place which is handled by tulip_intr and resulting functions
are called to process the packet.  in one of these resulting functions, my
function is called which has it's own interrupt handler (pci device driver).

we're all in the bottom half of the kernel.  thing is, my function starts
a DMA process which finishes by signalling an interrupt which should be handled
by my interrupt handler.  but my interrupt handler never gets invoked.

it seems to me that the interrupt priority level is raised (by splimp)
before the tulip_intr is invoked.  this causes the priority level to be too
high for my interrupt to be handled.  but this is a catch 22 situation
because only once my DMA procedure has finished, can i allow for the 
network device driver to continue.

if you understand the above then you probably have some more questions...
i would gladly appreciate any ideas on this subject.  i include a backtrack
of the kernel debug so you can have an idea of how the process execution
takes place (my functions are the super_crypt_* functions):

#19 0xf014e7d1 in super_crypt_data_dma (sc_ptr=0xf0273970, data=0xf0238e48) at ../../pci/if_fc.c:1672
#20 0xf014eb31 in super_crypt_mbuf (mdata=0xf0238e80) at ../../pci/if_fc.c:1821
#21 0xf014cb9e in sec_proc (p=0xf024e180, m=0xf2423e00) at ../../kglan/enc_proc.c:518
#22 0xf0148619 in process_pkt (p=0xf024e180, m=0xf2423e00) at ../../kglan/acc_proc.c:443
#23 0xf0146c57 in analyse_pkt (ifpos=1, eh=0xf0238f78, pkt=0xf242400e "E\020", pktlen=68, m=0xf2423e00)
    at ../../net/kglan.c:663
#24 0xf0147083 in kglan_test_pkt (ifp=0xf0238f48, h=0xf0238f78, m=0xf2423e00) at ../../net/kglan.c:956
#25 0xf01502e6 in ether_input (ifp=0xf2f66818, eh=0xf0238f78, m=0xf2423e00) at ../../net/if_ethersubr.c:587
#26 0xf019b34c in tulip_rx_intr (sc=0xf2f66800) at ../../pci/if_de.c:3506
#27 0xf019b977 in tulip_intr_handler (sc=0xf2f66800, progress_p=0xf0238fb0) at ../../pci/if_de.c:3792
#28 0xf019bad5 in tulip_intr_normal (arg=0xf2f66800) at ../../pci/if_de.c:3981

should i try to lower the priority level before the tulip_intr gets called?

kind regards
eT
-- 
Etienne de Bruin
work: <eT@kryptokom.de>
home: <edebruin@iname.com>
"the promise of love is hard to ignore" - crowded house, private universe.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199812011444.PAA02871>