1
0
Fork 0
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:
MastahSenpai 2021-12-22 00:30:08 +07:00
parent 292c65f6f5
commit b4adb24416
Signed by untrusted user who does not match committer: Xeffy
GPG key ID: E41C08AD390E7C49
2 changed files with 45 additions and 22 deletions

View file

@ -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++ {

View file

@ -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
}