Ignore:
File:
1 edited

Legend:

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

    r133a161 r97c3159  
    3232        #include "io/types.hfa"
    3333
    34         extern [* struct io_uring_sqe, __u32] __submit_alloc( struct __io_data & ring, __u64 data );
    35         extern void __submit( struct io_context * ctx, __u32 idx ) __attribute__((nonnull (1)));
    36 
    37         static inline void ?{}(struct io_uring_sqe & this, __u8 opcode, 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) {
    3838                this.opcode = opcode;
    3939                #if !defined(IOSQE_ASYNC)
     
    5151        }
    5252
    53         static inline void ?{}(struct io_uring_sqe & this, __u8 opcode, int fd, void * addr, __u32 len, __u64 off ) {
     53        static inline void ?{}(struct io_uring_sqe & this, uint8_t opcode, int fd, void * addr, uint32_t len, uint64_t off ) {
    5454                (this){ opcode, fd };
    5555                this.off = off;
    56                 this.addr = (__u64)(uintptr_t)addr;
     56                this.addr = (uint64_t)(uintptr_t)addr;
    5757                this.len = len;
    5858        }
     
    101101        #endif
    102102
     103
    103104        #define __submit_prelude \
    104105                if( 0 != (submit_flags & LINK_FLAGS) ) { errno = ENOTSUP; return -1; } \
    105106                (void)timeout; (void)cancellation; \
    106107                if( !context ) context = __get_io_context(); \
    107                 __io_user_data_t data = { 0 }; \
     108                __io_user_data_t data = { 0, active_thread() }; \
    108109                struct __io_data & ring = *context->thrd.ring; \
    109110                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;
    114114
    115115        #define __submit_wait \
    116116                /*__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 ); \
    118118                __submit( context, idx ); \
    119                 wait( data.sem ); \
     119                park( __cfaabi_dbg_ctx ); \
    120120                if( data.result < 0 ) { \
    121121                        errno = -data.result; \
     
    149149
    150150        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);
    159152
    160153        struct msghdr;
     
    167160        extern int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
    168161
    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);
    171164        extern int madvise(void *addr, size_t length, int advice);
    172165
     
    193186                        __submit_prelude
    194187
    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 };
    203189
    204190                        __submit_wait
     
    214200                        __submit_prelude
    215201
    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 };
    224203
    225204                        __submit_wait
     
    234213                __submit_prelude
    235214
    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
     221int 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) {
    250222        #if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_SYNC_FILE_RANGE)
    251223                return sync_file_range(fd, offset, nbytes, flags);
     
    296268
    297269                (*sqe){ IORING_OP_SEND, sockfd };
    298                 sqe->addr = (__u64)buf;
     270                sqe->addr = (uint64_t)buf;
    299271                sqe->len = len;
    300272                sqe->msg_flags = flags;
     
    311283
    312284                (*sqe){ IORING_OP_RECV, sockfd };
    313                 sqe->addr = (__u64)buf;
     285                sqe->addr = (uint64_t)buf;
    314286                sqe->len = len;
    315287                sqe->msg_flags = flags;
     
    326298
    327299                (*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;
    330302                sqe->accept_flags = flags;
    331303
     
    341313
    342314                (*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
     322int cfa_fallocate(int fd, int mode, uint64_t offset, uint64_t len, int submit_flags, Duration timeout, io_cancellation * cancellation, io_context * context) {
    351323        #if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_FALLOCATE)
    352324                return fallocate( fd, mode, offset, len );
     
    365337}
    366338
    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) {
     339int cfa_fadvise(int fd, uint64_t offset, uint64_t len, int advice, int submit_flags, Duration timeout, io_cancellation * cancellation, io_context * context) {
    368340        #if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_FADVISE)
    369341                return posix_fadvise( fd, offset, len, advice );
     
    372344
    373345                (*sqe){ IORING_OP_FADVISE, fd };
    374                 sqe->off = (__u64)offset;
     346                sqe->off = (uint64_t)offset;
    375347                sqe->len = len;
    376348                sqe->fadvise_advice = advice;
     
    387359
    388360                (*sqe){ IORING_OP_MADVISE, 0 };
    389                 sqe->addr = (__u64)addr;
     361                sqe->addr = (uint64_t)addr;
    390362                sqe->len = length;
    391363                sqe->fadvise_advice = advice;
     
    402374
    403375                (*sqe){ IORING_OP_OPENAT, dirfd };
    404                 sqe->addr = (__u64)pathname;
     376                sqe->addr = (uint64_t)pathname;
    405377                sqe->open_flags = flags;
    406378                sqe->len = mode;
     
    435407                __submit_prelude
    436408
    437                 (*sqe){ IORING_OP_STATX, dirfd, pathname, mask, (__u64)statxbuf };
     409                (*sqe){ IORING_OP_STATX, dirfd, pathname, mask, (uint64_t)statxbuf };
    438410                sqe->statx_flags = flags;
    439411
     
    477449                }
    478450                else {
    479                         sqe->off = (__u64)-1;
     451                        sqe->off = (uint64_t)-1;
    480452                }
    481453                sqe->len = len;
     
    485457                }
    486458                else {
    487                         sqe->splice_off_in = (__u64)-1;
     459                        sqe->splice_off_in = (uint64_t)-1;
    488460                }
    489461                sqe->splice_flags  = flags | (SPLICE_FLAGS & submit_flags);
Note: See TracChangeset for help on using the changeset viewer.