lkml.org 
[lkml]   [2017]   [Jun]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH 2/7] iomap: implement ioread64 and iowrite64
    > +u64 ioread64(void __iomem *addr)
    > +{
    > + u64 low, high;
    > +
    > + low = ioread32(addr);
    > + high = ioread32(addr + sizeof(u32));
    > + return low | (high << 32);
    > +}
    > +u64 ioread64be(void __iomem *addr)
    > +{
    > + u64 low, high;
    > +
    > + low = ioread32be(addr + sizeof(u32));
    > + high = ioread32be(addr);
    > + return low | (high << 32);
    > +}
    > +#endif

    This hardcodes the behavior of include/linux/io-64-nonatomic-hi-lo.h, which
    I find rather confusing, as only about one in five drivers wants this
    behavior.

    I'd suggest you don't add it in lib/iomap.c at all for 32-bit architectures,
    but rather use the same logic that we have for readq/writeq in
    io-64-nonatomic-hi-lo.h and io-64-nonatomic-lo-hi.h, adding
    {lo_hi,hi_lo}_{ioread,iowrite}{,be} to the same files, and provide
    the {ioread,iowrite}{,be} macros only if they have not been defined
    at that point.

    Arnd

    \
     
     \ /
      Last update: 2017-06-26 22:44    [W:3.002 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site