[lkml]   [2002]   [Dec]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: [RFC] generic device DMA implementation
    On Wed, Dec 04, 2002 at 07:44:17PM -0600, James Bottomley wrote:
    > said:
    > > Do you have an example of where the second option is useful? Off hand
    > > the only places I can think of where you'd use a consistent_alloc()
    > > rather than map_single() and friends is in cases where the hardware's
    > > behaviour means you absolutely positively have to have consistent
    > > memory.
    > Well, it comes from parisc drivers. Here you'd really rather have
    > consistent memory because it's more efficient, but on certain
    > platforms it's just not possible.

    Hmm... that doesn't seem sufficient to explain it.

    Some background: I work with PPC embedded chips (the 4xx family) whose
    only way to get consistent memory is by entirely disabling the cache.
    However in some cases you *have* to have consistent memory despite
    this very high cost. In all other cases you want to use inconsistent
    memory (just allocated with kmalloc() or get_free_pages()) and
    explicit cache flushes.

    It seems the "try to get consistent memory, but otherwise give me
    inconsistent" is only useful on machines which:
    (1) Are not fully consisent, BUT
    (2) Can get consistent memory without disabling the cache, BUT
    (3) Not very much of it, so you might run out.

    The point is, there has to be an advantage to using consistent memory
    if it is available AND the possibility of it not being available.

    Otherwise, drivers which absolutely need consistent memory, no matter
    the cost, should use consistent_alloc(), all other drivers just use
    kmalloc() (or whatever) then use the DMA flushing functions which
    compile to NOPs on platforms with consistent memory.

    Are there actually any machines with the properties described above?
    The machines I know about don't:
    - x86 and normal PPC are fully consistent, so the question
    doesn't arise
    - PPC 4xx and 8xx are incconsistent if cached, so you never
    want consistent if you don't absolutely need it
    - PA Risc is fully non-consistent (I'm told), so the question
    doesn't arise.

    David Gibson | For every complex problem there is a | solution which is simple, neat and
    | wrong.
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2005-03-22 13:31    [W:0.020 / U:1.856 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site