Buffering should align itself and not rely on buffering_reset parameters when storage alignment matters so that wrapped reads maintain alignment.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29258 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
19ea72ff63
commit
0d902c8c54
2 changed files with 8 additions and 0 deletions
|
@ -1572,6 +1572,11 @@ void buffering_init(void)
|
||||||
/* Initialise the buffering subsystem */
|
/* Initialise the buffering subsystem */
|
||||||
bool buffering_reset(char *buf, size_t buflen)
|
bool buffering_reset(char *buf, size_t buflen)
|
||||||
{
|
{
|
||||||
|
/* Wraps of storage-aligned data must also be storage aligned,
|
||||||
|
thus buf and buflen must be a aligned to an integer multiple of
|
||||||
|
the storage alignment */
|
||||||
|
STORAGE_ALIGN_BUFFER(buf, buflen);
|
||||||
|
|
||||||
if (!buf || !buflen)
|
if (!buf || !buflen)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
@ -388,11 +388,14 @@ static inline void cpucache_flush(void)
|
||||||
#define STORAGE_PAD(x) ((x) + CACHEALIGN_SIZE - 1)
|
#define STORAGE_PAD(x) ((x) + CACHEALIGN_SIZE - 1)
|
||||||
/* Number of bytes in the last cacheline assuming buffer of size x is aligned */
|
/* Number of bytes in the last cacheline assuming buffer of size x is aligned */
|
||||||
#define STORAGE_OVERLAP(x) ((x) & (CACHEALIGN_SIZE - 1))
|
#define STORAGE_OVERLAP(x) ((x) & (CACHEALIGN_SIZE - 1))
|
||||||
|
#define STORAGE_ALIGN_BUFFER(start, size) \
|
||||||
|
ALIGN_BUFFER((start), (size), CACHEALIGN_SIZE)
|
||||||
#else
|
#else
|
||||||
#define STORAGE_ALIGN_ATTR
|
#define STORAGE_ALIGN_ATTR
|
||||||
#define STORAGE_ALIGN_DOWN(x) (x)
|
#define STORAGE_ALIGN_DOWN(x) (x)
|
||||||
#define STORAGE_PAD(x) (x)
|
#define STORAGE_PAD(x) (x)
|
||||||
#define STORAGE_OVERLAP(x) 0
|
#define STORAGE_OVERLAP(x) 0
|
||||||
|
#define STORAGE_ALIGN_BUFFER(start, size)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Double-cast to avoid 'dereferencing type-punned pointer will
|
/* Double-cast to avoid 'dereferencing type-punned pointer will
|
||||||
|
|
Loading…
Reference in a new issue