Changeset d4da1535


Ignore:
Timestamp:
Mar 29, 2022, 4:41:30 PM (2 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, ast-experimental, enum, master, pthread-emulation, qualifiedEnum
Children:
4598e03
Parents:
edf247b (diff), 6e47b49 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

Files:
12 edited

Legend:

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

    redf247b rd4da1535  
    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
  • libcfa/src/concurrency/kernel.cfa

    redf247b rd4da1535  
    682682        this->idle_wctx.sem = 1;
    683683
     684        this->idle_wctx.wake_time = rdtscl();
     685
    684686        eventfd_t val;
    685687        val = 1;
  • libcfa/src/concurrency/kernel.hfa

    redf247b rd4da1535  
    7474        // unused if not using io_uring for idle sleep
    7575        io_future_t * ftr;
     76
     77        volatile unsigned long long wake_time;
     78        volatile unsigned long long sleep_time;
    7679};
    7780
  • libcfa/src/concurrency/kernel/startup.cfa

    redf247b rd4da1535  
    558558
    559559        idle_wctx.sem = 0;
     560        idle_wctx.wake_time = 0;
    560561
    561562        // I'm assuming these two are reserved for standard input and output
  • src/AST/Convert.cpp

    redf247b rd4da1535  
    27172717
    27182718                for (auto & param : foralls) {
    2719                         ty->forall.emplace_back(new ast::TypeInstType(param->name, param));
     2719                        ty->forall.emplace_back(new ast::TypeInstType(param));
    27202720                        for (auto asst : param->assertions) {
    27212721                                ty->assertions.emplace_back(new ast::VariableExpr({}, asst));
  • src/AST/Decl.cpp

    redf247b rd4da1535  
    6868        }
    6969        for (auto & tp : this->type_params) {
    70                 ftype->forall.emplace_back(new TypeInstType(tp->name, tp));
     70                ftype->forall.emplace_back(new TypeInstType(tp));
    7171                for (auto & ap: tp->assertions) {
    7272                        ftype->assertions.emplace_back(new VariableExpr(loc, ap));
  • src/AST/Type.cpp

    redf247b rd4da1535  
    147147// --- TypeInstType
    148148
     149TypeInstType::TypeInstType( const TypeDecl * b,
     150        CV::Qualifiers q, std::vector<ptr<Attribute>> && as )
     151: BaseInstType( b->name, q, move(as) ), base( b ), kind( b->kind ) {}
     152
    149153void TypeInstType::set_base( const TypeDecl * b ) {
    150154        base = b;
  • src/AST/Type.hpp

    redf247b rd4da1535  
    421421                std::vector<ptr<Attribute>> && as = {} )
    422422        : BaseInstType( n, q, std::move(as) ), base( b ), kind( b->kind ) {}
     423
     424        TypeInstType( const TypeDecl * b,
     425                CV::Qualifiers q = {}, std::vector<ptr<Attribute>> && as = {} );
     426
    423427        TypeInstType( const std::string& n, TypeDecl::Kind k, CV::Qualifiers q = {},
    424428                std::vector<ptr<Attribute>> && as = {} )
  • src/Concurrency/KeywordsNew.cpp

    redf247b rd4da1535  
    8888                auto typeDecl = ast::deepCopy( typeParam );
    8989                mutFunc->type_params.push_back( typeDecl );
    90                 mutType->forall.push_back(
    91                         new ast::TypeInstType( typeDecl->name, typeDecl ) );
     90                mutType->forall.push_back( new ast::TypeInstType( typeDecl ) );
    9291                for ( auto & assertion : typeDecl->assertions ) {
    9392                        mutFunc->assertions.push_back( assertion );
     
    108107        for ( const ast::ptr<ast::TypeDecl> & typeDecl : mutFunc->type_params ) {
    109108                paramTypeInst->params.push_back(
    110                         new ast::TypeExpr( location,
    111                                 new ast::TypeInstType( typeDecl->name, typeDecl ) ) );
     109                        new ast::TypeExpr( location, new ast::TypeInstType( typeDecl ) ) );
    112110                typeParamInst->params.push_back(
    113                         new ast::TypeExpr( location,
    114                                 new ast::TypeInstType( typeDecl->name, typeDecl ) ) );
     111                        new ast::TypeExpr( location, new ast::TypeInstType( typeDecl ) ) );
    115112        }
    116113
  • src/ResolvExpr/Resolver.cc

    redf247b rd4da1535  
    13851385                        for (auto & typeParam : mutDecl->type_params) {
    13861386                                symtab.addType(typeParam);
    1387                                 mutType->forall.emplace_back(new ast::TypeInstType(typeParam->name, typeParam));
     1387                                mutType->forall.emplace_back(new ast::TypeInstType(typeParam));
    13881388                        }
    13891389                        for (auto & asst : mutDecl->assertions) {
  • src/Validate/Autogen.cpp

    redf247b rd4da1535  
    248248                structInst.params.push_back( new ast::TypeExpr(
    249249                        typeDecl->location,
    250                         new ast::TypeInstType( typeDecl->name, typeDecl )
     250                        new ast::TypeInstType( typeDecl )
    251251                ) );
    252252        }
     
    264264                unionInst.params.push_back( new ast::TypeExpr(
    265265                        unionDecl->location,
    266                         new ast::TypeInstType( typeDecl->name, typeDecl )
     266                        new ast::TypeInstType( typeDecl )
    267267                ) );
    268268        }
  • src/Validate/ForallPointerDecay.cpp

    redf247b rd4da1535  
    4141        for ( auto & type_param : decl->type_params ) {
    4242                type->forall.emplace_back(
    43                         new ast::TypeInstType( type_param->name, type_param ) );
     43                        new ast::TypeInstType( type_param ) );
    4444        }
    4545        for ( auto & assertion : decl->assertions ) {
Note: See TracChangeset for help on using the changeset viewer.