Ignore:
File:
1 edited

Legend:

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

    rbb58825 rec19b21  
    314314        }
    315315
    316         extern void signal_block( int sig );
    317         extern void signal_unblock( int sig );
    318 
    319316        static void __io_create( __io_data & this, const io_context_params & params_in ) {
    320317                // Step 1 : call to setup
     
    401398                        const __u32 num = *sq.num;
    402399                        for( i; num ) {
    403                                 sq.sqes[i].opcode = IORING_OP_LAST;
    404                                 sq.sqes[i].user_data = 3ul64;
     400                                __sqe_clean( &sq.sqes[i] );
    405401                        }
    406402                }
     
    433429
    434430                // Step 4 : eventfd
    435                 // io_uring_register is so f*cking slow on some machine that it
    436                 // will never succeed if preemption isn't hard blocked
    437                 signal_block( SIGUSR1 );
    438 
    439                 int efd = eventfd(0, 0);
    440                 if (efd < 0) {
    441                         abort("KERNEL ERROR: IO_URING EVENTFD - %s\n", strerror(errno));
    442                 }
    443 
    444                 int ret = syscall( __NR_io_uring_register, fd, IORING_REGISTER_EVENTFD, &efd, 1);
    445                 if (ret < 0) {
    446                         abort("KERNEL ERROR: IO_URING EVENTFD REGISTER - %s\n", strerror(errno));
    447                 }
    448 
    449                 signal_unblock( SIGUSR1 );
     431                int efd;
     432                for() {
     433                        efd = eventfd(0, 0);
     434                        if (efd < 0) {
     435                                if (errno == EINTR) continue;
     436                                abort("KERNEL ERROR: IO_URING EVENTFD - %s\n", strerror(errno));
     437                        }
     438                        break;
     439                }
     440
     441                int ret;
     442                for() {
     443                        ret = syscall( __NR_io_uring_register, fd, IORING_REGISTER_EVENTFD, &efd, 1);
     444                        if (ret < 0) {
     445                                if (errno == EINTR) continue;
     446                                abort("KERNEL ERROR: IO_URING EVENTFD REGISTER - %s\n", strerror(errno));
     447                        }
     448                        break;
     449                }
    450450
    451451                // some paranoid checks
Note: See TracChangeset for help on using the changeset viewer.