From: Bart Van Assche <bvanassche@acm.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: mingo@redhat.com, tj@kernel.org, longman@redhat.com,
johannes.berg@intel.com, linux-kernel@vger.kernel.org,
Johannes Berg <johannes@sipsolutions.net>
Subject: Re: [PATCH v5 07/15] locking/lockdep: Free lock classes that are no longer in use
Date: Thu, 10 Jan 2019 10:51:27 -0800 [thread overview]
Message-ID: <1547146287.83374.49.camel@acm.org> (raw)
In-Reply-To: <20190110152412.GG30894@hirez.programming.kicks-ass.net>
On Thu, 2019-01-10 at 16:24 +0100, Peter Zijlstra wrote:
> /*
> * A data structure for delayed freeing of data structures that may be
> - * accessed by RCU readers at the time these were freed. The size of the array
> - * is a compromise between minimizing the amount of memory used by this array
> - * and minimizing the number of wait_event() calls by get_pending_free_lock().
> + * accessed by RCU readers at the time these were freed.
> */
> static struct pending_free {
> - struct list_head zapped_classes;
> struct rcu_head rcu_head;
> + int index;
> int pending;
> -} pending_free[2];
> -static DECLARE_WAIT_QUEUE_HEAD(rcu_cb);
> + struct list_head zapped[2];
> +} pending_free;
Hi Peter,
If the zapped[] array only has two elements there is no guarantee that an
element will be free when zap_class() is called. I think we need at least
num_online_cpus() elements to guarantee that at least one element is free
when zap_class() is called. So removing the wait loop from
get_pending_free_lock() seems wrong to me. Have you tried to run a workload
that keeps all CPUs busy and that triggers get_pending_free_lock()
frequently?
Thanks,
Bart.
next prev parent reply other threads:[~2019-01-10 18:51 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-17 21:29 [PATCH v5 00/15] locking/lockdep: Add support for dynamic keys Bart Van Assche
2018-12-17 21:29 ` [PATCH v5 01/15] locking/lockdep: Fix required memory size reported if CONFIG_PROVE_LOCKING=n Bart Van Assche
2018-12-17 21:29 ` [PATCH v5 02/15] locking/lockdep: Make zap_class() remove all matching lock order entries Bart Van Assche
2018-12-17 21:29 ` [PATCH v5 03/15] locking/lockdep: Reorder struct lock_class members Bart Van Assche
2018-12-17 21:29 ` [PATCH v5 04/15] locking/lockdep: Initialize the locks_before and locks_after lists earlier Bart Van Assche
2018-12-17 21:29 ` [PATCH v5 05/15] locking/lockdep: Split lockdep_free_key_range() and lockdep_reset_lock() Bart Van Assche
2018-12-17 21:29 ` [PATCH v5 06/15] locking/lockdep: Make it easy to detect whether or not inside a selftest Bart Van Assche
2018-12-17 21:29 ` [PATCH v5 07/15] locking/lockdep: Free lock classes that are no longer in use Bart Van Assche
2019-01-10 15:20 ` Peter Zijlstra
2019-01-10 15:45 ` Peter Zijlstra
2019-01-10 15:24 ` Peter Zijlstra
2019-01-10 18:51 ` Bart Van Assche [this message]
2019-01-10 19:44 ` Peter Zijlstra
2019-01-10 21:56 ` Bart Van Assche
2019-01-11 8:35 ` Peter Zijlstra
2019-02-13 0:42 ` Bart Van Assche
2019-01-10 15:28 ` Peter Zijlstra
2019-01-10 19:31 ` Bart Van Assche
2019-01-10 19:47 ` Peter Zijlstra
2018-12-17 21:29 ` [PATCH v5 08/15] locking/lockdep: Reuse list entries " Bart Van Assche
2018-12-17 21:29 ` [PATCH v5 09/15] locking/lockdep: Introduce lockdep_next_lockchain() and lock_chain_count() Bart Van Assche
2018-12-17 21:29 ` [PATCH v5 10/15] locking/lockdep: Reuse lock chains that have been freed Bart Van Assche
2018-12-17 21:29 ` [PATCH v5 11/15] locking/lockdep: Check data structure consistency Bart Van Assche
2019-01-10 15:51 ` Peter Zijlstra
2019-01-10 15:55 ` Peter Zijlstra
2018-12-17 21:29 ` [PATCH v5 12/15] locking/lockdep: Verify whether lock objects are small enough to be used as class keys Bart Van Assche
2018-12-17 21:30 ` [PATCH v5 13/15] locking/lockdep: Add support for dynamic keys Bart Van Assche
2018-12-17 21:30 ` [PATCH v5 14/15] kernel/workqueue: Use dynamic lockdep keys for workqueues Bart Van Assche
2018-12-17 21:30 ` [PATCH v5 15/15] lockdep tests: Test dynamic key registration Bart Van Assche
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=1547146287.83374.49.camel@acm.org \
--to=bvanassche@acm.org \
--cc=johannes.berg@intel.com \
--cc=johannes@sipsolutions.net \
--cc=linux-kernel@vger.kernel.org \
--cc=longman@redhat.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=tj@kernel.org \
/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
Powered by JetHome