Subject: Re: [PATCH v14 2/8] net: introduce napi_busy_loop_rcu()

From: Simon Horman <[email-masked]>
Date: Tue, 6 Jun 2023 12:10:51 +0200

On Mon, Jun 05, 2023 at 02:20:03PM -0700, Stefan Roesch wrote:
> This introduces the napi_busy_loop_rcu() function. If the caller of
> napi_busy_loop() function is also taking the rcu read lock, it is possible
> that napi_busy_loop() is releasing the read lock if it invokes schedule.
> However the caller is expecting that the rcu read lock is not released
> until the function completes. This new function avoids that problem. It
> expects that the caller MUST hold the rcu_read_lock while calling this
> function.
> 
> Signed-off-by: Stefan Roesch <[email-masked]>

Hi Stefan,

some minor nits from my side, which you may
want to consider if you need to spin a v15 for some reason.

...

> diff --git a/net/core/dev.c b/net/core/dev.c
> index f4677aa20f84..fcd4a6a70646 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -6213,6 +6213,37 @@ static inline void __napi_busy_poll(struct napi_busy_poll_ctx *ctx,
>  				LINUX_MIB_BUSYPOLLRXPACKETS, work);
>  	local_bh_enable();
>  }
> +
> +/*
> + * Warning: can exit without calling need_resched().
> + */

For historical reasons, multi-line comments in Networking code are like
this.

/* Something
 * more
 */

Though I notice that dev.c doesn't follow this too closely,
perhaps for other historical reasons.

Anyway, in this case I'd suggest a single like comment.
Unless there is something more to say.

/* Warning: can exit without calling need_resched(). */

> +void napi_busy_loop_rcu(unsigned int napi_id,
> +		    bool (*loop_end)(void *, unsigned long),
> +		    void *loop_end_arg, bool prefer_busy_poll, u16 budget)

The indentation of the above two likes should align with the inside
of the opening parentheses.

void napi_busy_loop_rcu(unsigned int napi_id,
			bool (*loop_end)(void *, unsigned long),
			void *loop_end_arg, bool prefer_busy_poll, u16 budget)

...