@@ -16,7 +16,6 @@ package xdp
1616
1717import (
1818 "fmt"
19- "reflect"
2019 "unsafe"
2120
2221 "golang.org/x/sys/unix"
@@ -62,20 +61,16 @@ func sizeOfTXQueueDesc() uint64 {
6261}
6362
6463func (fq * FillQueue ) init (off unix.XDPMmapOffsets , opts Opts ) {
65- fillQueueRingHdr := (* reflect .SliceHeader )(unsafe .Pointer (& fq .ring ))
66- fillQueueRingHdr .Data = uintptr (unsafe .Pointer (& fq .mem [off .Fr .Desc ]))
67- fillQueueRingHdr .Len = int (opts .NDescriptors )
68- fillQueueRingHdr .Cap = fillQueueRingHdr .Len
64+ base := unsafe .Pointer (& fq .mem [off .Fr .Desc ])
65+ fq .ring = unsafe .Slice ((* uint64 )(base ), int (opts .NDescriptors ))
6966 fq .producer = (* atomicbitops .Uint32 )(unsafe .Pointer (& fq .mem [off .Fr .Producer ]))
7067 fq .consumer = (* atomicbitops .Uint32 )(unsafe .Pointer (& fq .mem [off .Fr .Consumer ]))
7168 fq .flags = (* atomicbitops .Uint32 )(unsafe .Pointer (& fq .mem [off .Fr .Flags ]))
7269}
7370
7471func (rq * RXQueue ) init (off unix.XDPMmapOffsets , opts Opts ) {
75- rxQueueRingHdr := (* reflect .SliceHeader )(unsafe .Pointer (& rq .ring ))
76- rxQueueRingHdr .Data = uintptr (unsafe .Pointer (& rq .mem [off .Rx .Desc ]))
77- rxQueueRingHdr .Len = int (opts .NDescriptors )
78- rxQueueRingHdr .Cap = rxQueueRingHdr .Len
72+ base := unsafe .Pointer (& rq .mem [off .Rx .Desc ])
73+ rq .ring = unsafe .Slice ((* unix .XDPDesc )(base ), int (opts .NDescriptors ))
7974 rq .producer = (* atomicbitops .Uint32 )(unsafe .Pointer (& rq .mem [off .Rx .Producer ]))
8075 rq .consumer = (* atomicbitops .Uint32 )(unsafe .Pointer (& rq .mem [off .Rx .Consumer ]))
8176 rq .flags = (* atomicbitops .Uint32 )(unsafe .Pointer (& rq .mem [off .Rx .Flags ]))
@@ -86,10 +81,8 @@ func (rq *RXQueue) init(off unix.XDPMmapOffsets, opts Opts) {
8681}
8782
8883func (cq * CompletionQueue ) init (off unix.XDPMmapOffsets , opts Opts ) {
89- completionQueueRingHdr := (* reflect .SliceHeader )(unsafe .Pointer (& cq .ring ))
90- completionQueueRingHdr .Data = uintptr (unsafe .Pointer (& cq .mem [off .Cr .Desc ]))
91- completionQueueRingHdr .Len = int (opts .NDescriptors )
92- completionQueueRingHdr .Cap = completionQueueRingHdr .Len
84+ base := unsafe .Pointer (& cq .mem [off .Cr .Desc ])
85+ cq .ring = unsafe .Slice ((* uint64 )(base ), int (opts .NDescriptors ))
9386 cq .producer = (* atomicbitops .Uint32 )(unsafe .Pointer (& cq .mem [off .Cr .Producer ]))
9487 cq .consumer = (* atomicbitops .Uint32 )(unsafe .Pointer (& cq .mem [off .Cr .Consumer ]))
9588 cq .flags = (* atomicbitops .Uint32 )(unsafe .Pointer (& cq .mem [off .Cr .Flags ]))
@@ -100,10 +93,8 @@ func (cq *CompletionQueue) init(off unix.XDPMmapOffsets, opts Opts) {
10093}
10194
10295func (tq * TXQueue ) init (off unix.XDPMmapOffsets , opts Opts ) {
103- txQueueRingHdr := (* reflect .SliceHeader )(unsafe .Pointer (& tq .ring ))
104- txQueueRingHdr .Data = uintptr (unsafe .Pointer (& tq .mem [off .Tx .Desc ]))
105- txQueueRingHdr .Len = int (opts .NDescriptors )
106- txQueueRingHdr .Cap = txQueueRingHdr .Len
96+ base := unsafe .Pointer (& tq .mem [off .Tx .Desc ])
97+ tq .ring = unsafe .Slice ((* unix .XDPDesc )(base ), int (opts .NDescriptors ))
10798 tq .producer = (* atomicbitops .Uint32 )(unsafe .Pointer (& tq .mem [off .Tx .Producer ]))
10899 tq .consumer = (* atomicbitops .Uint32 )(unsafe .Pointer (& tq .mem [off .Tx .Consumer ]))
109100 tq .flags = (* atomicbitops .Uint32 )(unsafe .Pointer (& tq .mem [off .Tx .Flags ]))
0 commit comments