[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20200317163443.o5ffdpkp5t6axsl3@linux-p48b>
Date: Tue, 17 Mar 2020 09:34:43 -0700
From: Davidlohr Bueso <dave@...olabs.net>
To: Jason Baron <jbaron@...mai.com>
Cc: akpm@...ux-foundation.org, rpenyaev@...e.de,
linux-kernel@...r.kernel.org, normalperson@...t.net,
viro@...iv.linux.org.uk
Subject: Re: [PATCH v2] fs/epoll: make nesting accounting safe for -rt kernel
On Wed, 26 Feb 2020, Jason Baron wrote:
>Davidlohr Bueso pointed out that when CONFIG_DEBUG_LOCK_ALLOC is set
>ep_poll_safewake() can take several non-raw spinlocks after disabling
>interrupts. Since a spinlock can block in the -rt kernel, we can't take a
>spinlock after disabling interrupts. So let's re-work how we determine
>the nesting level such that it plays nicely with the -rt kernel.
>
>Let's introduce a 'nests' field in struct eventpoll that records the
>current nesting level during ep_poll_callback(). Then, if we nest again we
>can find the previous struct eventpoll that we were called from and
>increase our count by 1. The 'nests' field is protected by
>ep->poll_wait.lock.
>
>I've also moved the visited field to reduce the size of struct eventpoll
>from 184 bytes to 176 bytes on x86_64 for !CONFIG_DEBUG_LOCK_ALLOC,
>which is typical for a production config.
>
>Reported-by: Davidlohr Bueso <dbueso@...e.de>
>Signed-off-by: Jason Baron <jbaron@...mai.com>
Sorry for the tardy reply. This looks good to me:
Reviewed-by: Davidlohr Bueso <dbueso@...e.de>
Powered by blists - more mailing lists