[6473] in linux-scsi channel archive

home help back first fref pref prev next nref lref last post

Re: raw I/O with device memory

daemon@ATHENA.MIT.EDU (Stephen C. Tweedie)
Thu May 6 16:55:36 1999

From: "Stephen C. Tweedie" <sct@redhat.com>
Date: 	Thu, 6 May 1999 18:07:05 +0100 (BST)
To: "Mateu Batle i Sastre" <mbatle@iname.com>
Cc: "Linux-Kernel" <linux-kernel@vger.rutgers.edu>,
        "Linux-Scsi" <linux-scsi@vger.rutgers.edu>,
        Stephen Tweedie <sct@redhat.com>
In-Reply-To: <001101be9643$af7e2e50$2900a8c0@pc1.preview.es>

Hi,

On Tue, 4 May 1999 17:35:06 +0200, "Mateu Batle i Sastre"
<mbatle@iname.com> said:

> I've tried the raw I/O patch for Linux 2.2.4 (located in
> ftp://ftp.uk.linux.org/pub/linux/sct/fs/raw-io/). It works
> fine but there are a few problems.

> 1st) It does not work with memory located in a PCI device.

Linux cannot perform IO on such memory right now.  End of story.  It
will in the future: this is just one of a whole raft of related problems
we have due to the backwards-compatible way virt_to_phys works.

> Of course, already mapped to a user space process. I could
> workaround this in an *ugly* way by patching my SCSI controller
> driver (Adaptec 2940UW). The patch was simply to change

> #define VIRT_TO_BUS(x)	(virt_to_bus(x))
> by
> #define VIRT_TO_BUS(x)	(__pa(x))

Yes, that's the one, but this change breaks a number of other device
drivers.  

> Apparently, there is some problem with the translation from kernel
> virtual address to bus address. I've seen in one place is done
> using arithmetic and in the other using bit operations, and they
> are not always interchangeable.

Correct.  __va and __pa use arithmetic which is fine for pure memory
operations but which breaks some IO operations due to ISA memory region
backwards compatibility.  We'll be fixing this in 2.3.

> 2nd) The patch I did makes the system working as it should, but
> after some time running it crashes. I got the error:
> "kmem_alloc: Bad slab magic (corrupt) (name=size-128)".

> I think the problem in this case is that some memory is not
> deallocated in the kernel.  

Such a leak wouldn't by itself lead to slab corruption.

> But this does not seem to happen with the raw I/O patch and normal
> system memory. Any idea ?

Given that you are treading in completely  untested waters by breaking
virt_to_bus and by doing dma from PCI space, it's hard to debug this
remotely!

--Stephen

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.rutgers.edu

home help back first fref pref prev next nref lref last post