- File:
-
- 1 edited
-
libcfa/src/concurrency/io/setup.cfa (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/io/setup.cfa
rbb58825 rec19b21 314 314 } 315 315 316 extern void signal_block( int sig );317 extern void signal_unblock( int sig );318 319 316 static void __io_create( __io_data & this, const io_context_params & params_in ) { 320 317 // Step 1 : call to setup … … 401 398 const __u32 num = *sq.num; 402 399 for( i; num ) { 403 sq.sqes[i].opcode = IORING_OP_LAST; 404 sq.sqes[i].user_data = 3ul64; 400 __sqe_clean( &sq.sqes[i] ); 405 401 } 406 402 } … … 433 429 434 430 // 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 } 450 450 451 451 // some paranoid checks
Note:
See TracChangeset
for help on using the changeset viewer.