Hi Lukasz, On 02/12/2014 04:56 PM, Lukasz Majewski wrote: > Hi Hector, > >> The calloc() call was allocating space for the sizeof the struct >> pointer rather than for the struct contents. >> >> Signed-off-by: Hector Palacios <hector.palac...@digi.com> >> --- >> disk/part_efi.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/disk/part_efi.c b/disk/part_efi.c >> index 5dfaf490c89a..7fabec059d7a 100644 >> --- a/disk/part_efi.c >> +++ b/disk/part_efi.c >> @@ -232,7 +232,7 @@ static int set_protective_mbr(block_dev_desc_t >> *dev_desc) legacy_mbr *p_mbr; >> >> /* Setup the Protective MBR */ >> - p_mbr = calloc(1, sizeof(p_mbr)); >> + p_mbr = calloc(1, sizeof(legacy_mbr)); > > Thanks for spotting the error. _Damn_ > > However, this is not enough. > > Since this buffer is passed to mmc for writing (and some targets may > use cache) the legacy_mbr shall be defined as: > > ALLOC_CACHE_ALIGN_BUFFER(legacy_mbr, p_mbr, sizeof(legacy_mbr)); > memset(p_mbr, 0, sizeof(legacy_mbr));
Unfortunately this is causing unaligned access in my i.MX6. I'm specifically passing the -mno-unaligned-access when building this file so I guess it has to do with the macro and the packed structure. > > Would you like to prepare v2 of this patch or shall I prepare the fix? > >> if (p_mbr == NULL) { >> printf("%s: calloc failed!\n", __func__); >> return -1; > > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot