diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2014-05-05 11:05:51 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-05-05 11:05:51 +0200 |
commit | 4626972921355dd8ed97f4a0d71a00950f2364e0 (patch) | |
tree | a4ffa105d23bf84798161b5709b7a35aecbf10c0 /commands | |
parent | f8327af20c1c2988b0d9909f403780e31cc6b59e (diff) | |
parent | e013b939777bcac84b5fab32b99a77931cb273fd (diff) | |
download | barebox-4626972921355dd8ed97f4a0d71a00950f2364e0.tar.gz barebox-4626972921355dd8ed97f4a0d71a00950f2364e0.tar.xz |
Merge branch 'for-next/memtest'
Diffstat (limited to 'commands')
-rw-r--r-- | commands/memtest.c | 74 |
1 files changed, 32 insertions, 42 deletions
diff --git a/commands/memtest.c b/commands/memtest.c index a71576eeb9..585437596a 100644 --- a/commands/memtest.c +++ b/commands/memtest.c @@ -74,34 +74,25 @@ static int request_memtest_regions(struct list_head *list) continue; } + r = list_first_entry(&bank->res->children, + struct resource, sibling); + start = PAGE_ALIGN(bank->res->start); + end = PAGE_ALIGN_DOWN(r->start); + r_prev = r; + if (start != end) { + size = end - start; + ret = alloc_memtest_region(list, start, size); + if (ret < 0) + return ret; + } /* * We assume that the regions are sorted in this list * So the first element has start boundary on bank->res->start - * and the last element hast end boundary on bank->res->end + * and the last element hast end boundary on bank->res->end. + * + * Between used regions. Start from second entry. */ - list_for_each_entry(r, &bank->res->children, sibling) { - /* - * Do on head element for bank boundary - */ - if (r->sibling.prev == &bank->res->children) { - /* - * remember last used element - */ - start = PAGE_ALIGN(bank->res->start); - end = PAGE_ALIGN_DOWN(r->start); - r_prev = r; - if (start == end) - continue; - size = end - start; - - ret = alloc_memtest_region(list, start, size); - if (ret < 0) - return ret; - continue; - } - /* - * Between used regions - */ + list_for_each_entry_from(r, &bank->res->children, sibling) { start = PAGE_ALIGN(r_prev->end); end = PAGE_ALIGN_DOWN(r->start); r_prev = r; @@ -112,21 +103,20 @@ static int request_memtest_regions(struct list_head *list) ret = alloc_memtest_region(list, start, size); if (ret < 0) return ret; + } - if (list_is_last(&r->sibling, &bank->res->children)) { - /* - * Do on head element for bank boundary - */ - start = PAGE_ALIGN(r->end); - end = PAGE_ALIGN_DOWN(bank->res->end) - 1; - size = end - start + 1; - if (start >= end) - continue; - - ret = alloc_memtest_region(list, start, size); - if (ret < 0) - return ret; - } + /* + * Do on head element for bank boundary. + */ + r = list_last_entry(&bank->res->children, + struct resource, sibling); + start = PAGE_ALIGN(r->end); + end = PAGE_ALIGN_DOWN(bank->res->end) - 1; + size = end - start + 1; + if (start < end) { + ret = alloc_memtest_region(list, start, size); + if (ret < 0) + return ret; } } @@ -232,12 +222,12 @@ out: if (ret == -EINTR) printf("\n"); - printf("Memtest failed.\n"); + printf("Memtest failed. Error: %d\n", ret); return 1; - } else { - printf("Memtest successful.\n"); - return 0; } + + printf("Memtest successful.\n"); + return 0; } static const __maybe_unused char cmd_memtest_help[] = |