Title: [rtl] System crash with first? interrupt

Hi all,
I sent this out couple of weeks ago, no response.  I had sent it out in HTML format, plain text this time.

My system reboots itself after module_init completes, this is about the time that the first interrupt should hit.  If I do not rt_startup my interrupt handler this does not occur.  Can anyone see an error in the following code snippets, know of a bug I might have missed with RTAI 3.0, or have some tips on attacking this?

SYSTEM INFO:

The system is a National Instruments PXI workstation running a PIII 700 MHz processor, 256 MB RAM and a PCI based homegrown board that I am writing this driver for.  I started with RedHat 6.2 Standard and loaded RTAI 3.0 on top of it.

Linux cots6 2.2.16-ert #1 Wed Feb 14 14:33:36 EST 2001 i686 unknown

Module                  Size  Used by
rtai_fifos              27024   0  (unused)
rtai_shm                 6100   0  (unused)
rtai_sched              20828   0  (unused)
rtai                    30000   2  [rtai_fifos rtai_shm rtai_sched]
lockd                   31432   1  (autoclean)
sunrpc                  52868   1  (autoclean) [lockd]
yellowfin               10952   1  (autoclean)

SOURCE:

 ***** HEADER
#ifndef _EATGD_H_
#define _EATGD_H_
 
#define EATG_MIN_VERSION           020213     /* Min kernel revision needed for this driver */

struct sEATGDevice {
  struct   pci_dev     *pdev;           // Ptr to PCI info struct
  unsigned int          irq;            // Irq used by board
  void                (*handler)(void); // irq handler
};

static void eatgIrqHandler(void);
int         init_module(void);
void        cleanup_module(void);

#endif _EATGD_H_



 ***** CODE

struct sEATGDevice eatgInfo; /* Information record of the ATG device */

 // Interrupt Handler
static void eatgIrqHandler(void) {

  static long int i = 0;

  i++;
  i = 0;
} // static void eatgIrqHandler(void)



#ifdef MODULE

int init_module(void)
{
.
.
.
  /* Make sure that this system has a PCI bios and bus. */
  if (!pci_present()) {
    PRINTERR(KERN_CRIT, "No PCI bios present");
    return -ENODEV;
  }
 
  /* Register your major, and accept a dynamic number */
.
.
.
  /*
   * Configure the device
   */
   
  /* Find the EATG device */
  if((eatg = pci_find_device(EATG_VENDOR_ID, EATG_DEVICE_ID, eatg)) == NULL)
    {
      PRINTERR(KERN_EMERG, "EATG error: Device not found ");
      *errorStat = -ENODEV;
      return failedATGNotFound;
    }

  /* Report EATG board revision info */
  pci_read_config_byte(eatg, PCI_REVISION_ID, revisionp);
 
  eatgInfo.handler = eatgIrqHandler;

  /* Preserve pointer to EATG device */
  eatgInfo.pdev = eatg;

  /* Preserve interrupt used by EATG device */
  eatgInfo.irq = eatg->irq;

  /* Install RT interrupt handler */
  result = rt_request_global_irq (eatgInfo.irq, eatgInfo.handler);
  if (result==-EINVAL)
    {
      PRINTERR(KERN_ERR, "EATG: Bad irq number %i or handler\n",eatgInfo.irq);
      return(failedRequestIRQ);
    }
  if (result==-EBUSY)
    {
      PRINTERR(KERN_ERR, "EATG: IRQ %d busy, change your PnP config in BIOS\n",
               eatgInfo.irq);
      return(failedRequestIRQ);
    }

  // Hookup fifos
  // Transaction Processor IRQ Handler to Data Pump FIFO
  if((errStat = rtf_create(EATG_TPIRQ2DP_FIFO, EATG_TPIRQ2DP_FIFO_SIZE)) < 0) {
    PRINTERR(KERN_ALERT, "Unable to create TPIRQ2DP FIFO.\n");
    goto failCreateTPIRQ2DPFIFO;
  }
.
.
.

   /* Start RT interrupt handler */
  rt_startup_irq (eatgInfo.irq);

  #ifndef EATG_DEBUG
    register_symtab(NULL); // otherwise, leave global symbols visible
  #endif
  

#ifdef EATG_USE_PROC /* only when available */
  /* this is the last line in init_module */
  proc_register(&proc_root, &eatgProcEntry);
#endif
 
  /* Success */
  return 0;
.
.
.
} /* int init_module(void) */

void cleanup_module(void) {
.
.
.
} // void cleanup_module(void)

#endif

Thank You.
 
Eric O. Heinicke      [EMAIL PROTECTED]
BAE SYSTEMS           Voice:631.262.8644
                      Fax:  631.262.8657
                      One Hazeltine Way, MS 1-78
                      Greenlawn, NY 11740-1606

Reply via email to