All of lore.kernel.org
 help / color / mirror / Atom feed
From: Carsten Langgaard <carstenl@mips.com>
To: Ralf Baechle <ralf@uni-koblenz.de>
Cc: linux-mips@linux-mips.org, dom@mips.com, chris@mips.com, kevink@mips.com
Subject: Re: Prefetches in memcpy
Date: Wed, 04 Dec 2002 16:06:20 +0100	[thread overview]
Message-ID: <3DEE19EC.DD007304@mips.com> (raw)
In-Reply-To: 20021105163806.A24996@bacchus.dhis.org

I would like to open this thread again, since nothing has been done about it.
I think we should get rid of the prefetches until someone comes up with a
version that doesn't prefetch beyond the copy destination/source area.

/Carsten


Ralf Baechle wrote:

> On Tue, Nov 05, 2002 at 02:45:47PM +0100, Carsten Langgaard wrote:
>
> > The problem is the prefetches in the memcpy function in the kernel.
> > There is spread a number of PREF instructions in the memcpy function,
> > but there is no check if we are prefetching out-side the areas we are
> > copying to/from. This is extremely dangerous because we might prefetch
> > out-side the physical memory area, causing e.g. a bus error or something
> > even more nasty.
> >
> > I recently found something even nastier, it could also hit a DMA buffer
> > region, and thereby break the PCI DMA flushing scheme.
> > For example if the kernel is doing a memcpy from an area that's next to
> > a DMA buffer area, we could end up in a situation where, we are
> > prefetching
> > data into the cache from a memory location that is used for DMA transfer
> > and owned by the device, but the DMA transfer has not yet completed.
> > We then end up in a situation, where the memory and cache is out of sync
> > and the cache is containing some old data.
> >
> > So we definitely need to do something about the prefetches in the memcpy
> > function.  We can either get rid of all the prefetches or make sure we
> > don't prefetch out side the "memcpy" area.
>
> We could fix the prefetch into DMA buffer problem with an extra flush but
> that's going to be expensive, I rather think we should avoid prefetches.
> As Kevin explained KSEG1 is a loophole in the spec so we can't really say
> what the behaviour of memcpy will be in KSEG1.
>
> So I think the fix will have to be:
>
>  - Avoid prefetching beyond the end of the copy area in memcpy and memmove.
>  - Introduce a second variant of memcpy that never does prefetching.  This
>    one will be safe to use in KSEG1 / uncached XKPHYS also and will be used
>    for memcpy_fromio, memcpy_toio and friends.
>
>   Ralf

--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com

  parent reply	other threads:[~2002-12-04 15:06 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-11-05 13:45 Prefetches in memcpy Carsten Langgaard
2002-11-05 15:38 ` Ralf Baechle
2002-11-05 16:13   ` Kevin D. Kissell
2002-11-05 16:13     ` Kevin D. Kissell
2002-11-05 16:29     ` Ralf Baechle
2002-11-05 16:41     ` Ralf Baechle
2002-11-05 17:26     ` Alan Cox
2002-12-04 15:06   ` Carsten Langgaard [this message]
2002-12-05  9:32     ` Dominic Sweetman
2002-12-05 15:14       ` Carsten Langgaard
2002-12-05 15:47         ` Maciej W. Rozycki
2002-12-08  7:06     ` Gilad
2002-12-08 10:01       ` Kevin D. Kissell
2002-12-08 10:01         ` Kevin D. Kissell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3DEE19EC.DD007304@mips.com \
    --to=carstenl@mips.com \
    --cc=chris@mips.com \
    --cc=dom@mips.com \
    --cc=kevink@mips.com \
    --cc=linux-mips@linux-mips.org \
    --cc=ralf@uni-koblenz.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.