2002-06-24 15:31:18

by Jes Sorensen

[permalink] [raw]
Subject: Re: acenic >4gig sendfile problem

>>>>> "Dave" == Dave Hansen <[email protected]> writes:

Dave> When doing sendfile with my acenic card on my 8xPIII-700 and PAE
Dave> running 2.4.18, I'm getting all zeros in the files being
Dave> transmitted. Running the Redhat 2.4.18-4 kernel fixes the
Dave> problem. I saw this entry in the rpm's changelog: * Sat Aug 25
Dave> 2001 Ingo Molnar <[email protected]> - fix the acenic driver bug
Dave> that caused random kernel memory being sent out on the wire, on
Dave> x86 systems with more than 4 GB RAM.

Actually I think you're hitting a bug in pci_map_page() rather than in
the acenic.driver.

Try the patch from Ben LaHaise included below.

Jes


------- Start of forwarded message -------
Resent-Message-Id: <[email protected]>
Date: Mon, 10 Jun 2002 19:56:44 -0400
From: Benjamin LaHaise <[email protected]>
To: Marcelo Tosatti <[email protected]>,
Linux Kernel <[email protected]>
Subject: highmem pci dma mapping does not work, missing cast in asm-i386/pci.h
Message-ID: <[email protected]>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Resent-From: [email protected]
Resent-Date: Mon, 10 Jun 2002 19:58:37 -0400
Resent-To: [email protected]

Hello all,

There's a missing cast in pci_map_page that causes 64 bit capable
drivers to access the wrong memory for highmem pages. Please
include the patch below to fix it.

-ben
--
"You will be reincarnated as a toad; and you will be much happier."

:r ~/patches/v2.4/v2.4.19-pre10-pci_highmem.diff
diff -urN v2.4.19-pre10/include/asm-i386/pci.h pci-v2.4.19-pre10/include/asm-i386/pci.h
--- v2.4.19-pre10/include/asm-i386/pci.h Thu Jun 6 20:10:08 2002
+++ pci-v2.4.19-pre10/include/asm-i386/pci.h Mon Jun 10 19:54:16 2002
@@ -103,7 +103,7 @@
if (direction == PCI_DMA_NONE)
out_of_line_bug();

- return (page - mem_map) * PAGE_SIZE + offset;
+ return (dma_addr_t)(page - mem_map) * PAGE_SIZE + offset;
}

static inline void pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address,


2002-06-24 15:55:15

by Roy Sigurd Karlsbakk

[permalink] [raw]
Subject: Re: acenic >4gig sendfile problem

But...

sendfile() doesn't support >4gig anyway - does it?
that's the (yet unimplemented) sendfile64()

roy

--
Roy Sigurd Karlsbakk, Datavaktmester

Computers are like air conditioners.
They stop working when you open Windows.

On Monday 24 June 2002 17:31, Jes Sorensen wrote:
> >>>>> "Dave" == Dave Hansen <[email protected]> writes:
>
> Dave> When doing sendfile with my acenic card on my 8xPIII-700 and PAE
> Dave> running 2.4.18, I'm getting all zeros in the files being
> Dave> transmitted. Running the Redhat 2.4.18-4 kernel fixes the
> Dave> problem. I saw this entry in the rpm's changelog: * Sat Aug 25
> Dave> 2001 Ingo Molnar <[email protected]> - fix the acenic driver bug
> Dave> that caused random kernel memory being sent out on the wire, on
> Dave> x86 systems with more than 4 GB RAM.
>
> Actually I think you're hitting a bug in pci_map_page() rather than in
> the acenic.driver.
>
> Try the patch from Ben LaHaise included below.
>
> Jes
>
>
> ------- Start of forwarded message -------
> Resent-Message-Id: <[email protected]>
> Date: Mon, 10 Jun 2002 19:56:44 -0400
> From: Benjamin LaHaise <[email protected]>
> To: Marcelo Tosatti <[email protected]>,
> Linux Kernel <[email protected]>
> Subject: highmem pci dma mapping does not work, missing cast in
> asm-i386/pci.h Message-ID: <[email protected]>
> Mime-Version: 1.0
> Content-Type: text/plain; charset=us-ascii
> Resent-From: [email protected]
> Resent-Date: Mon, 10 Jun 2002 19:58:37 -0400
> Resent-To: [email protected]
>
> Hello all,
>
> There's a missing cast in pci_map_page that causes 64 bit capable
> drivers to access the wrong memory for highmem pages. Please
> include the patch below to fix it.
>
> -ben

2002-06-24 16:08:22

by David Miller

[permalink] [raw]
Subject: Re: acenic >4gig sendfile problem

From: Roy Sigurd Karlsbakk <[email protected]>
Date: Mon, 24 Jun 2002 17:54:59 +0200

sendfile() doesn't support >4gig anyway - does it?
that's the (yet unimplemented) sendfile64()

Nothing to do with file offsets. It has to do with what physical page
the file data ends up in which can be anywhere.