regression debugging & notes

This commit is contained in:
Ryan Fleury
2025-06-27 22:54:34 -07:00
parent 0018147b95
commit 5ba9b6abd8
2 changed files with 13 additions and 50 deletions
+7 -49
View File
@@ -1691,7 +1691,7 @@ ctrl_key_from_process_vaddr_range(CTRL_Handle process, Rng1U64 vaddr_range, B32
} }
} }
end_fast_lookup:; end_fast_lookup:;
if(os_now_microseconds() >= endt_us || !id_working) if(!id_stale || !id_working || os_now_microseconds() >= endt_us)
{ {
break; break;
} }
@@ -1747,7 +1747,7 @@ ctrl_key_from_process_vaddr_range(CTRL_Handle process, Rng1U64 vaddr_range, B32
} }
else else
{ {
node_needs_stream = (range_n->mem_gen < mem_gen); node_needs_stream = (range_n->mem_gen < mem_gen && range_n->working_count == 0);
} }
if(node_needs_stream) if(node_needs_stream)
{ {
@@ -1762,34 +1762,14 @@ ctrl_key_from_process_vaddr_range(CTRL_Handle process, Rng1U64 vaddr_range, B32
{ {
if(ctrl_u2ms_enqueue_req(key, process, vaddr_range, zero_terminated, endt_us)) if(ctrl_u2ms_enqueue_req(key, process, vaddr_range, zero_terminated, endt_us))
{ {
async_push_work(ctrl_mem_stream_work, .working_counter = node_working_count); async_push_work(ctrl_mem_stream_work);
requested = 1; requested = 1;
} }
else OS_MutexScopeR(process_stripe->rw_mutex)
{
for(CTRL_ProcessMemoryCacheNode *process_n = process_slot->first; process_n != 0; process_n = process_n->next)
{
if(ctrl_handle_match(process_n->handle, process))
{
U64 range_slot_idx = range_hash%process_n->range_hash_slots_count;
CTRL_ProcessMemoryRangeHashSlot *range_slot = &process_n->range_hash_slots[range_slot_idx];
for(CTRL_ProcessMemoryRangeHashNode *n = range_slot->first; n != 0; n = n->next)
{
if(hs_id_match(n->id, id))
{
ins_atomic_u64_dec_eval(&n->working_count);
goto end_fail_work;
}
}
}
}
end_fail_work:;
}
} }
} }
//- rjf: step 4: if we didn't request, and if we aren't working, then exit //- rjf: step 4: if we didn't request, and if we aren't working, then exit
if(!requested && !id_working) if(!requested)
{ {
break; break;
} }
@@ -6832,7 +6812,6 @@ ASYNC_WORK_DEF(ctrl_mem_stream_work)
void *range_base = 0; void *range_base = 0;
U64 zero_terminated_size = 0; U64 zero_terminated_size = 0;
U64 pre_read_mem_gen = ctrl_mem_gen(); U64 pre_read_mem_gen = ctrl_mem_gen();
U64 post_read_mem_gen = 0;
{ {
range_size = dim_1u64(vaddr_range_clamped); range_size = dim_1u64(vaddr_range_clamped);
U64 page_size = os_get_system_info()->page_size; U64 page_size = os_get_system_info()->page_size;
@@ -6845,29 +6824,7 @@ ASYNC_WORK_DEF(ctrl_mem_stream_work)
else else
{ {
range_base = push_array_no_zero(range_arena, U8, range_size); range_base = push_array_no_zero(range_arena, U8, range_size);
U64 bytes_read = 0; U64 bytes_read = dmn_process_read(process.dmn_handle, vaddr_range_clamped, range_base);
U64 retry_count = 0;
U64 retry_limit = range_size > page_size ? 64 : 0;
for(Rng1U64 vaddr_range_clamped_retry = vaddr_range_clamped;
retry_count <= retry_limit;
retry_count += 1)
{
bytes_read = dmn_process_read(process.dmn_handle, vaddr_range_clamped_retry, range_base);
if(bytes_read == 0 && vaddr_range_clamped_retry.max > vaddr_range_clamped_retry.min)
{
U64 diff = (vaddr_range_clamped_retry.max-vaddr_range_clamped_retry.min)/2;
vaddr_range_clamped_retry.max -= diff;
vaddr_range_clamped_retry.max = AlignDownPow2(vaddr_range_clamped_retry.max, page_size);
if(diff == 0)
{
break;
}
}
else
{
break;
}
}
if(bytes_read == 0) if(bytes_read == 0)
{ {
arena_release(range_arena); arena_release(range_arena);
@@ -6892,8 +6849,8 @@ ASYNC_WORK_DEF(ctrl_mem_stream_work)
} }
} }
} }
post_read_mem_gen = dmn_mem_gen();
} }
U64 post_read_mem_gen = ctrl_mem_gen();
//- rjf: read successful -> submit to hash store //- rjf: read successful -> submit to hash store
U128 hash = {0}; U128 hash = {0};
@@ -6923,6 +6880,7 @@ ASYNC_WORK_DEF(ctrl_mem_stream_work)
{ {
range_n->mem_gen = post_read_mem_gen; range_n->mem_gen = post_read_mem_gen;
} }
ins_atomic_u64_dec_eval(&range_n->working_count);
goto commit__break_all; goto commit__break_all;
} }
} }
+6 -1
View File
@@ -2,7 +2,12 @@
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
//////////////////////////////// ////////////////////////////////
//~ rjf: post-0.9.19 TODO notes //~ rjf: post-0.9.20 TODO notes
//
//- urgent fixes
// [ ] process memory cache not correctly invalidating - race in lookup
// [ ] hardware breakpoints regression
// [ ] process memory waiting regression
// //
//- memory view //- memory view
// [ ] have smaller visible range than entire memory // [ ] have smaller visible range than entire memory