Kaz Kylheku writes:
 > 
 > On Mon, 16 Nov 1998, Olaf Meyer wrote:
 > 
 > > I made substantial changes/addons to the WaveLAN driver. Reversing all this
 > > I could start from the beginning. Maybe it would be faster, but I think
 > > I'm first going to try to trace the bug. Essentially all my code is 
 > > interrupt driven, so this can basically happen any where ...
 > 
 > Yeah, you really have to watch what you do in interrupt-driven code. The best
 > thing is to do as little as possible and do it in a reentrant fashion.  Use
 > only operations that are certified as being atomic. You can't make any system
 > calls or call any code that assumes that you are running in a process, and
 > tries to block you.
 > 
 > 

I think I found the culprit for the "Aiee: scheduling in interrupt 00124b39"
message :-)

If I sort the system.map by addresses, 00124b39 falls between
__wait_ob_buffer and sync_buffers, i.e. the schedule call that
causes my freeze-up has to be the one in __wait_on_buffer, correct?

  00124abc T __wait_on_buffer
  00124b74 T sync_buffers

Now __wait_on_buffer only gets called in wait_on_buffer and lock_buffer (I'm
using a 2.0.33 kernel) These in turn mainly get called from filesystem and
char/block device related code. I don't do any file related stuff. In fact I
only execute my own code and some socket buffer related code (like alloc and
free). I included a small portion of the code which shows where the freeze
occurs.  I actually run through this section without any problems over
25,000 times before the freeze occurs ...

I currently don't really know where to continue the bug hunt ...
If somebody is a little be more familiar with the above calls, 
I'd like to know how the heck I can get into one of the above functions
from my code.

Many thanks,

  Olaf

  /* this code section gets called from the receive routine of the WaveLAN
   * driver, i.e. it is part of an interrupt
   */
 
  if (!node->rtData) {
    node->currNRT = node->currNRT->next;

    // my wrapper for printk. It dumps the string onto the network, so I can
    // debug remotely on a machine that doesn't crash :-)
    // printks only to the console are not very usefull since everything
    // works fine over 25,000 times and the messages scroll through much too
    // fast. Dumping the stuff on the network I can read the stuff to a file
    // using tcpdump and look at it after the crash ...

    print_wl(node, DEBUG_INFO, "go ahead for NRT data to %s\n", node->currNRT->name);

    /**** I get until here since this is dumped onto the network */
    /**** according to the output the if statement is true, so I enter
    /**** and call wl_process_NRT_TOKEN (see below)

    if (!memcmp(node->currNRT->macAddr, node->dev->dev_addr, ETH_ALEN)) {
      // it's my turn, I don't send the token to myself!
      // the interface is only simplex!
      wl_process_NRT_TOKEN(node);  // see below
    }
  }


  void
  wl_process_NRT_TOKEN(rtnode_t *node)
  {
    int num = 0;

    // the next text does NOT get dumped to the network anymore
    // I only see the Aiee: scheduling in interrupt error message flashing
    // over my console

    print_wl(node, DEBUG_INFO, "received NRT token\n");

    ....


-
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to [EMAIL PROTECTED]

Reply via email to