Hi Jan, I have extended my debug code. Apart from the values I knew already: STACK_manager.event.pending is 0, STACK_manager.event.synch_base.count is -1, rx.fifo.read_pos == rx.fifo.write_pos.
I additionaly measured the values of my socket: sock->pending_sem.count is 0 sock->incoming.first (pointer) is 00000000 sock->incoming.last (pointer) is d7055800 That looks as if no data is in the socket queue. In addition to that I also read in directly the status register from the rt_eepro100. I.e. I do the same the speedo_interrupt() does at the very beginning: status = inw(ioaddr + SCBStatus). The status value I get there is 0xb70f. And this value looks fairly strange to me. If I understand the driver, this value indicates that a packet has been received or there was an rx error as (status & 0x5000) is not zero. The question is: Why can I get this status value but not being in the interrupt routine?!? This issue becomes really ugly... Thanks for any feedback! Regards Mathias > > > > thanks for your response. > > I have printed out the state of the STACK_manger.event and the rx.fifo in > the situation that > > I have a missing signaling. > > The result is the following: > > STACK_manager.event.pending is 0, > > STACK_manager.event.synch_base.count is -1, > > rx.fifo.read_pos == rx.fifo.write_pos. > > > > I think this is fine. No data waiting in the rx fifo. Thus, the message > seems to be still in the driver. > > What about the socket queue? Keep in mind that the stack manager > migrates the rtskb to it once it got woken up by the driver. > > > > > My assumption is now that there could be an issue with the rt_eepro100 > interrupt routine. > > What happens if a second message comes in while speedo_interrupt() is > running but > > has already left the do { } while(1) loop? > > The second message that has been received will not be delivered within > that interrupt routine. > > But will this cause a new interrupt that will be processed directly after > the first interrupt? > > Or will the interrupt for the second message silently forgotten? > > The logic is that as long as some IRQ event is pending in the hardware, > it will keep its IRQ line up to re-trigger an interrupt once the CPU > accepts it again. Nothing is lost. This is actually a generic pattern > for all drivers, you will find the same in rt_e1000 for instance. > > That's the theory. Still some subtle bug may play against us. To rule > out IRQ issues, you could trace the numbers of rt_eepro100 IRQs (or even > just rx events), e.g. before starting a new tx/rx cycle in your > application. After the error occurred, you could compare the progress > with the expected increment. > > Jan -- Mathias Koehrer [EMAIL PROTECTED] Viel oder wenig? Schnell oder langsam? Unbegrenzt surfen + telefonieren ohne Zeit- und Volumenbegrenzung? DAS TOP ANGEBOT JETZT bei Arcor: günstig und schnell mit DSL - das All-Inclusive-Paket für clevere Doppel-Sparer, nur 44,85 inkl. DSL- und ISDN-Grundgebühr! http://www.arcor.de/rd/emf-dsl-2 ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ RTnet-users mailing list RTnet-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rtnet-users