linux-user: init_guest_space: Clean up control flow a bit

Instead of doing

        if (check1) {
            if (check2) {
               success;
            }
        }

        retry;

Do a clearer

        if (!check1) {
           goto try_again;
        }

        if (!check2) {
           goto try_again;
        }

        success;

    try_again:
        retry;

Besides being clearer, this makes it easier to insert more checks that
need to trigger a retry on check failure, or rearrange them, or anything
like that.

Because some indentation is changing, "ignore space change" may be useful
for viewing this patch.

Signed-off-by: Luke Shumaker <lukeshu@parabola.nu>
Message-Id: <20171228180814.9749-8-lukeshu@lukeshu.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
[lv: modified to try again fi valid == 0, not valid == -1 (error case)]
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
Luke Shumaker 2017-12-28 13:08:10 -05:00 committed by Laurent Vivier
parent 955e304f6f
commit 7ad75eea86
1 changed files with 20 additions and 16 deletions

View File

@ -1880,24 +1880,28 @@ unsigned long init_guest_space(unsigned long host_start,
}
/* Check to see if the address is valid. */
if (!host_start || aligned_start == current_start) {
#if defined(TARGET_ARM) && !defined(TARGET_AARCH64)
/* On 32-bit ARM, we need to also be able to map the commpage. */
int valid = init_guest_commpage(aligned_start - guest_start,
aligned_size + guest_start);
if (valid == 1) {
break;
} else if (valid == -1) {
munmap((void *)real_start, real_size);
return (unsigned long)-1;
}
/* valid == 0, so try again. */
#else
/* On other architectures, whatever we have here is fine. */
break;
#endif
if (host_start && aligned_start != current_start) {
goto try_again;
}
#if defined(TARGET_ARM) && !defined(TARGET_AARCH64)
/* On 32-bit ARM, we need to also be able to map the commpage. */
int valid = init_guest_commpage(aligned_start - guest_start,
aligned_size + guest_start);
if (valid == -1) {
munmap((void *)real_start, real_size);
return (unsigned long)-1;
} else if (valid == 0) {
goto try_again;
}
#endif
/* If nothing has said `return -1` or `goto try_again` yet,
* then the address we have is good.
*/
break;
try_again:
/* That address didn't work. Unmap and try a different one.
* The address the host picked because is typically right at
* the top of the host address space and leaves the guest with