From: Dan Carpenter <[email protected]>
To: [email protected], Xiaobing Li <[email protected]>,
[email protected], [email protected]
Cc: [email protected], [email protected],
[email protected], [email protected],
[email protected], [email protected], [email protected],
[email protected], [email protected],
[email protected], [email protected],
[email protected], Xiaobing Li <[email protected]>
Subject: Re: [PATCH v3] io_uring: Statistics of the true utilization of sq threads.
Date: Mon, 20 Nov 2023 09:26:19 -0500 [thread overview]
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
Hi Xiaobing,
kernel test robot noticed the following build warnings:
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Xiaobing-Li/io_uring-Statistics-of-the-true-utilization-of-sq-threads/20231115-211954
base: linus/master
patch link: https://lore.kernel.org/r/20231115121839.12556-1-xiaobing.li%40samsung.com
patch subject: [PATCH v3] io_uring: Statistics of the true utilization of sq threads.
config: x86_64-randconfig-161-20231115 (https://download.01.org/0day-ci/archive/20231116/[email protected]/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20231116/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Reported-by: Dan Carpenter <[email protected]>
| Closes: https://lore.kernel.org/r/[email protected]/
smatch warnings:
io_uring/fdinfo.c:138 io_uring_show_fdinfo() warn: variable dereferenced before check 'ctx' (see line 57)
io_uring/fdinfo.c:144 io_uring_show_fdinfo() error: we previously assumed 'sq' could be null (see line 141)
vim +/ctx +138 io_uring/fdinfo.c
3aaf22b62a9270 Jens Axboe 2023-07-10 53 __cold void io_uring_show_fdinfo(struct seq_file *m, struct file *f)
a4ad4f748ea962 Jens Axboe 2022-05-25 54 {
3aaf22b62a9270 Jens Axboe 2023-07-10 55 struct io_ring_ctx *ctx = f->private_data;
a4ad4f748ea962 Jens Axboe 2022-05-25 56 struct io_overflow_cqe *ocqe;
a4ad4f748ea962 Jens Axboe 2022-05-25 @57 struct io_rings *r = ctx->rings;
^^^^^^^^^^
Tons of unchecked dereferences so ctx can't be NULL.
a4ad4f748ea962 Jens Axboe 2022-05-25 58 unsigned int sq_mask = ctx->sq_entries - 1, cq_mask = ctx->cq_entries - 1;
a4ad4f748ea962 Jens Axboe 2022-05-25 59 unsigned int sq_head = READ_ONCE(r->sq.head);
a4ad4f748ea962 Jens Axboe 2022-05-25 60 unsigned int sq_tail = READ_ONCE(r->sq.tail);
a4ad4f748ea962 Jens Axboe 2022-05-25 61 unsigned int cq_head = READ_ONCE(r->cq.head);
a4ad4f748ea962 Jens Axboe 2022-05-25 62 unsigned int cq_tail = READ_ONCE(r->cq.tail);
a4ad4f748ea962 Jens Axboe 2022-05-25 63 unsigned int cq_shift = 0;
3b8fdd1dc35e39 Jens Axboe 2022-09-11 64 unsigned int sq_shift = 0;
a4ad4f748ea962 Jens Axboe 2022-05-25 65 unsigned int sq_entries, cq_entries;
7644b1a1c9a7ae Jens Axboe 2023-10-21 66 int sq_pid = -1, sq_cpu = -1;
5b1b61674371b7 Xiaobing Li 2023-11-15 67 int sq_busy = 0;
a4ad4f748ea962 Jens Axboe 2022-05-25 68 bool has_lock;
a4ad4f748ea962 Jens Axboe 2022-05-25 69 unsigned int i;
a4ad4f748ea962 Jens Axboe 2022-05-25 70
4f731705cc1f15 Jens Axboe 2022-09-11 71 if (ctx->flags & IORING_SETUP_CQE32)
a4ad4f748ea962 Jens Axboe 2022-05-25 72 cq_shift = 1;
3b8fdd1dc35e39 Jens Axboe 2022-09-11 73 if (ctx->flags & IORING_SETUP_SQE128)
3b8fdd1dc35e39 Jens Axboe 2022-09-11 74 sq_shift = 1;
a4ad4f748ea962 Jens Axboe 2022-05-25 75
a4ad4f748ea962 Jens Axboe 2022-05-25 76 /*
a4ad4f748ea962 Jens Axboe 2022-05-25 77 * we may get imprecise sqe and cqe info if uring is actively running
a4ad4f748ea962 Jens Axboe 2022-05-25 78 * since we get cached_sq_head and cached_cq_tail without uring_lock
a4ad4f748ea962 Jens Axboe 2022-05-25 79 * and sq_tail and cq_head are changed by userspace. But it's ok since
a4ad4f748ea962 Jens Axboe 2022-05-25 80 * we usually use these info when it is stuck.
a4ad4f748ea962 Jens Axboe 2022-05-25 81 */
a4ad4f748ea962 Jens Axboe 2022-05-25 82 seq_printf(m, "SqMask:\t0x%x\n", sq_mask);
a4ad4f748ea962 Jens Axboe 2022-05-25 83 seq_printf(m, "SqHead:\t%u\n", sq_head);
a4ad4f748ea962 Jens Axboe 2022-05-25 84 seq_printf(m, "SqTail:\t%u\n", sq_tail);
a4ad4f748ea962 Jens Axboe 2022-05-25 85 seq_printf(m, "CachedSqHead:\t%u\n", ctx->cached_sq_head);
a4ad4f748ea962 Jens Axboe 2022-05-25 86 seq_printf(m, "CqMask:\t0x%x\n", cq_mask);
a4ad4f748ea962 Jens Axboe 2022-05-25 87 seq_printf(m, "CqHead:\t%u\n", cq_head);
a4ad4f748ea962 Jens Axboe 2022-05-25 88 seq_printf(m, "CqTail:\t%u\n", cq_tail);
a4ad4f748ea962 Jens Axboe 2022-05-25 89 seq_printf(m, "CachedCqTail:\t%u\n", ctx->cached_cq_tail);
3b8fdd1dc35e39 Jens Axboe 2022-09-11 90 seq_printf(m, "SQEs:\t%u\n", sq_tail - sq_head);
a4ad4f748ea962 Jens Axboe 2022-05-25 91 sq_entries = min(sq_tail - sq_head, ctx->sq_entries);
a4ad4f748ea962 Jens Axboe 2022-05-25 92 for (i = 0; i < sq_entries; i++) {
a4ad4f748ea962 Jens Axboe 2022-05-25 93 unsigned int entry = i + sq_head;
a4ad4f748ea962 Jens Axboe 2022-05-25 94 struct io_uring_sqe *sqe;
3b8fdd1dc35e39 Jens Axboe 2022-09-11 95 unsigned int sq_idx;
a4ad4f748ea962 Jens Axboe 2022-05-25 96
32f5dea040ee6e Jens Axboe 2023-09-01 97 if (ctx->flags & IORING_SETUP_NO_SQARRAY)
32f5dea040ee6e Jens Axboe 2023-09-01 98 break;
3b8fdd1dc35e39 Jens Axboe 2022-09-11 99 sq_idx = READ_ONCE(ctx->sq_array[entry & sq_mask]);
a4ad4f748ea962 Jens Axboe 2022-05-25 100 if (sq_idx > sq_mask)
a4ad4f748ea962 Jens Axboe 2022-05-25 101 continue;
00927931cb630b Pavel Begunkov 2022-10-11 102 sqe = &ctx->sq_sqes[sq_idx << sq_shift];
3b8fdd1dc35e39 Jens Axboe 2022-09-11 103 seq_printf(m, "%5u: opcode:%s, fd:%d, flags:%x, off:%llu, "
3b8fdd1dc35e39 Jens Axboe 2022-09-11 104 "addr:0x%llx, rw_flags:0x%x, buf_index:%d "
3b8fdd1dc35e39 Jens Axboe 2022-09-11 105 "user_data:%llu",
3b8fdd1dc35e39 Jens Axboe 2022-09-11 106 sq_idx, io_uring_get_opcode(sqe->opcode), sqe->fd,
3b8fdd1dc35e39 Jens Axboe 2022-09-11 107 sqe->flags, (unsigned long long) sqe->off,
3b8fdd1dc35e39 Jens Axboe 2022-09-11 108 (unsigned long long) sqe->addr, sqe->rw_flags,
3b8fdd1dc35e39 Jens Axboe 2022-09-11 109 sqe->buf_index, sqe->user_data);
3b8fdd1dc35e39 Jens Axboe 2022-09-11 110 if (sq_shift) {
3b8fdd1dc35e39 Jens Axboe 2022-09-11 111 u64 *sqeb = (void *) (sqe + 1);
3b8fdd1dc35e39 Jens Axboe 2022-09-11 112 int size = sizeof(struct io_uring_sqe) / sizeof(u64);
3b8fdd1dc35e39 Jens Axboe 2022-09-11 113 int j;
3b8fdd1dc35e39 Jens Axboe 2022-09-11 114
3b8fdd1dc35e39 Jens Axboe 2022-09-11 115 for (j = 0; j < size; j++) {
3b8fdd1dc35e39 Jens Axboe 2022-09-11 116 seq_printf(m, ", e%d:0x%llx", j,
3b8fdd1dc35e39 Jens Axboe 2022-09-11 117 (unsigned long long) *sqeb);
3b8fdd1dc35e39 Jens Axboe 2022-09-11 118 sqeb++;
3b8fdd1dc35e39 Jens Axboe 2022-09-11 119 }
3b8fdd1dc35e39 Jens Axboe 2022-09-11 120 }
3b8fdd1dc35e39 Jens Axboe 2022-09-11 121 seq_printf(m, "\n");
a4ad4f748ea962 Jens Axboe 2022-05-25 122 }
a4ad4f748ea962 Jens Axboe 2022-05-25 123 seq_printf(m, "CQEs:\t%u\n", cq_tail - cq_head);
a4ad4f748ea962 Jens Axboe 2022-05-25 124 cq_entries = min(cq_tail - cq_head, ctx->cq_entries);
a4ad4f748ea962 Jens Axboe 2022-05-25 125 for (i = 0; i < cq_entries; i++) {
a4ad4f748ea962 Jens Axboe 2022-05-25 126 unsigned int entry = i + cq_head;
a4ad4f748ea962 Jens Axboe 2022-05-25 127 struct io_uring_cqe *cqe = &r->cqes[(entry & cq_mask) << cq_shift];
a4ad4f748ea962 Jens Axboe 2022-05-25 128
4f731705cc1f15 Jens Axboe 2022-09-11 129 seq_printf(m, "%5u: user_data:%llu, res:%d, flag:%x",
a4ad4f748ea962 Jens Axboe 2022-05-25 130 entry & cq_mask, cqe->user_data, cqe->res,
a4ad4f748ea962 Jens Axboe 2022-05-25 131 cqe->flags);
4f731705cc1f15 Jens Axboe 2022-09-11 132 if (cq_shift)
4f731705cc1f15 Jens Axboe 2022-09-11 133 seq_printf(m, ", extra1:%llu, extra2:%llu\n",
4f731705cc1f15 Jens Axboe 2022-09-11 134 cqe->big_cqe[0], cqe->big_cqe[1]);
4f731705cc1f15 Jens Axboe 2022-09-11 135 seq_printf(m, "\n");
a4ad4f748ea962 Jens Axboe 2022-05-25 136 }
a4ad4f748ea962 Jens Axboe 2022-05-25 137
5b1b61674371b7 Xiaobing Li 2023-11-15 @138 if (ctx && (ctx->flags & IORING_SETUP_SQPOLL)) {
^^^
Delete this check.
5b1b61674371b7 Xiaobing Li 2023-11-15 139 struct io_sq_data *sq = ctx->sq_data;
5b1b61674371b7 Xiaobing Li 2023-11-15 140
5b1b61674371b7 Xiaobing Li 2023-11-15 @141 if (sq && sq->total_time != 0)
^^
sq can be NULL?
5b1b61674371b7 Xiaobing Li 2023-11-15 142 sq_busy = (int)(sq->work_time * 100 / sq->total_time);
5b1b61674371b7 Xiaobing Li 2023-11-15 143
5b1b61674371b7 Xiaobing Li 2023-11-15 @144 sq_pid = sq->task_pid;
^^^^
Unchecked dereference.
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
prev parent reply other threads:[~2023-11-20 14:26 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20231115122627epcas5p37263cadafd5af20043fbb74e57fe5a4c@epcas5p3.samsung.com>
2023-11-15 12:18 ` [PATCH v3] io_uring: Statistics of the true utilization of sq threads Xiaobing Li
2023-11-15 13:51 ` Jens Axboe
2023-11-20 14:26 ` Dan Carpenter [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50ec567f-6b79-42ea-bf2c-2c9b2ecb427d@suswa.mountain \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox