From: Luis Chamberlain <mcgrof@kernel.org>
To: Ole Schuerks <ole0811sch@gmail.com>
Cc: linux-kbuild@vger.kernel.org, jude.gyimah@rub.de,
thorsten.berger@rub.de, deltaone@debian.org, jan.sollmann@rub.de,
masahiroy@kernel.org, linux-kernel@vger.kernel.org,
nathan@kernel.org, nicolas@fjasle.eu
Subject: Re: [PATCH v6 02/11] kbuild: Add list_size, list_at_index, list_for_each_from
Date: Wed, 4 Dec 2024 15:19:38 -0800 [thread overview]
Message-ID: <Z1DjikoDzwIAID5T@bombadil.infradead.org> (raw)
In-Reply-To: <20241028034949.95322-3-ole0811sch@gmail.com>
On Mon, Oct 28, 2024 at 04:49:40AM +0100, Ole Schuerks wrote:
> +/**
> + * list_size - counts the number of entries in a list
> + * @head: the list whose entries are counted
> + */
> +static inline size_t list_size(const struct list_head *head)
> +{
> + size_t ret = 0;
> +
> + for (struct list_head *curr = head->next; curr != head;
> + curr = curr->next)
> + ++ret;
> +
> + return ret;
What's wrong with list_count_nodes()?
> @@ -310,6 +325,40 @@ static inline int list_empty(const struct list_head *head)
> !list_entry_is_head(pos, head, member); \
> pos = n, n = list_next_entry(n, member))
>
> +/**
> + * list_for_each_entry_from - iterate over list of given type starting at a given node
> + * @pos: the type * to use as a loop cursor.
> + * @start: the node to start iterating at
> + * @head: the head for your list.
> + * @member: the name of the list_head within the struct.
> + */
> +#define list_for_each_entry_from(pos, start, head, member) \
> + for (pos = list_entry(start, typeof(*pos), member); \
> + !list_entry_is_head(pos, head, member); \
> + pos = list_next_entry(pos, member))
list_for_each_entry_from() exists on my tree on linux-next added
through commit e229c2fb3370a ("[LIST]: Introduce
list_for_each_entry_from") since v2.6.17, so since 2006.
> +/**
> + * list_at_index - retrieve the entry at index i in O(n)
> + * @i: index of entry to retrieve.
> + * @head: the head for your list.
> + * @type: the type of the struct the entries are embedded in.
> + * @member: the name of the list_head within the struct.
> + */
> +#define list_at_index(i, head, type, member) \
> + ({ \
> + type *__pos; \
> + size_t __counter = 0; \
> + list_for_each_entry(__pos, head, member) { \
> + if (__counter++ == i) \
> + break; \
> + if (__pos->member.next == head) { \
> + __pos = NULL; \
> + break; \
> + } \
> + } \
> + __pos; \
> + })
> +
Seems like the only thing being added. I'd just keep thsi internal
to your code for now, and later if we really want we can add this
as a generic helper. If you really want this on list.h I'd recommend
to find a few users of this already in kernel and generalize the common
thing to use it first and add it that way. Then you separate *that*
patches series from this one, and address that first, and address
the addition then as a seprate patch series.
If you keep it to the tool itself, just change the namespace to be not
be as generically named of course.
Luis
next prev parent reply other threads:[~2024-12-04 23:19 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-28 3:49 [PATCH v6 00/11] kbuild, kconfig: Add support for conflict resolution Ole Schuerks
2024-10-28 3:49 ` [PATCH v6 01/11] kconfig: Add PicoSAT interface Ole Schuerks
2024-12-04 23:07 ` Luis Chamberlain
2024-12-09 0:57 ` Ole Schuerks
2024-12-11 3:48 ` Luis Chamberlain
2024-10-28 3:49 ` [PATCH v6 02/11] kbuild: Add list_size, list_at_index, list_for_each_from Ole Schuerks
2024-12-04 23:19 ` Luis Chamberlain [this message]
2024-12-09 1:00 ` Ole Schuerks
2024-12-11 3:49 ` Luis Chamberlain
2024-10-28 3:49 ` [PATCH v6 03/11] kconfig: Add definitions Ole Schuerks
2024-10-28 3:49 ` [PATCH v6 04/11] kconfig: Add files for building constraints Ole Schuerks
2024-10-28 3:49 ` [PATCH v6 05/11] kconfig: Add files for handling expressions Ole Schuerks
2024-10-28 3:49 ` [PATCH v6 06/11] kconfig: Add files for RangeFix Ole Schuerks
2024-12-04 23:23 ` Luis Chamberlain
2024-10-28 3:49 ` [PATCH v6 07/11] kconfig: Add files with utility functions Ole Schuerks
2024-10-28 3:49 ` [PATCH v6 08/11] kconfig: Add tools Ole Schuerks
2024-10-28 3:49 ` [PATCH v6 09/11] kconfig: Add xconfig-modifications Ole Schuerks
2024-10-28 3:49 ` [PATCH v6 10/11] kconfig: Add loader.gif Ole Schuerks
2024-10-28 3:49 ` [PATCH v6 11/11] kconfig: Add documentation for the conflict resolver Ole Schuerks
2024-12-04 22:58 ` [PATCH v6 00/11] kbuild, kconfig: Add support for conflict resolution Luis Chamberlain
2024-12-04 23:26 ` Luis Chamberlain
2025-01-09 13:28 ` [PATCH v6 01/11] kconfig: Add PicoSAT interface Brendan Jackman
2025-01-10 19:15 ` Luis Chamberlain
2025-01-13 16:29 ` Brendan Jackman
2025-02-07 15:43 ` Thorsten Berger
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=Z1DjikoDzwIAID5T@bombadil.infradead.org \
--to=mcgrof@kernel.org \
--cc=deltaone@debian.org \
--cc=jan.sollmann@rub.de \
--cc=jude.gyimah@rub.de \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=masahiroy@kernel.org \
--cc=nathan@kernel.org \
--cc=nicolas@fjasle.eu \
--cc=ole0811sch@gmail.com \
--cc=thorsten.berger@rub.de \
/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