diff --git a/src/target/target.c b/src/target/target.c index 73594fb0b..a3a1b0adb 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -1111,7 +1111,7 @@ int target_call_timer_callbacks_now(void) return target_call_timer_callbacks_check_time(0); } -int target_alloc_working_area(struct target *target, uint32_t size, struct working_area **area) +int target_alloc_working_area_try(struct target *target, uint32_t size, struct working_area **area) { struct working_area *c = target->working_areas; struct working_area *new_wa = NULL; @@ -1189,8 +1189,6 @@ int target_alloc_working_area(struct target *target, uint32_t size, struct worki if (free_size < size) { - LOG_WARNING("not enough working area available(requested %u, free %u)", - (unsigned)(size), (unsigned)(free_size)); return ERROR_TARGET_RESOURCE_NOT_AVAILABLE; } @@ -1231,6 +1229,19 @@ int target_alloc_working_area(struct target *target, uint32_t size, struct worki return ERROR_OK; } +int target_alloc_working_area(struct target *target, uint32_t size, struct working_area **area) +{ + int retval; + + retval = target_alloc_working_area_try(target, size, area); + if (retval == ERROR_TARGET_RESOURCE_NOT_AVAILABLE) + { + LOG_WARNING("not enough working area available(requested %u)", (unsigned)(size)); + } + return retval; + +} + static int target_free_working_area_restore(struct target *target, struct working_area *area, int restore) { if (area->free) diff --git a/src/target/target.h b/src/target/target.h index 0292945d2..4a48e5aad 100644 --- a/src/target/target.h +++ b/src/target/target.h @@ -452,6 +452,14 @@ const char *target_state_name( struct target *target ); */ int target_alloc_working_area(struct target *target, uint32_t size, struct working_area **area); +/* Same as target_alloc_working_area, except that no error is logged + * when ERROR_TARGET_RESOURCE_NOT_AVAILABLE is returned. + * + * This allows the calling code to *try* to allocate target memory + * and have a fallback to another behavior(slower?). + */ +int target_alloc_working_area_try(struct target *target, + uint32_t size, struct working_area **area); int target_free_working_area(struct target *target, struct working_area *area); void target_free_all_working_areas(struct target *target);