lkml.org 
[lkml]   [2010]   [Nov]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH] ARM: Gemini: Add support for PCI BUS
    Date
    On Monday 29 November 2010, Paulius Zaleckas wrote:
    > > The I/O ordering is probably not what you think it is.
    > > There is no ordering guarantee between __raw_writel and
    > > spin_lock/spin_unlock, so you really should be using
    > > readl/writel.
    >
    > No he really should NOT use readl/writel. The ONLY difference
    > between readl/writel and __raw_readl/__raw_writel is endianess
    > conversion. __raw_*l is not doing it. Which to use depend only
    > on HW.

    There are many differences between readl and __raw_readl, including

    * __raw_readl does not have barriers and does not serialize with
    spinlocks, so it breaks on out-of-order CPUs.
    * __raw_readl does not have a specific endianess, while readl is
    fixed little-endian, just as the hardware is in this case.
    The endian-conversion is a NOP on little-endian ARM, but required
    if you actually run on a big-endian ARM (you don't).
    * __raw_readl may not be atomic, gcc is free to split the access
    into byte wise reads (it normally does not, unless you mark
    the pointer __attribute__((packed))).

    In essence, it is almost never a good idea to use __raw_readl, and
    the double underscores should tell you so.

    Arnd


    \
     
     \ /
      Last update: 2010-11-29 17:47    [W:4.444 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site