From: Steven Rostedt <rostedt@goodmis.org>
To: kernel test robot <lkp@intel.com>
Cc: Petr Pavlu <petr.pavlu@suse.com>, oe-kbuild-all@lists.linux.dev
Subject: Re: [trace:ring-buffer/for-next 2/4] kernel/trace/ring_buffer.c:1540 rb_check_pages() warn: inconsistent indenting
Date: Sat, 19 Oct 2024 11:07:43 -0400 [thread overview]
Message-ID: <20241019110743.72fa5f29@gandalf.local.home> (raw)
In-Reply-To: <202410192201.oCwXfxZf-lkp@intel.com>
On Sat, 19 Oct 2024 22:43:44 +0800
kernel test robot <lkp@intel.com> wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace ring-buffer/for-next
> head: 70c765743423ea51af71865aeb4530bcdf892300
> commit: 1f1c2bc9d0753afb466ad6f0c2cd9dc08ed637fa [2/4] ring-buffer: Limit time with disabled interrupts in rb_check_pages()
> config: i386-randconfig-141-20241019 (https://download.01.org/0day-ci/archive/20241019/202410192201.oCwXfxZf-lkp@intel.com/config)
> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
>
> 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 <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202410192201.oCwXfxZf-lkp@intel.com/
>
> smatch warnings:
> kernel/trace/ring_buffer.c:1540 rb_check_pages() warn: inconsistent indenting
>
> vim +1540 kernel/trace/ring_buffer.c
>
> 1493
> 1494 /**
> 1495 * rb_check_pages - integrity check of buffer pages
> 1496 * @cpu_buffer: CPU buffer with pages to test
> 1497 *
> 1498 * As a safety measure we check to make sure the data pages have not
> 1499 * been corrupted.
> 1500 */
> 1501 static void rb_check_pages(struct ring_buffer_per_cpu *cpu_buffer)
> 1502 {
> 1503 struct list_head *head, *tmp;
> 1504 unsigned long buffer_cnt;
> 1505 unsigned long flags;
> 1506 int nr_loops = 0;
> 1507
> 1508 /*
> 1509 * Walk the linked list underpinning the ring buffer and validate all
> 1510 * its next and prev links.
> 1511 *
> 1512 * The check acquires the reader_lock to avoid concurrent processing
> 1513 * with code that could be modifying the list. However, the lock cannot
> 1514 * be held for the entire duration of the walk, as this would make the
> 1515 * time when interrupts are disabled non-deterministic, dependent on the
> 1516 * ring buffer size. Therefore, the code releases and re-acquires the
> 1517 * lock after checking each page. The ring_buffer_per_cpu.cnt variable
> 1518 * is then used to detect if the list was modified while the lock was
> 1519 * not held, in which case the check needs to be restarted.
> 1520 *
> 1521 * The code attempts to perform the check at most three times before
> 1522 * giving up. This is acceptable because this is only a self-validation
> 1523 * to detect problems early on. In practice, the list modification
> 1524 * operations are fairly spaced, and so this check typically succeeds at
> 1525 * most on the second try.
> 1526 */
> 1527 again:
> 1528 if (++nr_loops > 3)
> 1529 return;
> 1530
> 1531 raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
> 1532 head = rb_list_head(cpu_buffer->pages);
> 1533 if (!rb_check_links(cpu_buffer, head))
> 1534 goto out_locked;
> 1535 buffer_cnt = cpu_buffer->cnt;
> 1536 tmp = head;
> 1537 raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
> 1538 return;
Bah, an extra "return" was added due to me rebasing the patch incorrectly.
I'll fix and will need to rebase my for-next branch.
-- Steve
> 1539
> > 1540 while (true) {
> 1541 raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
> 1542
> 1543 if (buffer_cnt != cpu_buffer->cnt) {
> 1544 /* The list was updated, try again. */
> 1545 raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
> 1546 goto again;
> 1547 }
> 1548
> 1549 tmp = rb_list_head(tmp->next);
> 1550 if (tmp == head)
> 1551 /* The iteration circled back, all is done. */
> 1552 goto out_locked;
> 1553
> 1554 if (!rb_check_links(cpu_buffer, tmp))
> 1555 goto out_locked;
> 1556
> 1557 raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
> 1558 }
> 1559
> 1560 out_locked:
> 1561 raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
> 1562 }
> 1563
>
next prev parent reply other threads:[~2024-10-19 15:07 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-19 14:43 [trace:ring-buffer/for-next 2/4] kernel/trace/ring_buffer.c:1540 rb_check_pages() warn: inconsistent indenting kernel test robot
2024-10-19 15:07 ` Steven Rostedt [this message]
2024-10-19 15:14 ` Steven Rostedt
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=20241019110743.72fa5f29@gandalf.local.home \
--to=rostedt@goodmis.org \
--cc=lkp@intel.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=petr.pavlu@suse.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.