module doesn't work when it's app uses STDOUT

From: Armin L. Schneider (schneider@isl.tm.fr)
Date: Mon Apr 09 2001 - 04:58:16 EST


Hello,

sorry, this might be a beginner question, but I couldn't find any
infos in the FAQ.

I'm writing a driver (module) for a PCI card with a neural processor
(NP-processor) on it for kernel 2.4.1. The registers of this processor
are mapped to a memory area. I access the different registers of the
NP-processor with ioctl's (there are 8bit and 16bit registers):

    switch (cmd) {
      case NP_IOCSGCR:
          get_user (b, (byte *) arg);
          writeb (b, np.mem + Z_GCR);
          break;
      case NP_IOCGGCR:
          b = readb (np.mem + Z_GCR);
          put_user (b, (byte *) arg);
          break;
      case NP_IOCSMIF:
          get_user (w, (word *) arg);
          writew (w, np.mem + Z_MIF);
          break;
      case NP_IOCGMIF:
          w = readw (np.mem + Z_MIF);
          put_user (w, (word *) arg);
          break;

When I load the module and init the device, I can read the registers.
Some of them have default values after a reset of the chip and they
are ok. But when I load data to the registers and let the NP-processor
categorize the data, strange things happen:

I wrote a program to test the driver which loads some data to the
NP-processor and tries to categorize it. The program prints its
result to STDOUT.
  - everything works ok, results are correct, if I redirect STDOUT to a
     file
  - if I don't redirect, I get reproducibly wrong results when I print
     to STDOUT

My first idea was to disable/enable interrupts when entering/leaving
the ioctl-function (using save_flags(); cli(); and restore_flags();),
but it
didn't help.

Armin.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Apr 15 2001 - 21:00:11 EST