[U-Boot] [RFC] disk: part_dos: Fix part_test_dos() regression

Rob Clark robdclark at gmail.com
Tue Oct 3 12:44:31 UTC 2017


On Tue, Oct 3, 2017 at 7:04 AM, Fabio Estevam <festevam at gmail.com> wrote:
> On Tue, Oct 3, 2017 at 7:57 AM, Rob Clark <robdclark at gmail.com> wrote:
>
>> btw, if I had to take a guess, I'd say that perhaps blksz is smaller
>> than 'legacy_mbr', so maybe rather than allocating blksize, it should
>> be DIV_ROUND_UP(sizeof(legacy_mbr), dev_desc->blksz).. or I guess that
>> could be simplified to not use division if blksz is a power of two
>
> Yes, it does seem to be size related as we are size constraint in SPL.
>
> Just tried your suggestion:
>
> --- a/disk/part_dos.c
> +++ b/disk/part_dos.c
> @@ -89,7 +89,9 @@ static int test_block_type(unsigned char *buffer)
>
>  static int part_test_dos(struct blk_desc *dev_desc)
>  {
> -       ALLOC_CACHE_ALIGN_BUFFER(legacy_mbr, mbr, dev_desc->blksz);
> +       ALLOC_CACHE_ALIGN_BUFFER(legacy_mbr, mbr,
> +                                DIV_ROUND_UP(sizeof(legacy_mbr),
> +                                dev_desc->blksz));
>
>         if (blk_dread(dev_desc, 0, 1, (ulong *)mbr) != 1)
>                 return -1;
>
> and it does work for me :-)

Ok, I guess if blksz can actually be less than the mbr, we probably
also need a similar fix in is_gpt_valid() (and also to pass the
correct # of blks to blk_dread())..  I'll make a patch in a few..

BR,
-R


More information about the U-Boot mailing list