Thread (4 messages) 4 messages, 2 authors, 2016-10-01

[PATCH] mtd: mtk: avoid warning in mtk_ecc_encode

From: arnd@arndb.de (Arnd Bergmann)
Date: 2016-09-30 17:26:22
Also in: linux-mediatek, lkml

On Friday 30 September 2016, Boris Brezillon wrote:
quoted
+     /* copy into possibly unaligned OOB region with actual length */
+     memcpy(data + bytes, eccdata, len);
Is it better than

        for (i = 0; i < len; i += 4) {
                u32 val = __raw_readl(ecc->regs + ECC_ENCPAR(i / 4));

                memcpy(data + bytes + i, &val, min(len, 4));
        }

I'm probably missing something, but what's the point of creating a
temporary buffer of 112 bytes on the stack since you'll have to copy
this data to the oob buffer at some point?

I tried something like that first, but wasn't too happy with it for
a number of small reasons:

- __raw_readl in a driver is not usually the right API, __memcpy32_from_io
  uses it internally, but it's better for a driver not to rely on that,
  in case we need some barriers (which we may in factt need for other drivers).

- the min(len,4) expression is incorrect, fixing that makes it more complicated
  again

- I didn't like to call memcpy() multiple times, as that might get turned
  into an external function call (the compiler is free to optimize small
  memcpy calls or not).

I agree that he 112 byte buffer isn't ideal either, it just seemed to
be the lesser annoyance.

	Arnd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help