[PATCH v2] cmd: mem: fix range of bitflip test

Stefan Roese sr at denx.de
Wed Sep 9 15:35:09 CEST 2020


On 09.09.20 15:02, Ralph Siemsen wrote:
> The bitflip test uses two equal sized memory buffers. This is achieved
> by splitting the range of memory into two pieces. The address of the
> second buffer, as well as the length of each buffer, were not correctly
> calculated. This caused bitflip test to access beyond the end of range.
> This patch fixes the pointer arithmetic problem.
> 
> A second problem arises because u-boot "mtest" command expects the
> ending address to be inclusive. When computing (end - start) this
> results in missing 1 byte of the requested length. The bitflip test
> expects a count rather than an "ending" address. Thus it fails to test
> the last word of the requested range. Fixed by using (end - start + 1).
> 
> Fixes: 8e434cb705d463bc8cff935160e4fb4c77cb99ab ("cmd: mem: Add bitflip
> memory test to alternate mtest")
> 
> Signed-off-by: Ralph Siemsen <ralph.siemsen at linaro.org>

Reviewed-by: Stefan Roese <sr at denx.de>

Thanks,
Stefan

> --
> 
> Changes in v2:
> - Minor refactor to reduce line length
> - Spellcheck and cleanup commit message
> 
> Change-Id: Ie641d04e731fc5bc6a3bbef914bf7fad136cdc94
> ---
>   cmd/mem.c | 9 +++++----
>   1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/cmd/mem.c b/cmd/mem.c
> index 9b97f7bf69..7bfa93d2a0 100644
> --- a/cmd/mem.c
> +++ b/cmd/mem.c
> @@ -934,7 +934,7 @@ static ulong mem_test_quick(vu_long *buf, ulong start_addr, ulong end_addr,
>   static int do_mem_mtest(struct cmd_tbl *cmdtp, int flag, int argc,
>   			char *const argv[])
>   {
> -	ulong start, end;
> +	ulong start, end, half_size;
>   	vu_long scratch_space;
>   	vu_long *buf, *dummy = &scratch_space;
>   	ulong iteration_limit = 0;
> @@ -987,10 +987,11 @@ static int do_mem_mtest(struct cmd_tbl *cmdtp, int flag, int argc,
>   			if (errs == -1UL)
>   				break;
>   			count += errs;
> +			half_size = (end - start + 1) / 2 /
> +				    sizeof(unsigned long);
>   			errs = test_bitflip_comparison(buf,
> -						       buf + (end - start) / 2,
> -						       (end - start) /
> -						       sizeof(unsigned long));
> +						       buf + half_size,
> +						       half_size);
>   		} else {
>   			errs = mem_test_quick(buf, start, end, pattern,
>   					      iteration);
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de


More information about the U-Boot mailing list