- File:
-
- 1 edited
-
libcfa/src/concurrency/iocall.cfa (modified) (19 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/iocall.cfa
r133a161 r97c3159 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 } … … 101 101 #endif 102 102 103 103 104 #define __submit_prelude \ 104 105 if( 0 != (submit_flags & LINK_FLAGS) ) { errno = ENOTSUP; return -1; } \ 105 106 (void)timeout; (void)cancellation; \ 106 107 if( !context ) context = __get_io_context(); \ 107 __io_user_data_t data = { 0 }; \108 __io_user_data_t data = { 0, active_thread() }; \ 108 109 struct __io_data & ring = *context->thrd.ring; \ 109 110 struct io_uring_sqe * sqe; \ 110 __u32 idx; \ 111 __u8 sflags = REGULAR_FLAGS & submit_flags; \ 112 [sqe, idx] = __submit_alloc( ring, (__u64)(uintptr_t)&data ); \ 113 sqe->flags = sflags; 111 uint32_t idx; \ 112 [sqe, idx] = __submit_alloc( ring, (uint64_t)(uintptr_t)&data ); \ 113 sqe->flags = REGULAR_FLAGS & submit_flags; 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 #if __OFF_T_MATCHES_OFF64_T 153 typedef __off64_t off_t; 154 #else 155 typedef __off_t off_t; 156 #endif 157 typedef __off64_t off64_t; 158 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); 159 152 160 153 struct msghdr; … … 167 160 extern int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 168 161 169 extern int fallocate(int fd, int mode, off_t offset, off_t len);170 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); 171 164 extern int madvise(void *addr, size_t length, int advice); 172 165 … … 193 186 __submit_prelude 194 187 195 sqe->opcode = IORING_OP_READV; 196 sqe->ioprio = 0; 197 sqe->fd = fd; 198 sqe->off = offset; 199 sqe->addr = (__u64)iov; 200 sqe->len = iovcnt; 201 sqe->rw_flags = 0; 202 sqe->__pad2[0] = sqe->__pad2[1] = sqe->__pad2[2] = 0; 188 (*sqe){ IORING_OP_READV, fd, iov, iovcnt, offset }; 203 189 204 190 __submit_wait … … 214 200 __submit_prelude 215 201 216 sqe->opcode = IORING_OP_WRITEV; 217 sqe->ioprio = 0; 218 sqe->fd = fd; 219 sqe->off = offset; 220 sqe->addr = (__u64)iov; 221 sqe->len = iovcnt; 222 sqe->rw_flags = 0; 223 sqe->__pad2[0] = sqe->__pad2[1] = sqe->__pad2[2] = 0; 202 (*sqe){ IORING_OP_WRITEV, fd, iov, iovcnt, offset }; 224 203 225 204 __submit_wait … … 234 213 __submit_prelude 235 214 236 sqe->opcode = IORING_OP_FSYNC; 237 sqe->ioprio = 0; 238 sqe->fd = fd; 239 sqe->off = 0; 240 sqe->addr = 0; 241 sqe->len = 0; 242 sqe->rw_flags = 0; 243 sqe->__pad2[0] = sqe->__pad2[1] = sqe->__pad2[2] = 0; 244 245 __submit_wait 246 #endif 247 } 248 249 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) { 215 (*sqe){ IORING_OP_FSYNC, fd }; 216 217 __submit_wait 218 #endif 219 } 220 221 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) { 250 222 #if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_SYNC_FILE_RANGE) 251 223 return sync_file_range(fd, offset, nbytes, flags); … … 296 268 297 269 (*sqe){ IORING_OP_SEND, sockfd }; 298 sqe->addr = ( __u64)buf;270 sqe->addr = (uint64_t)buf; 299 271 sqe->len = len; 300 272 sqe->msg_flags = flags; … … 311 283 312 284 (*sqe){ IORING_OP_RECV, sockfd }; 313 sqe->addr = ( __u64)buf;285 sqe->addr = (uint64_t)buf; 314 286 sqe->len = len; 315 287 sqe->msg_flags = flags; … … 326 298 327 299 (*sqe){ IORING_OP_ACCEPT, sockfd }; 328 sqe->addr = (__u64)addr;329 sqe->addr2 = ( __u64)addrlen;300 sqe->addr = (uint64_t)(uintptr_t)addr; 301 sqe->addr2 = (uint64_t)(uintptr_t)addrlen; 330 302 sqe->accept_flags = flags; 331 303 … … 341 313 342 314 (*sqe){ IORING_OP_CONNECT, sockfd }; 343 sqe->addr = ( __u64)addr;344 sqe->off = ( __u64)addrlen;345 346 __submit_wait 347 #endif 348 } 349 350 int cfa_fallocate(int fd, int mode, off_t offset, off_t len, int submit_flags, Duration timeout, io_cancellation * cancellation, io_context * context) {315 sqe->addr = (uint64_t)(uintptr_t)addr; 316 sqe->off = (uint64_t)(uintptr_t)addrlen; 317 318 __submit_wait 319 #endif 320 } 321 322 int cfa_fallocate(int fd, int mode, uint64_t offset, uint64_t len, int submit_flags, Duration timeout, io_cancellation * cancellation, io_context * context) { 351 323 #if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_FALLOCATE) 352 324 return fallocate( fd, mode, offset, len ); … … 365 337 } 366 338 367 int cfa_fadvise(int fd, off_t offset, off_t len, int advice, int submit_flags, Duration timeout, io_cancellation * cancellation, io_context * context) {339 int cfa_fadvise(int fd, uint64_t offset, uint64_t len, int advice, int submit_flags, Duration timeout, io_cancellation * cancellation, io_context * context) { 368 340 #if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_FADVISE) 369 341 return posix_fadvise( fd, offset, len, advice ); … … 372 344 373 345 (*sqe){ IORING_OP_FADVISE, fd }; 374 sqe->off = ( __u64)offset;346 sqe->off = (uint64_t)offset; 375 347 sqe->len = len; 376 348 sqe->fadvise_advice = advice; … … 387 359 388 360 (*sqe){ IORING_OP_MADVISE, 0 }; 389 sqe->addr = ( __u64)addr;361 sqe->addr = (uint64_t)addr; 390 362 sqe->len = length; 391 363 sqe->fadvise_advice = advice; … … 402 374 403 375 (*sqe){ IORING_OP_OPENAT, dirfd }; 404 sqe->addr = ( __u64)pathname;376 sqe->addr = (uint64_t)pathname; 405 377 sqe->open_flags = flags; 406 378 sqe->len = mode; … … 435 407 __submit_prelude 436 408 437 (*sqe){ IORING_OP_STATX, dirfd, pathname, mask, ( __u64)statxbuf };409 (*sqe){ IORING_OP_STATX, dirfd, pathname, mask, (uint64_t)statxbuf }; 438 410 sqe->statx_flags = flags; 439 411 … … 477 449 } 478 450 else { 479 sqe->off = ( __u64)-1;451 sqe->off = (uint64_t)-1; 480 452 } 481 453 sqe->len = len; … … 485 457 } 486 458 else { 487 sqe->splice_off_in = ( __u64)-1;459 sqe->splice_off_in = (uint64_t)-1; 488 460 } 489 461 sqe->splice_flags = flags | (SPLICE_FLAGS & submit_flags);
Note:
See TracChangeset
for help on using the changeset viewer.