This is an automated email from Gerrit. Antonio Borneo ([email protected]) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/5111
-- gerrit commit 0fcb11224a5ffe5e9f6f0082c0d0e30cc0bd8a8d Author: Antonio Borneo <[email protected]> Date: Mon Apr 15 23:47:50 2019 +0200 target/cortex_a: fix waiting for target halted after step Depending on adapter speed, the function cortex_a_poll() can take time to execute and can complete successfully when the timeout is already expired. Checking the timeout at function return causes a timeout error while that could be avoided. Check the target status at cortex_a_poll() return, before checking for the timeout. Change-Id: I4c1581f6e718298c566df7b1359255e16e3955d5 Signed-off-by: Antonio Borneo <[email protected]> diff --git a/src/target/cortex_a.c b/src/target/cortex_a.c index 6eb6aa9..b68b030 100644 --- a/src/target/cortex_a.c +++ b/src/target/cortex_a.c @@ -1201,14 +1201,18 @@ static int cortex_a_step(struct target *target, int current, target_addr_t addre if (retval != ERROR_OK) return retval; - int64_t then = timeval_ms(); - while (target->state != TARGET_HALTED) { - retval = cortex_a_poll(target); - if (retval != ERROR_OK) - return retval; - if (timeval_ms() > then + 1000) { - LOG_ERROR("timeout waiting for target halt"); - return ERROR_FAIL; + if (target->state != TARGET_HALTED) { + int64_t then = timeval_ms() + 1000; + while (1) { + retval = cortex_a_poll(target); + if (retval != ERROR_OK) + return retval; + if (target->state == TARGET_HALTED) + break; + if (timeval_ms() > then) { + LOG_ERROR("timeout waiting for target halt"); + return ERROR_FAIL; + } } } -- _______________________________________________ OpenOCD-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openocd-devel
