Changes in / [0351e9f:a1f3d93]


Ignore:
Location:
libcfa/src
Files:
4 edited

Legend:

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

    r0351e9f ra1f3d93  
    133133        }
    134134
    135         bool __cfa_io_flush( processor * proc, bool wait ) {
     135        bool __cfa_io_flush( processor * proc, int min_comp ) {
    136136                /* paranoid */ verify( ! __preemption_enabled() );
    137137                /* paranoid */ verify( proc );
     
    144144
    145145                __STATS__( true, io.calls.flush++; )
    146                 int ret = syscall( __NR_io_uring_enter, ctx.fd, ctx.sq.to_submit, wait ? 1 : 0, 0, (sigset_t *)0p, _NSIG / 8);
     146                int ret = syscall( __NR_io_uring_enter, ctx.fd, ctx.sq.to_submit, min_comp, min_comp > 0 ? IORING_ENTER_GETEVENTS : 0, (sigset_t *)0p, _NSIG / 8);
    147147                if( ret < 0 ) {
    148148                        switch((int)errno) {
     
    302302                ctx->proc->io.dirty   = true;
    303303                if(sq.to_submit > 30 || !lazy) {
    304                         __cfa_io_flush( ctx->proc, false );
     304                        __cfa_io_flush( ctx->proc, 0 );
    305305                }
    306306        }
     
    522522                        sqe->flags = 0;
    523523                        sqe->ioprio = 0;
    524                         sqe->fd = 0;
     524                        sqe->fd = fd;
    525525                        sqe->off = 0;
    526526                        sqe->fsync_flags = 0;
  • libcfa/src/concurrency/io/setup.cfa

    r0351e9f ra1f3d93  
    3232
    3333        void __cfa_io_start( processor * proc ) {}
    34         bool __cfa_io_flush( processor * proc, bool ) {}
     34        bool __cfa_io_flush( processor * proc, int ) {}
    3535        void __cfa_io_stop ( processor * proc ) {}
    3636
  • libcfa/src/concurrency/kernel.cfa

    r0351e9f ra1f3d93  
    125125static void __wake_one(cluster * cltr);
    126126
    127 static void idle_sleep(processor * proc, io_future_t & future, char buf[]);
     127static void idle_sleep(processor * proc, io_future_t & future, eventfd_t & val);
    128128static bool mark_idle (__cluster_proc_list & idles, processor & proc);
    129129static void mark_awake(__cluster_proc_list & idles, processor & proc);
     
    131131extern void __cfa_io_start( processor * );
    132132extern bool __cfa_io_drain( processor * );
    133 extern bool __cfa_io_flush( processor *, bool wait );
     133extern bool __cfa_io_flush( processor *, int min_comp );
    134134extern void __cfa_io_stop ( processor * );
    135135static inline bool __maybe_io_drain( processor * );
     
    171171        io_future_t future; // used for idle sleep when io_uring is present
    172172        future.self.ptr = 1p;  // mark it as already fulfilled so we know if there is a pending request or not
    173         char buf[sizeof(uint64_t)];
     173        eventfd_t idle_val;
    174174
    175175        __cfa_io_start( this );
     
    206206
    207207                        if( !readyThread ) {
    208                                 __cfa_io_flush( this, false );
     208                                __cfa_io_flush( this, 0 );
    209209
    210210                                readyThread = __next_thread_slow( this->cltr );
     
    237237                                }
    238238
    239                                 idle_sleep( this, future, buf );
     239                                idle_sleep( this, future, idle_val );
    240240
    241241                                // We were woken up, remove self from idle
     
    258258
    259259                        if(this->io.pending && !this->io.dirty) {
    260                                 __cfa_io_flush( this, false );
     260                                __cfa_io_flush( this, 0 );
    261261                        }
    262262
     
    274274
    275275                                // If we can't find a thread, might as well flush any outstanding I/O
    276                                 if(this->io.pending) { __cfa_io_flush( this, false ); }
     276                                if(this->io.pending) { __cfa_io_flush( this, 0 ); }
    277277
    278278                                // Spin a little on I/O, just in case
     
    369369
    370370                        if(this->io.pending && !this->io.dirty) {
    371                                 __cfa_io_flush( this, false );
     371                                __cfa_io_flush( this, 0 );
    372372                        }
    373373
     
    779779}
    780780
    781 static void idle_sleep(processor * this, io_future_t & future, char buf[]) {
     781static void idle_sleep(processor * this, io_future_t & future, eventfd_t & val) {
    782782        #if !defined(IO_URING_IDLE) || !defined(CFA_HAVE_LINUX_IO_URING_H)
    783783                #if !defined(__CFA_NO_STATISTICS__)
     
    821821                        reset(future);
    822822
    823                         __kernel_read(this, future, buf, this->idle_fd );
    824                 }
    825 
    826                 __cfa_io_flush( this, true );
     823                        __kernel_read(this, future, (char *)&val, this->idle_fd );
     824                }
     825
     826                __cfa_io_flush( this, 1 );
    827827        #endif
    828828}
  • libcfa/src/device/cpu.cfa

    r0351e9f ra1f3d93  
    159159
    160160        const char * _;
    161         int cnt = read_width(buff, r - 1, &_);
    162         /* paranoid */ verify(cnt == count_prefix_dirs("/sys/devices/system/cpu", "cpu"));
    163         return cnt;
     161        return read_width(buff, r - 1, &_);;
    164162}
    165163
     
    238236{
    239237        raw_cache_instance ** raw = alloc(cpus);
     238
     239        // TODO: this loop is broken, it only works if the present cpu start at 0 and are contiguous which is not guaranteed.
    240240        for(i; cpus) {
    241241                raw[i] = alloc(cache_levels);
Note: See TracChangeset for help on using the changeset viewer.