gpt: Use cache aligned buffers for gpt_h and gpt_e
Before this patch one could receive following errors when executing
"gpt write" command on machine with cache enabled:
display5 factory > gpt write mmc ${mmcdev} ${partitions}
Writing GPT:
CACHE: Misaligned operation at range [4ef8f7f0, 4ef8f9f0]
CACHE: Misaligned operation at range [4ef8f9f8, 4ef939f8]
CACHE: Misaligned operation at range [4ef8f9f8, 4ef939f8]
CACHE: Misaligned operation at range [4ef8f7f0, 4ef8f9f0]
success!
To alleviate this problem - the calloc()s have been replaced with
malloc_cache_aligned() and memset().
After those changes the buffers are properly aligned (with both start
address and size) to SoC cache line.
Signed-off-by: Lukasz Majewski <lukma@denx.de>
This commit is contained in:
parent
76b9cbab25
commit
bb021013ba
|
|
@ -622,25 +622,27 @@ int gpt_fill_header(struct blk_desc *dev_desc, gpt_header *gpt_h,
|
|||
int gpt_restore(struct blk_desc *dev_desc, char *str_disk_guid,
|
||||
disk_partition_t *partitions, int parts_count)
|
||||
{
|
||||
int ret;
|
||||
|
||||
gpt_header *gpt_h = calloc(1, PAD_TO_BLOCKSIZE(sizeof(gpt_header),
|
||||
dev_desc));
|
||||
gpt_header *gpt_h;
|
||||
gpt_entry *gpt_e;
|
||||
int ret, size;
|
||||
|
||||
size = PAD_TO_BLOCKSIZE(sizeof(gpt_header), dev_desc);
|
||||
gpt_h = malloc_cache_aligned(size);
|
||||
if (gpt_h == NULL) {
|
||||
printf("%s: calloc failed!\n", __func__);
|
||||
return -1;
|
||||
}
|
||||
memset(gpt_h, 0, size);
|
||||
|
||||
gpt_e = calloc(1, PAD_TO_BLOCKSIZE(GPT_ENTRY_NUMBERS
|
||||
* sizeof(gpt_entry),
|
||||
dev_desc));
|
||||
size = PAD_TO_BLOCKSIZE(GPT_ENTRY_NUMBERS * sizeof(gpt_entry),
|
||||
dev_desc);
|
||||
gpt_e = malloc_cache_aligned(size);
|
||||
if (gpt_e == NULL) {
|
||||
printf("%s: calloc failed!\n", __func__);
|
||||
free(gpt_h);
|
||||
return -1;
|
||||
}
|
||||
memset(gpt_e, 0, size);
|
||||
|
||||
/* Generate Primary GPT header (LBA1) */
|
||||
ret = gpt_fill_header(dev_desc, gpt_h, str_disk_guid, parts_count);
|
||||
|
|
|
|||
Loading…
Reference in New Issue