Coverage report: /home/ellis/comp/core/ffi/ublk/srv.lisp
Kind | Covered | All | % |
expression | 0 | 120 | 0.0 |
branch | 0 | 0 | nil |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;; ublk/srv.lisp --- ublksrv API
8
(define-alien-type ublksrv-ctrl-dev (struct ublksrv-ctrl-dev))
10
(define-alien-enum (ublk-f unsigned)
11
:support-zero-copy +ublk-f-support-zero-copy+
12
:uring-cmd-comp-in-task +ublk-f-uring-cmd-comp-in-task+
13
:need-get-date +ublk-f-need-get-data+
14
:user-recovery +ublk-f-user-recovery+
15
:user-recover-reissue +ublk-f-user-recovery-reissue+
16
:unprivileged-dev +ublk-f-unprivileged-dev+
17
:cmd-ioctl-encode +ublk-f-cmd-ioctl-encode+
18
:user-copy +ublk-f-user-copy+)
20
(define-alien-enum (ublksrv-f unsigned)
21
:need-eventfd +ublksrv-f-need-eventfd+)
23
(define-alien-enum (ublk-s-dev unsigned)
24
:dead +ublk-s-dev-dead+
25
:live +ublk-s-dev-live+
26
:quiesced +ublk-s-dev-quiesced+)
28
(define-alien-enum (ublk-io-op unsigned)
29
:read +ublk-io-op-read+
30
:write +ublk-io-op-write+
31
:flush +ublk-io-op-flush+
32
:discard +ublk-io-op-discard+
33
:write-same +ublk-io-op-write-same+
34
:write-zeroes +ublk-io-op-write-zeroes+)
36
(define-alien-enum (ublk-io-f unsigned)
37
:failfast-dev +ublk-io-f-failfast-dev+
38
:failfast-transport +ublk-io-f-failfast-transport+
39
:failfast-driver +ublk-io-f-failfast-driver+
40
:meta +ublk-io-f-meta+
42
:nounmap +ublk-io-f-nounmap+
43
:swap +ublk-io-f-swap+)
45
(define-alien-enum (ublk-attr unsigned)
46
:read-only +ublk-attr-read-only+
47
:rotational +ublk-attr-rotational+
48
:volatile-cache +ublk-attr-volatile-cache+
51
(define-alien-enum (ublk-io-res unsigned)
53
:need-get-data +ublk-io-res-need-get-data+
54
:abort +ublk-io-res-abort+)
57
(define-alien-type ublksrv-tgt-info
58
(struct ublksrv-tgt-info
59
(dev-size unsigned-long-long)
60
(tgt-ring-depth unsigned-int)
62
(fds (array int #.+ublksrv-tgt-max-fds+))
64
(extra-ios unsigned-int)
65
(io-data-size unsigned-int)
66
(ops (* (struct nil)))
67
(iowq-max-workers (array unsigned-int 2))
68
(reserved (array unsigned-long 4))))
70
(define-alien-type ublksrv-dev
72
(tgt ublksrv-tgt-info)))
74
(define-alien-type ublksrv-queue
78
(ring-ptr (* io-uring))
80
(private-data (* t))))
83
(define-alien-type ublk-io-data
87
(iod (* ublksrv-io-desc))
88
(private-data (* t))))
89
(define-alien-type ublksrv-handle-io-async-function (function int (* ublksrv-queue) (* ublk-io-data)))
90
(define-alien-type ublksrv-tgt-io-done-function (function void (* ublksrv-queue) (* ublk-io-data) (* io-uring-cqe)))
91
(define-alien-type ublksrv-handle-event-function (function void (* ublksrv-queue)))
92
(define-alien-type ublksrv-handle-io-background-function (function void (* ublksrv-queue) int))
93
(define-alien-type ublksrv-usage-for-add-function (function void))
94
(define-alien-type ublksrv-init-tgt-function (function int (* ublksrv-dev) int int (array c-string)))
95
(define-alien-type ublksrv-deinit-tgt-function (function void (* ublksrv-dev)))
96
(define-alien-type ublksrv-alloc-io-buf-function (function (* t) (* ublksrv-queue) (* t) int))
97
(define-alien-type ublksrv-idle-function (function void (* ublksrv-queue) boolean))
98
(define-alien-type ublksrv-recovery-tgt-function (function int (* ublksrv-dev) int))
99
(define-alien-type ublksrv-init-queue-function (function int (* ublksrv-dev) (* (* t))))
100
(define-alien-type ublksrv-deinit-queue-function (function void (* ublksrv-queue)))
101
(define-alien-type ublksrv-tgt-type
102
(struct ublksrv-tgt-type
103
(handle-io-async (* ublksrv-handle-io-async-function))
104
(tgt-io-done (* ublksrv-tgt-io-done-function))
105
(handle-event (* ublksrv-handle-event-function))
106
(handle-io-background (* ublksrv-handle-io-background-function))
107
(usage-for-add (* ublksrv-usage-for-add-function))
108
(init-tgt (* ublksrv-init-tgt-function))
109
(deinit-tgt (* ublksrv-deinit-tgt-function))
110
(alloc-io-buf (* ublksrv-alloc-io-buf-function))
111
(idle-fn (* ublksrv-idle-function))
113
(ublk-flags unsigned)
114
(ublksrv-flags unsigned)
117
(recovery-tgt (* ublksrv-recovery-tgt-function))
118
(init-queue (* ublksrv-init-queue-function))
119
(deinit-queue (* ublksrv-deinit-queue-function))
120
(reserved (array unsigned-long 5)))))
122
(define-alien-type ublksrv-dev-data
123
(struct ublksrv-dev-data
125
(max-io-buf-bytes unsigned)
126
(nr-hw-queues unsigned-short)
127
(queue-depth unsigned-short)
129
(tgt-ops (* (struct ublksrv-tgt-type)))
131
(tgt-argv (* (c-string)))
133
(flags unsigned-long)
134
(ublksrv-flags unsigned-long)
135
(reserved (array unsigned-long 7))))
137
(defun make-ublksrv-dev-data (dev-id &key (max-io-buf-bytes (floor +max-buf-size+ 4))
138
(nr-hw-queues (floor +max-nr-hw-queues+ 4))
139
(queue-depth (floor +max-qd+ 4))
143
(dir (namestring *default-pathname-defaults*))
146
(let ((dat (make-alien ublksrv-dev-data)))
147
(setf (slot dat 'dev-id) dev-id
148
(slot dat 'max-io-buf-bytes) max-io-buf-bytes
149
(slot dat 'nr-hw-queues) nr-hw-queues
150
(slot dat 'queue-depth) queue-depth
151
(slot dat 'tgt-type) type
152
(slot dat 'tgt-ops) ops
153
(slot dat 'tgt-argc) (length args)
154
(slot dat 'tgt-argv) (clone-strings args t)
155
(slot dat 'run-dir) (make-alien-string dir)
156
(slot dat 'flags) flags
157
(slot dat 'ublksrv-flags) ublksrv-flags)
160
(defar build-user-data (unsigned 64)
164
(is-target-io unsigned))
166
(defar ublksrv-ctrl-deinit void
167
(dev (* ublksrv-ctrl-dev)))
169
(defar ublksrv-ctrl-init (* ublksrv-ctrl-dev)
170
(data (* ublksrv-dev-data)))
172
(defar ublksrv-ctrl-get-affinity int
173
(ctrl-dev (* ublksrv-ctrl-dev)))
175
(defar ublksrv-ctrl-add-dev int
176
(dev (* ublksrv-ctrl-dev)))
178
(defar ublksrv-ctrl-del-dev int
179
(dev (* ublksrv-ctrl-dev)))
181
(defar ublksrv-ctrl-get-info int
182
(dev (* ublksrv-ctrl-dev)))
184
(defar ublksrv-ctrl-stop-dev int
185
(dev (* ublksrv-ctrl-dev)))
187
(defar ublksrv-ctrl-dump void
188
(dev (* ublksrv-ctrl-dev))
191
(defar ublksrv-ctrl-start-dev int
192
(ctrl-dev (* ublksrv-ctrl-dev))
195
(defar ublksrv-ctrl-set-params int
196
(dev (* ublksrv-ctrl-dev))
197
(params (* ublk-params)))
199
(defar ublksrv-ctrl-get-params int
200
(dev (* ublksrv-ctrl-dev))
201
(params (* ublk-params)))
203
(defar ublksrv-ctrl-start-recovery int
204
(dev (* ublksrv-ctrl-dev)))
206
(defar ublksrv-ctrl-end-recovery int
207
(dev (* ublksrv-ctrl-dev))
210
(defar ublksrv-ctrl-get-dev-info (* ublksrv-ctrl-dev-info)
211
(dev (* ublksrv-ctrl-dev)))
213
(defar ublksrv-ctrl-get-features int
214
(dev (* ublksrv-ctrl-dev))
215
(features (* unsigned-long)))
217
(defar ublksrv-ctrl-get-run-dir c-string
218
(dev (* ublksrv-ctrl-dev)))
220
(defar ublksrv-ctrl-prep-recovery void
221
(dev (* ublksrv-ctrl-dev))
223
(tgt-ops (* (struct ublksrv-tgt-type)))
224
(recovery-jbuf c-string))
226
(defar ublksrv-ctrl-get-recovery-jbuf c-string
227
(dev (* ublksrv-ctrl-dev)))
229
(defar ublksrv-is-recovering boolean
230
(ctrl-dev (* ublksrv-ctrl-dev)))
232
(defar ublksrv-dev-init (* ublksrv-dev)
233
(ctrl-dev (* ublksrv-ctrl-dev)))
235
(defar ublksrv-dev-deinit void
236
(dev (* ublksrv-dev)))
238
(defar ublksrv-get-ctrl-dev (* ublksrv-ctrl-dev)
239
(dev (* ublksrv-dev)))
241
(defar ublksrv-get-pidfile-fd int
242
(dev (* ublksrv-dev)))
244
(defar ublksrv-dev-set-cq-depth void
245
(dev (* ublksrv-dev))
248
(defar ublksrv-dev-get-cq-depth int
249
(dev (* ublksrv-dev)))
251
(defar ublksrv-apply-oom-protection void)
253
(define-alien-type ublksrv-tgt-base-json
254
(struct ublksrv-tgt-base-json
255
(name (array char #.+ublksrv-tgt-name-max-len+))
258
(dev-size unsigned-long-long)
259
(reserved (array unsigned-long 8))))
261
(defar ublksrv-json-write-dev-info int
262
(dev (* ublksrv-ctrl-dev))
266
(defar ublksrv-json-read-dev-info int
268
(info (* ublksrv-ctrl-dev-info)))
270
(defar ublksrv-json-write-queue-info int
271
(dev (* ublksrv-ctrl-dev))
275
(ubq-daemon-tid int))
277
(defar ublksrv-json-read-queue-info int
281
(affinity-buf (* char))
284
(defar ublksrv-json-read-target-info int
289
(defar ublksrv-json-read-target-str-info int
295
(defar ublksrv-json-read-target-ulong-info int
300
(defar ublksrv-json-write-target-str-info int
306
(defar ublksrv-json-write-target-long-info int
312
(defar ublksrv-json-write-target-ulong-info int
318
(defar ublksrv-json-dump void
321
(defar ublksrv-json-read-target-base-info int
323
(tgt (* ublksrv-tgt-base-json)))
325
(defar ublksrv-json-read-params int
329
(defar ublksrv-json-write-params int
334
(defar ublksrv-json-dump-params int
337
(defar ublksrv-json-get-length int (jbuf (* char)))
339
(defar ublksrv-io-private-data (* t)
340
(q (* ublksrv-queue))
343
(defar ublksrv-queue-get-io-data (* ublk-io-data)
344
(q (* ublksrv-queue))
347
(defar ublksrv-queue-get-io-buf (* t)
348
(q (* ublksrv-queue))
351
(defar ublksrv-queue-state unsigned-int
352
(q (* ublksrv-queue)))
354
(defar ublksrv-queue-init (* ublksrv-queue)
355
(dev (* ublksrv-dev))
356
(d-id unsigned-short)
359
(defar ublksrv-queue-deinit void
360
(q (* ublksrv-queue)))
362
(defar ublksrv-queue-unconsumed-cqes int
363
(q (* ublksrv-queue)))
365
(defar ublksrv-queue-handled-event int
366
(q (* ublksrv-queue)))
368
(defar ublksrv-queue-send-event int
369
(q (* ublksrv-queue)))
371
(defar ublksrv-get-queue (* ublksrv-queue)
372
(dev (* ublksrv-dev))
375
(defar ublksrv-process-io int
376
(q (* ublksrv-queue)))
378
(defar ublksrv-complete-io int
379
(q (* ublksrv-queue))