]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests: ublk: remove ublk queue self-defined flags
authorMing Lei <ming.lei@redhat.com>
Sun, 13 Jul 2025 14:34:09 +0000 (22:34 +0800)
committerJens Axboe <axboe@kernel.dk>
Tue, 15 Jul 2025 14:04:17 +0000 (08:04 -0600)
Remove ublk queue self-defined flags, and use the uapi flags directly.

Signed-off-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20250713143415.2857561-15-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
tools/testing/selftests/ublk/kublk.c
tools/testing/selftests/ublk/kublk.h
tools/testing/selftests/ublk/null.c

index 944e0806ba05be2872175b0f6c2e2e0154c26e18..e902604686529612c13181214df68bafe89e0b12 100644 (file)
@@ -441,17 +441,10 @@ static int ublk_queue_init(struct ublk_queue *q, unsigned extra_flags)
        unsigned long off;
 
        q->tgt_ops = dev->tgt.ops;
-       q->state = 0;
+       q->flags = 0;
        q->q_depth = depth;
-
-       if (dev->dev_info.flags & (UBLK_F_SUPPORT_ZERO_COPY | UBLK_F_AUTO_BUF_REG)) {
-               q->state |= UBLKSRV_NO_BUF;
-               if (dev->dev_info.flags & UBLK_F_SUPPORT_ZERO_COPY)
-                       q->state |= UBLKSRV_ZC;
-               if (dev->dev_info.flags & UBLK_F_AUTO_BUF_REG)
-                       q->state |= UBLKSRV_AUTO_BUF_REG;
-       }
-       q->state |= extra_flags;
+       q->flags = dev->dev_info.flags;
+       q->flags |= extra_flags;
 
        cmd_buf_size = ublk_queue_cmd_buf_sz(q);
        off = UBLKSRV_CMD_BUF_OFFSET + q->q_id * ublk_queue_max_cmd_buf_sz();
@@ -469,7 +462,7 @@ static int ublk_queue_init(struct ublk_queue *q, unsigned extra_flags)
                q->ios[i].flags = UBLKSRV_NEED_FETCH_RQ | UBLKSRV_IO_FREE;
                q->ios[i].tag = i;
 
-               if (q->state & UBLKSRV_NO_BUF)
+               if (ublk_queue_no_buf(q))
                        continue;
 
                if (posix_memalign((void **)&q->ios[i].buf_addr,
@@ -583,7 +576,7 @@ static void ublk_set_auto_buf_reg(const struct ublk_queue *q,
        else
                buf.index = q->ios[tag].buf_index;
 
-       if (q->state & UBLKSRV_AUTO_BUF_REG_FALLBACK)
+       if (ublk_queue_auto_zc_fallback(q))
                buf.flags = UBLK_AUTO_BUF_REG_FALLBACK;
 
        sqe->addr = ublk_auto_buf_reg_to_sqe_addr(&buf);
@@ -639,12 +632,12 @@ int ublk_queue_io_cmd(struct ublk_thread *t, struct ublk_io *io)
        sqe[0]->rw_flags        = 0;
        cmd->tag        = io->tag;
        cmd->q_id       = q->q_id;
-       if (!(q->state & UBLKSRV_NO_BUF))
+       if (!ublk_queue_no_buf(q))
                cmd->addr       = (__u64) (uintptr_t) io->buf_addr;
        else
                cmd->addr       = 0;
 
-       if (q->state & UBLKSRV_AUTO_BUF_REG)
+       if (ublk_queue_use_auto_zc(q))
                ublk_set_auto_buf_reg(q, sqe[0], io->tag);
 
        user_data = build_user_data(io->tag, _IOC_NR(cmd_op), 0, q->q_id, 0);
@@ -739,7 +732,7 @@ static void ublk_handle_cqe(struct ublk_thread *t,
 
        if (cqe->res < 0 && cqe->res != -ENODEV)
                ublk_err("%s: res %d userdata %llx queue state %x\n", __func__,
-                               cqe->res, cqe->user_data, q->state);
+                               cqe->res, cqe->user_data, q->flags);
 
        ublk_dbg(UBLK_DBG_IO_CMD, "%s: res %d (qid %d tag %u cmd_op %u target %d/%d) stopping %d\n",
                        __func__, cqe->res, q->q_id, tag, cmd_op,
@@ -911,7 +904,7 @@ static int ublk_start_daemon(const struct dev_ctx *ctx, struct ublk_dev *dev)
 {
        const struct ublksrv_ctrl_dev_info *dinfo = &dev->dev_info;
        struct ublk_thread_info *tinfo;
-       unsigned extra_flags = 0;
+       unsigned long long extra_flags = 0;
        cpu_set_t *affinity_buf;
        void *thread_ret;
        sem_t ready;
index a4049984b0551984acc61c79c69c20350a0fe3c2..9ecb63bc930e19fe57f6bcb1351dcabb810bcbfc 100644 (file)
@@ -178,12 +178,10 @@ struct ublk_queue {
        const struct ublk_tgt_ops *tgt_ops;
        struct ublksrv_io_desc *io_cmd_buf;
 
+/* borrow one bit of ublk uapi flags, which may never be used */
+#define UBLKSRV_AUTO_BUF_REG_FALLBACK  (1ULL << 63)
+       __u64 flags;
        struct ublk_io ios[UBLK_QUEUE_DEPTH];
-#define UBLKSRV_NO_BUF         (1U << 2)
-#define UBLKSRV_ZC             (1U << 3)
-#define UBLKSRV_AUTO_BUF_REG           (1U << 4)
-#define UBLKSRV_AUTO_BUF_REG_FALLBACK  (1U << 5)
-       unsigned state;
 };
 
 struct ublk_thread {
@@ -437,12 +435,22 @@ static inline int ublk_completed_tgt_io(struct ublk_thread *t,
 
 static inline int ublk_queue_use_zc(const struct ublk_queue *q)
 {
-       return q->state & UBLKSRV_ZC;
+       return q->flags & UBLK_F_SUPPORT_ZERO_COPY;
 }
 
 static inline int ublk_queue_use_auto_zc(const struct ublk_queue *q)
 {
-       return q->state & UBLKSRV_AUTO_BUF_REG;
+       return q->flags & UBLK_F_AUTO_BUF_REG;
+}
+
+static inline int ublk_queue_auto_zc_fallback(const struct ublk_queue *q)
+{
+       return q->flags & UBLKSRV_AUTO_BUF_REG_FALLBACK;
+}
+
+static inline int ublk_queue_no_buf(const struct ublk_queue *q)
+{
+       return ublk_queue_use_zc(q) || ublk_queue_use_auto_zc(q);
 }
 
 extern const struct ublk_tgt_ops null_tgt_ops;
index 452dcc369c8b519c76925c5587c03f30983733ae..f0e0003a486018b05bde0b4a2137de42567fafe2 100644 (file)
@@ -138,7 +138,7 @@ static int ublk_null_queue_io(struct ublk_thread *t, struct ublk_queue *q,
  */
 static unsigned short ublk_null_buf_index(const struct ublk_queue *q, int tag)
 {
-       if (q->state & UBLKSRV_AUTO_BUF_REG_FALLBACK)
+       if (ublk_queue_auto_zc_fallback(q))
                return (unsigned short)-1;
        return q->ios[tag].buf_index;
 }