mirror of
https://github.com/ii64/gouring.git
synced 2025-04-26 05:42:48 +02:00
feat(): sqe addr setter
Signed-off-by: MastahSenpai <26342994+ii64@users.noreply.github.com>
This commit is contained in:
parent
292c65f6f5
commit
b4adb24416
2 changed files with 45 additions and 22 deletions
13
core_test.go
13
core_test.go
|
@ -4,7 +4,6 @@ import (
|
|||
"strings"
|
||||
"syscall"
|
||||
"testing"
|
||||
"unsafe"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
@ -34,18 +33,18 @@ func TestCore(t *testing.T) {
|
|||
sqe.Opcode = IORING_OP_WRITE
|
||||
sqe.Fd = int32(syscall.Stdout)
|
||||
sqe.UserData = uint64(i)
|
||||
*sqe.Addr() = (uint64)(uintptr(unsafe.Pointer(&m[0])))
|
||||
sqe.Len = uint32(len(m))
|
||||
sqe.SetOffset(0)
|
||||
sqe.SetAddr(&m[0])
|
||||
|
||||
*sq.Array().Get(sqIdx) = *sq.Head() & *sq.RingMask()
|
||||
*sq.Tail()++
|
||||
|
||||
t.Logf("Queued %d: %+#v", i, sqe)
|
||||
done, err := ring.Enter(1, 1, IORING_ENTER_GETEVENTS, nil)
|
||||
assert.NoError(t, err, "ring enter")
|
||||
t.Logf("done %d", done)
|
||||
}
|
||||
|
||||
done, err := ring.Enter(uint(n), uint(n), IORING_ENTER_GETEVENTS, nil)
|
||||
assert.NoError(t, err, "ring enter")
|
||||
t.Logf("done %d", done)
|
||||
|
||||
// get cq
|
||||
cq := ring.CQ()
|
||||
for i := 0; i < int(*cq.Tail()); i++ {
|
||||
|
|
|
@ -1,17 +1,22 @@
|
|||
package gouring
|
||||
|
||||
import "unsafe"
|
||||
import (
|
||||
"reflect"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
var (
|
||||
_sqe = SQEvent{}
|
||||
_sqe = SQEntry{}
|
||||
_sqe_mm = make([]byte, _sz_sqe)
|
||||
_sz_sqe = unsafe.Sizeof(_sqe)
|
||||
_cqe = CQEvent{}
|
||||
_cqe = CQEntry{}
|
||||
_cqe_mm = make([]byte, _sz_cqe)
|
||||
_sz_cqe = unsafe.Sizeof(_cqe)
|
||||
)
|
||||
|
||||
type SQEvent struct {
|
||||
//-- SQEntry
|
||||
|
||||
type SQEntry struct {
|
||||
Opcode UringOpcode
|
||||
Flags UringSQEFlag
|
||||
Ioprio uint16
|
||||
|
@ -35,45 +40,64 @@ type SQEvent struct {
|
|||
pad2 [2]uint64
|
||||
}
|
||||
|
||||
func (sqe *SQEvent) Offset() *uint64 {
|
||||
func (sqe *SQEntry) Offset() *uint64 {
|
||||
return &sqe.off__addr2
|
||||
}
|
||||
func (sqe *SQEvent) Addr2() *uint64 {
|
||||
func (sqe *SQEntry) SetOffset(v uint64) {
|
||||
*sqe.Offset() = v
|
||||
}
|
||||
func (sqe *SQEntry) Addr2() *uint64 {
|
||||
return &sqe.off__addr2
|
||||
}
|
||||
func (sqe *SQEntry) SetAddr2(v interface{}) {
|
||||
*sqe.Addr2() = (uint64)(reflect.ValueOf(v).Pointer())
|
||||
}
|
||||
|
||||
func (sqe *SQEvent) Addr() *uint64 {
|
||||
func (sqe *SQEntry) Addr() *uint64 {
|
||||
return &sqe.addr__splice_off_in
|
||||
}
|
||||
func (sqe *SQEvent) SpliceOffIn() *uint64 {
|
||||
func (sqe *SQEntry) SetAddr(v interface{}) {
|
||||
*sqe.Addr() = (uint64)(reflect.ValueOf(v).Pointer())
|
||||
}
|
||||
func (sqe *SQEntry) SpliceOffIn() *uint64 {
|
||||
return &sqe.addr__splice_off_in
|
||||
}
|
||||
|
||||
func (sqe *SQEvent) OpcodeFlags() *uint32 {
|
||||
func (sqe *SQEntry) OpcodeFlags() *uint32 {
|
||||
return &sqe.opcode__flags_events
|
||||
}
|
||||
func (sqe *SQEvent) OpodeEvents() *uint32 {
|
||||
func (sqe *SQEntry) OpodeEvents() *uint32 {
|
||||
return &sqe.opcode__flags_events
|
||||
}
|
||||
|
||||
func (sqe *SQEvent) BufIndex() *uint16 {
|
||||
func (sqe *SQEntry) BufIndex() *uint16 {
|
||||
return &sqe.buf__index_group
|
||||
}
|
||||
func (sqe *SQEvent) BufGroup() *uint16 {
|
||||
func (sqe *SQEntry) BufGroup() *uint16 {
|
||||
return &sqe.buf__index_group
|
||||
}
|
||||
|
||||
func (sqe *SQEvent) SpliceFdIn() *int32 {
|
||||
func (sqe *SQEntry) SpliceFdIn() *int32 {
|
||||
return &sqe.splice_fd_in__file_index
|
||||
}
|
||||
func (sqe *SQEvent) FileIndex() *uint32 {
|
||||
func (sqe *SQEntry) FileIndex() *uint32 {
|
||||
return (*uint32)(unsafe.Pointer(&sqe.splice_fd_in__file_index))
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
type CQEvent struct {
|
||||
func (sqe *SQEntry) Reset() {
|
||||
*sqe = _sqe
|
||||
}
|
||||
|
||||
//-- CQEntry
|
||||
|
||||
type CQEntry struct {
|
||||
UserData uint64 /* sqe->data submission passed back */
|
||||
Res int32 /* result code for this event */
|
||||
Flags UringCQEFlag
|
||||
}
|
||||
|
||||
func (cqe *CQEntry) Reset() {
|
||||
*cqe = _cqe
|
||||
}
|
Loading…
Add table
Reference in a new issue