Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/io.cfa

    redf247b r262fafd9  
    230230                                        const unsigned long long cutoff = calc_cutoff(ctsc, ctx->cq.id, ctxs_count, io.data, io.tscs, __shard_factor.io);
    231231                                        const unsigned long long age = moving_average(ctsc, io.tscs[target].tv, io.tscs[target].ma);
    232                                         __cfadbg_print_safe(io, "Kernel I/O: Help attempt on %u from %u, age %'llu vs cutoff %'llu, %s\n", target, ctx->cq.id, age, cutoff, age > cutoff ? "yes" : "no");
     232                                        __cfadbg_print_safe(io, "Kernel I/O: Help attempt on %u from %u, age %'llu vs cutoff %'llu, %s\n", target, this, age, cutoff, age > cutoff ? "yes" : "no");
    233233                                        if(age <= cutoff) break HELP;
    234234
     
    635635
    636636                        // We can proceed to the fast path
    637                         if( !__alloc(ctx, &idx, 1) ) return false;
     637                        if( !__alloc(ctx, &idx, 1) ) {
     638                                /* paranoid */ verify( false ); // for now check if this happens, next time just abort the sleep.
     639                                return false;
     640                        }
    638641
    639642                        // Allocation was successful
     
    665668
    666669                        /* paranoid */ verify( sqe->user_data == (uintptr_t)&future );
    667                         __submit( ctx, &idx, 1, true );
     670                        __submit_only( ctx, &idx, 1 );
    668671
    669672                        /* paranoid */ verify( proc == __cfaabi_tls.this_processor );
     
    676679                        iovec iov;
    677680                        __atomic_acquire( &proc->io.ctx->cq.lock );
     681
     682                        __attribute__((used)) volatile bool was_reset = false;
    678683
    679684                        with( proc->idle_wctx) {
     
    687692                                        iov.iov_len  = sizeof(eventfd_t);
    688693                                        __kernel_read(proc, *ftr, iov, evfd );
     694                                        ftr->result = 0xDEADDEAD;
     695                                        *((eventfd_t *)rdbuf) = 0xDEADDEADDEADDEAD;
     696                                        was_reset = true;
    689697                                }
    690698                        }
    691699
    692                         __ioarbiter_flush( *proc->io.ctx );
    693                         ioring_syscsll( *proc->io.ctx, 1, IORING_ENTER_GETEVENTS);
     700                        if( !__atomic_load_n( &proc->do_terminate, __ATOMIC_SEQ_CST ) ) {
     701                                __ioarbiter_flush( *proc->io.ctx );
     702                                proc->idle_wctx.sleep_time = rdtscl();
     703                                ioring_syscsll( *proc->io.ctx, 1, IORING_ENTER_GETEVENTS);
     704                        }
    694705
    695706                        ready_schedule_lock();
    696707                        __cfa_do_drain( proc->io.ctx, proc->cltr );
    697708                        ready_schedule_unlock();
     709
     710                        asm volatile ("" :: "m" (was_reset));
    698711                }
    699712        #endif
Note: See TracChangeset for help on using the changeset viewer.