mtd/nand/ubi: assortment of alignment fixes
Various U-Boot adoptions/extensions to MTD/NAND/UBI did not take buffer alignment into account which led to failures of the following form: ERROR: v7_dcache_inval_range - start address is not aligned - 0x1f7f0108 ERROR: v7_dcache_inval_range - stop address is not aligned - 0x1f7f1108 Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com> Reviewed-by: Simon Glass <sjg@chromium.org> Acked-by: Scott Wood <scottwood@freescale.com> [trini: Add __UBOOT__ hunk to lib/zlib/zutil.c due to malloc.h in common.h] Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
285e266b41
commit
4519668b29
|
@ -363,7 +363,7 @@ int ubi_volume_read(char *volume, char *buf, size_t size)
|
||||||
tbuf_size = vol->usable_leb_size;
|
tbuf_size = vol->usable_leb_size;
|
||||||
if (size < tbuf_size)
|
if (size < tbuf_size)
|
||||||
tbuf_size = ALIGN(size, ubi->min_io_size);
|
tbuf_size = ALIGN(size, ubi->min_io_size);
|
||||||
tbuf = malloc(tbuf_size);
|
tbuf = malloc_cache_aligned(tbuf_size);
|
||||||
if (!tbuf) {
|
if (!tbuf) {
|
||||||
printf("NO MEM\n");
|
printf("NO MEM\n");
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
|
|
|
@ -839,7 +839,7 @@ int nand_torture(nand_info_t *nand, loff_t offset)
|
||||||
|
|
||||||
patt_count = ARRAY_SIZE(patterns);
|
patt_count = ARRAY_SIZE(patterns);
|
||||||
|
|
||||||
buf = malloc(nand->erasesize);
|
buf = malloc_cache_aligned(nand->erasesize);
|
||||||
if (buf == NULL) {
|
if (buf == NULL) {
|
||||||
puts("Out of memory for erase block buffer\n");
|
puts("Out of memory for erase block buffer\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
|
@ -57,7 +57,8 @@ struct inode *iget_locked(struct super_block *sb, unsigned long ino)
|
||||||
{
|
{
|
||||||
struct inode *inode;
|
struct inode *inode;
|
||||||
|
|
||||||
inode = (struct inode *)malloc(sizeof(struct ubifs_inode));
|
inode = (struct inode *)malloc_cache_aligned(
|
||||||
|
sizeof(struct ubifs_inode));
|
||||||
if (inode) {
|
if (inode) {
|
||||||
inode->i_ino = ino;
|
inode->i_ino = ino;
|
||||||
inode->i_sb = sb;
|
inode->i_sb = sb;
|
||||||
|
@ -104,7 +105,7 @@ void iput(struct inode *inode)
|
||||||
/*
|
/*
|
||||||
* Allocate and use new inode
|
* Allocate and use new inode
|
||||||
*/
|
*/
|
||||||
ino = (struct inode *)malloc(sizeof(struct ubifs_inode));
|
ino = (struct inode *)malloc_cache_aligned(sizeof(struct ubifs_inode));
|
||||||
memcpy(ino, inode, sizeof(struct ubifs_inode));
|
memcpy(ino, inode, sizeof(struct ubifs_inode));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -108,7 +108,7 @@ static inline struct crypto_comp *crypto_alloc_comp(const char *alg_name,
|
||||||
struct crypto_comp *ptr;
|
struct crypto_comp *ptr;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
ptr = malloc(sizeof(struct crypto_comp));
|
ptr = malloc_cache_aligned(sizeof(struct crypto_comp));
|
||||||
while (i < UBIFS_COMPR_TYPES_CNT) {
|
while (i < UBIFS_COMPR_TYPES_CNT) {
|
||||||
comp = ubifs_compressors[i];
|
comp = ubifs_compressors[i];
|
||||||
if (!comp) {
|
if (!comp) {
|
||||||
|
@ -723,7 +723,7 @@ static int do_readpage(struct ubifs_info *c, struct inode *inode,
|
||||||
* destination area to a multiple of
|
* destination area to a multiple of
|
||||||
* UBIFS_BLOCK_SIZE.
|
* UBIFS_BLOCK_SIZE.
|
||||||
*/
|
*/
|
||||||
buff = malloc(UBIFS_BLOCK_SIZE);
|
buff = malloc_cache_aligned(UBIFS_BLOCK_SIZE);
|
||||||
if (!buff) {
|
if (!buff) {
|
||||||
printf("%s: Error, malloc fails!\n",
|
printf("%s: Error, malloc fails!\n",
|
||||||
__func__);
|
__func__);
|
||||||
|
|
|
@ -1060,6 +1060,15 @@ int cpu_release(int nr, int argc, char * const argv[]);
|
||||||
#define DEFINE_CACHE_ALIGN_BUFFER(type, name, size) \
|
#define DEFINE_CACHE_ALIGN_BUFFER(type, name, size) \
|
||||||
DEFINE_ALIGN_BUFFER(type, name, size, ARCH_DMA_MINALIGN)
|
DEFINE_ALIGN_BUFFER(type, name, size, ARCH_DMA_MINALIGN)
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLY__
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
|
static inline void *malloc_cache_aligned(size_t size)
|
||||||
|
{
|
||||||
|
return memalign(ARCH_DMA_MINALIGN, ALIGN(size, ARCH_DMA_MINALIGN));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* check_member() - Check the offset of a structure member
|
* check_member() - Check the offset of a structure member
|
||||||
*
|
*
|
||||||
|
|
|
@ -25,7 +25,7 @@ static void *zalloc(void *x, unsigned items, unsigned size)
|
||||||
size *= items;
|
size *= items;
|
||||||
size = (size + ZALLOC_ALIGNMENT - 1) & ~(ZALLOC_ALIGNMENT - 1);
|
size = (size + ZALLOC_ALIGNMENT - 1) & ~(ZALLOC_ALIGNMENT - 1);
|
||||||
|
|
||||||
p = malloc (size);
|
p = malloc_cache_aligned(size);
|
||||||
|
|
||||||
return (p);
|
return (p);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,11 +43,13 @@ void z_error (m)
|
||||||
*/
|
*/
|
||||||
#ifndef MY_ZCALLOC /* Any system without a special alloc function */
|
#ifndef MY_ZCALLOC /* Any system without a special alloc function */
|
||||||
|
|
||||||
|
#ifndef __UBOOT__
|
||||||
#ifndef STDC
|
#ifndef STDC
|
||||||
extern voidp malloc OF((uInt size));
|
extern voidp malloc OF((uInt size));
|
||||||
extern voidp calloc OF((uInt items, uInt size));
|
extern voidp calloc OF((uInt items, uInt size));
|
||||||
extern void free OF((voidpf ptr));
|
extern void free OF((voidpf ptr));
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
voidpf zcalloc(voidpf opaque, unsigned items, unsigned size)
|
voidpf zcalloc(voidpf opaque, unsigned items, unsigned size)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue