public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* strange problem when printing to STDOUT
@ 2001-04-04 13:51 Armin L. Schneider
  0 siblings, 0 replies; only message in thread
From: Armin L. Schneider @ 2001-04-04 13:51 UTC (permalink / raw)
  To: linux-kernel

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. When I probe for the device, I request
that memory using:

    np.adr    = pci_resource_start (pcidev, 4);
    np.len    = pci_resource_len (pcidev, 4);

    if (!request_mem_region (np.adr, np.len, "NP")) {
        printk (KERN_INFO "NEURAL: Can't get memory region for NP!\n");
        return -EBUSY;
    }

    np.mem = ioremap (np.adr, np.len);

I save the addresses in a global structure:

    struct np_dev
    {
       unsigned long np_adr;       /* bus address of NP memory */
       unsigned char *np_mem;      /* pointer to mapped memory */
       unsigned long np_len;
    };

    struct muren_dev muren;

so that I can release the memory when I remove the device.

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
ar 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 interrupts while reading/writing
to the register memory (using save_flags() and cli()), but it
didn't help.

Then I did something else for two weeks and came back to the
driver hoping to find a solution. I couldn't find any.
Has anybody ever seen something like this and knows a solution?

Thanks,

Armin.



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2001-04-04 13:55 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-04-04 13:51 strange problem when printing to STDOUT Armin L. Schneider

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox