- File:
-
- 1 edited
-
libcfa/src/concurrency/iocall.cfa (modified) (19 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/iocall.cfa
r4998155 r2606a03 32 32 #include "io/types.hfa" 33 33 34 extern [* struct io_uring_sqe, __u32] __submit_alloc( struct __io_data & ring, __u64data );35 extern void __submit( struct io_context * ctx, __u32idx ) __attribute__((nonnull (1)));36 37 static inline void ?{}(struct io_uring_sqe & this, __u8opcode, int fd) {34 extern [* struct io_uring_sqe, uint32_t] __submit_alloc( struct __io_data & ring, uint64_t data ); 35 extern void __submit( struct io_context * ctx, uint32_t idx ) __attribute__((nonnull (1))); 36 37 static inline void ?{}(struct io_uring_sqe & this, uint8_t opcode, int fd) { 38 38 this.opcode = opcode; 39 39 #if !defined(IOSQE_ASYNC) … … 51 51 } 52 52 53 static inline void ?{}(struct io_uring_sqe & this, __u8 opcode, int fd, void * addr, __u32 len, __u64off ) {53 static inline void ?{}(struct io_uring_sqe & this, uint8_t opcode, int fd, void * addr, uint32_t len, uint64_t off ) { 54 54 (this){ opcode, fd }; 55 55 this.off = off; 56 this.addr = ( __u64)(uintptr_t)addr;56 this.addr = (uint64_t)(uintptr_t)addr; 57 57 this.len = len; 58 58 } … … 105 105 (void)timeout; (void)cancellation; \ 106 106 if( !context ) context = __get_io_context(); \ 107 __io_user_data_t data = { 0 }; \107 __io_user_data_t data = { 0, active_thread() }; \ 108 108 struct __io_data & ring = *context->thrd.ring; \ 109 109 struct io_uring_sqe * sqe; \ 110 __u32idx; \111 __u8sflags = REGULAR_FLAGS & submit_flags; \112 [sqe, idx] = __submit_alloc( ring, ( __u64)(uintptr_t)&data ); \110 uint32_t idx; \ 111 uint8_t sflags = REGULAR_FLAGS & submit_flags; \ 112 [sqe, idx] = __submit_alloc( ring, (uint64_t)(uintptr_t)&data ); \ 113 113 sqe->flags = sflags; 114 114 115 115 #define __submit_wait \ 116 116 /*__cfaabi_bits_print_safe( STDERR_FILENO, "Preparing user data %p for %p\n", &data, data.thrd );*/ \ 117 verify( sqe->user_data == ( __u64)(uintptr_t)&data ); \117 verify( sqe->user_data == (uint64_t)(uintptr_t)&data ); \ 118 118 __submit( context, idx ); \ 119 wait( data.sem); \119 park( __cfaabi_dbg_ctx ); \ 120 120 if( data.result < 0 ) { \ 121 121 errno = -data.result; \ … … 149 149 150 150 extern int fsync(int fd); 151 152 typedef __off64_t off_t; 153 typedef __off64_t off64_t; 154 extern int sync_file_range(int fd, off64_t offset, off64_t nbytes, unsigned int flags); 151 extern int sync_file_range(int fd, int64_t offset, int64_t nbytes, unsigned int flags); 155 152 156 153 struct msghdr; … … 163 160 extern int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 164 161 165 extern int fallocate(int fd, int mode, off_t offset, off_t len);166 extern int posix_fadvise(int fd, off_t offset, off_t len, int advice);162 extern int fallocate(int fd, int mode, uint64_t offset, uint64_t len); 163 extern int posix_fadvise(int fd, uint64_t offset, uint64_t len, int advice); 167 164 extern int madvise(void *addr, size_t length, int advice); 168 165 … … 193 190 sqe->fd = fd; 194 191 sqe->off = offset; 195 sqe->addr = ( __u64)iov;192 sqe->addr = (uint64_t)(uintptr_t)iov; 196 193 sqe->len = iovcnt; 197 194 sqe->rw_flags = 0; … … 210 207 __submit_prelude 211 208 212 sqe->opcode = IORING_OP_WRITEV; 213 sqe->ioprio = 0; 214 sqe->fd = fd; 215 sqe->off = offset; 216 sqe->addr = (__u64)iov; 217 sqe->len = iovcnt; 218 sqe->rw_flags = 0; 219 sqe->__pad2[0] = sqe->__pad2[1] = sqe->__pad2[2] = 0; 209 (*sqe){ IORING_OP_WRITEV, fd, iov, iovcnt, offset }; 220 210 221 211 __submit_wait … … 230 220 __submit_prelude 231 221 232 sqe->opcode = IORING_OP_FSYNC; 233 sqe->ioprio = 0; 234 sqe->fd = fd; 235 sqe->off = 0; 236 sqe->addr = 0; 237 sqe->len = 0; 238 sqe->rw_flags = 0; 239 sqe->__pad2[0] = sqe->__pad2[1] = sqe->__pad2[2] = 0; 240 241 __submit_wait 242 #endif 243 } 244 245 int cfa_sync_file_range(int fd, off64_t offset, off64_t nbytes, unsigned int flags, int submit_flags, Duration timeout, io_cancellation * cancellation, io_context * context) { 222 (*sqe){ IORING_OP_FSYNC, fd }; 223 224 __submit_wait 225 #endif 226 } 227 228 int cfa_sync_file_range(int fd, int64_t offset, int64_t nbytes, unsigned int flags, int submit_flags, Duration timeout, io_cancellation * cancellation, io_context * context) { 246 229 #if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_SYNC_FILE_RANGE) 247 230 return sync_file_range(fd, offset, nbytes, flags); … … 292 275 293 276 (*sqe){ IORING_OP_SEND, sockfd }; 294 sqe->addr = ( __u64)buf;277 sqe->addr = (uint64_t)buf; 295 278 sqe->len = len; 296 279 sqe->msg_flags = flags; … … 307 290 308 291 (*sqe){ IORING_OP_RECV, sockfd }; 309 sqe->addr = ( __u64)buf;292 sqe->addr = (uint64_t)buf; 310 293 sqe->len = len; 311 294 sqe->msg_flags = flags; … … 322 305 323 306 (*sqe){ IORING_OP_ACCEPT, sockfd }; 324 sqe->addr = (__u64)addr;325 sqe->addr2 = ( __u64)addrlen;307 sqe->addr = (uint64_t)(uintptr_t)addr; 308 sqe->addr2 = (uint64_t)(uintptr_t)addrlen; 326 309 sqe->accept_flags = flags; 327 310 … … 337 320 338 321 (*sqe){ IORING_OP_CONNECT, sockfd }; 339 sqe->addr = ( __u64)addr;340 sqe->off = ( __u64)addrlen;341 342 __submit_wait 343 #endif 344 } 345 346 int cfa_fallocate(int fd, int mode, off_t offset, off_t len, int submit_flags, Duration timeout, io_cancellation * cancellation, io_context * context) {322 sqe->addr = (uint64_t)(uintptr_t)addr; 323 sqe->off = (uint64_t)(uintptr_t)addrlen; 324 325 __submit_wait 326 #endif 327 } 328 329 int cfa_fallocate(int fd, int mode, uint64_t offset, uint64_t len, int submit_flags, Duration timeout, io_cancellation * cancellation, io_context * context) { 347 330 #if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_FALLOCATE) 348 331 return fallocate( fd, mode, offset, len ); … … 361 344 } 362 345 363 int cfa_fadvise(int fd, off_t offset, off_t len, int advice, int submit_flags, Duration timeout, io_cancellation * cancellation, io_context * context) {346 int cfa_fadvise(int fd, uint64_t offset, uint64_t len, int advice, int submit_flags, Duration timeout, io_cancellation * cancellation, io_context * context) { 364 347 #if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_FADVISE) 365 348 return posix_fadvise( fd, offset, len, advice ); … … 368 351 369 352 (*sqe){ IORING_OP_FADVISE, fd }; 370 sqe->off = ( __u64)offset;353 sqe->off = (uint64_t)offset; 371 354 sqe->len = len; 372 355 sqe->fadvise_advice = advice; … … 383 366 384 367 (*sqe){ IORING_OP_MADVISE, 0 }; 385 sqe->addr = ( __u64)addr;368 sqe->addr = (uint64_t)addr; 386 369 sqe->len = length; 387 370 sqe->fadvise_advice = advice; … … 398 381 399 382 (*sqe){ IORING_OP_OPENAT, dirfd }; 400 sqe->addr = ( __u64)pathname;383 sqe->addr = (uint64_t)pathname; 401 384 sqe->open_flags = flags; 402 385 sqe->len = mode; … … 431 414 __submit_prelude 432 415 433 (*sqe){ IORING_OP_STATX, dirfd, pathname, mask, ( __u64)statxbuf };416 (*sqe){ IORING_OP_STATX, dirfd, pathname, mask, (uint64_t)statxbuf }; 434 417 sqe->statx_flags = flags; 435 418 … … 473 456 } 474 457 else { 475 sqe->off = ( __u64)-1;458 sqe->off = (uint64_t)-1; 476 459 } 477 460 sqe->len = len; … … 481 464 } 482 465 else { 483 sqe->splice_off_in = ( __u64)-1;466 sqe->splice_off_in = (uint64_t)-1; 484 467 } 485 468 sqe->splice_flags = flags | (SPLICE_FLAGS & submit_flags);
Note:
See TracChangeset
for help on using the changeset viewer.