linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Waiman Long <longman@redhat.com>
To: Kent Overstreet <kent.overstreet@linux.dev>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	linux-fsdevel@vger.kernel.org
Cc: tglx@linutronix.de, x86@kernel.org, tj@kernel.org,
	peterz@infradead.org, mathieu.desnoyers@efficios.com,
	paulmck@kernel.org, keescook@chromium.org,
	dave.hansen@linux.intel.com, mingo@redhat.com, will@kernel.org,
	boqun.feng@gmail.com, brauner@kernel.org
Subject: Re: [PATCH 43/50] lockdep: move held_lock to lockdep_types.h
Date: Mon, 18 Dec 2023 12:05:53 -0500	[thread overview]
Message-ID: <91824e90-0319-467c-a7a7-acda9464a542@redhat.com> (raw)
In-Reply-To: <20231216033300.3553457-11-kent.overstreet@linux.dev>

On 12/15/23 22:32, Kent Overstreet wrote:
> held_lock is embedded in task_struct, and we don't want sched.h pulling
> in all of lockdep.h
>
> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
> ---
>   include/linux/lockdep.h       | 57 -----------------------------------
>   include/linux/lockdep_types.h | 57 +++++++++++++++++++++++++++++++++++
>   2 files changed, 57 insertions(+), 57 deletions(-)
>
> diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
> index dc2844b071c2..08b0d1d9d78b 100644
> --- a/include/linux/lockdep.h
> +++ b/include/linux/lockdep.h
> @@ -82,63 +82,6 @@ struct lock_chain {
>   	u64				chain_key;
>   };
>   
> -#define MAX_LOCKDEP_KEYS_BITS		13
> -#define MAX_LOCKDEP_KEYS		(1UL << MAX_LOCKDEP_KEYS_BITS)
> -#define INITIAL_CHAIN_KEY		-1
> -
> -struct held_lock {
> -	/*
> -	 * One-way hash of the dependency chain up to this point. We
> -	 * hash the hashes step by step as the dependency chain grows.
> -	 *
> -	 * We use it for dependency-caching and we skip detection
> -	 * passes and dependency-updates if there is a cache-hit, so
> -	 * it is absolutely critical for 100% coverage of the validator
> -	 * to have a unique key value for every unique dependency path
> -	 * that can occur in the system, to make a unique hash value
> -	 * as likely as possible - hence the 64-bit width.
> -	 *
> -	 * The task struct holds the current hash value (initialized
> -	 * with zero), here we store the previous hash value:
> -	 */
> -	u64				prev_chain_key;
> -	unsigned long			acquire_ip;
> -	struct lockdep_map		*instance;
> -	struct lockdep_map		*nest_lock;
> -#ifdef CONFIG_LOCK_STAT
> -	u64 				waittime_stamp;
> -	u64				holdtime_stamp;
> -#endif
> -	/*
> -	 * class_idx is zero-indexed; it points to the element in
> -	 * lock_classes this held lock instance belongs to. class_idx is in
> -	 * the range from 0 to (MAX_LOCKDEP_KEYS-1) inclusive.
> -	 */
> -	unsigned int			class_idx:MAX_LOCKDEP_KEYS_BITS;
> -	/*
> -	 * The lock-stack is unified in that the lock chains of interrupt
> -	 * contexts nest ontop of process context chains, but we 'separate'
> -	 * the hashes by starting with 0 if we cross into an interrupt
> -	 * context, and we also keep do not add cross-context lock
> -	 * dependencies - the lock usage graph walking covers that area
> -	 * anyway, and we'd just unnecessarily increase the number of
> -	 * dependencies otherwise. [Note: hardirq and softirq contexts
> -	 * are separated from each other too.]
> -	 *
> -	 * The following field is used to detect when we cross into an
> -	 * interrupt context:
> -	 */
> -	unsigned int irq_context:2; /* bit 0 - soft, bit 1 - hard */
> -	unsigned int trylock:1;						/* 16 bits */
> -
> -	unsigned int read:2;        /* see lock_acquire() comment */
> -	unsigned int check:1;       /* see lock_acquire() comment */
> -	unsigned int hardirqs_off:1;
> -	unsigned int sync:1;
> -	unsigned int references:11;					/* 32 bits */
> -	unsigned int pin_count;
> -};
> -
>   /*
>    * Initialization, self-test and debugging-output methods:
>    */
> diff --git a/include/linux/lockdep_types.h b/include/linux/lockdep_types.h
> index 2ebc323d345a..9c533c8d701e 100644
> --- a/include/linux/lockdep_types.h
> +++ b/include/linux/lockdep_types.h
> @@ -198,6 +198,63 @@ struct lockdep_map {
>   
>   struct pin_cookie { unsigned int val; };
>   
> +#define MAX_LOCKDEP_KEYS_BITS		13
> +#define MAX_LOCKDEP_KEYS		(1UL << MAX_LOCKDEP_KEYS_BITS)
> +#define INITIAL_CHAIN_KEY		-1
> +
> +struct held_lock {
> +	/*
> +	 * One-way hash of the dependency chain up to this point. We
> +	 * hash the hashes step by step as the dependency chain grows.
> +	 *
> +	 * We use it for dependency-caching and we skip detection
> +	 * passes and dependency-updates if there is a cache-hit, so
> +	 * it is absolutely critical for 100% coverage of the validator
> +	 * to have a unique key value for every unique dependency path
> +	 * that can occur in the system, to make a unique hash value
> +	 * as likely as possible - hence the 64-bit width.
> +	 *
> +	 * The task struct holds the current hash value (initialized
> +	 * with zero), here we store the previous hash value:
> +	 */
> +	u64				prev_chain_key;
> +	unsigned long			acquire_ip;
> +	struct lockdep_map		*instance;
> +	struct lockdep_map		*nest_lock;
> +#ifdef CONFIG_LOCK_STAT
> +	u64 				waittime_stamp;
> +	u64				holdtime_stamp;
> +#endif
> +	/*
> +	 * class_idx is zero-indexed; it points to the element in
> +	 * lock_classes this held lock instance belongs to. class_idx is in
> +	 * the range from 0 to (MAX_LOCKDEP_KEYS-1) inclusive.
> +	 */
> +	unsigned int			class_idx:MAX_LOCKDEP_KEYS_BITS;
> +	/*
> +	 * The lock-stack is unified in that the lock chains of interrupt
> +	 * contexts nest ontop of process context chains, but we 'separate'
> +	 * the hashes by starting with 0 if we cross into an interrupt
> +	 * context, and we also keep do not add cross-context lock
> +	 * dependencies - the lock usage graph walking covers that area
> +	 * anyway, and we'd just unnecessarily increase the number of
> +	 * dependencies otherwise. [Note: hardirq and softirq contexts
> +	 * are separated from each other too.]
> +	 *
> +	 * The following field is used to detect when we cross into an
> +	 * interrupt context:
> +	 */
> +	unsigned int irq_context:2; /* bit 0 - soft, bit 1 - hard */
> +	unsigned int trylock:1;						/* 16 bits */
> +
> +	unsigned int read:2;        /* see lock_acquire() comment */
> +	unsigned int check:1;       /* see lock_acquire() comment */
> +	unsigned int hardirqs_off:1;
> +	unsigned int sync:1;
> +	unsigned int references:11;					/* 32 bits */
> +	unsigned int pin_count;
> +};
> +
>   #else /* !CONFIG_LOCKDEP */
>   
>   /*
Acked-by: Waiman Long <longman@redhat.com>


  reply	other threads:[~2023-12-18 17:05 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-16  2:47 [PATCH 00/50] big header dependency cleanup targeting sched.h Kent Overstreet
2023-12-16  2:47 ` [PATCH 01/50] drivers/gpu/drm/i915/i915_memcpy.c: fix missing includes Kent Overstreet
2024-03-08 13:46   ` Jani Nikula
2023-12-16  2:47 ` [PATCH 02/50] x86/kernel/fpu/bugs.c: fix missing include Kent Overstreet
2023-12-18 11:08   ` Sohil Mehta
2023-12-19  2:05     ` Kent Overstreet
2023-12-16  2:47 ` [PATCH 03/50] x86/lib/cache-smp.c: " Kent Overstreet
2023-12-18 10:48   ` Sohil Mehta
2023-12-19  2:06     ` Kent Overstreet
2023-12-19  4:04       ` Sohil Mehta
2023-12-16  2:47 ` [PATCH 04/50] x86/include/asm/debugreg.h: " Kent Overstreet
2023-12-16  2:47 ` [PATCH 05/50] x86/include/asm/paravirt_types.h: " Kent Overstreet
2023-12-16  2:47 ` [PATCH 06/50] task_stack.h: add " Kent Overstreet
2023-12-16  2:47 ` [PATCH 07/50] nsproxy.h: " Kent Overstreet
2023-12-16  2:47 ` [PATCH 08/50] kernel/fork.c: " Kent Overstreet
2023-12-16  2:47 ` [PATCH 09/50] kmsan: add missing types.h dependency Kent Overstreet
2023-12-16  2:47 ` [PATCH 10/50] time_namespace.h: fix missing include Kent Overstreet
2023-12-16  3:26 ` [PATCH 11/50] nodemask: Split out include/linux/nodemask_types.h Kent Overstreet
2023-12-16  3:26   ` [PATCH 12/50] prandom: Remove unused include Kent Overstreet
2023-12-16 18:52     ` Randy Dunlap
2023-12-16 22:19       ` Kent Overstreet
2023-12-16  3:26   ` [PATCH 13/50] timekeeping: Kill percpu.h dependency Kent Overstreet
2023-12-16  3:26   ` [PATCH 14/50] arm64: Fix circular header dependency Kent Overstreet
2023-12-16  3:26   ` [PATCH 15/50] kernel/numa.c: Move logging out of numa.h Kent Overstreet
2023-12-19 16:36     ` Nathan Chancellor
2023-12-19 21:02       ` Kent Overstreet
2023-12-19 22:52     ` Matthew Wilcox
2023-12-20  0:37       ` Kent Overstreet
2023-12-16  3:26   ` [PATCH 16/50] sched.h: Move (spin|rwlock)_needbreak() to spinlock.h Kent Overstreet
2024-01-15 20:31     ` Leonardo Bras
2023-12-16  3:26   ` [PATCH 17/50] ktime.h: move ktime_t to types.h Kent Overstreet
2023-12-16  3:26   ` [PATCH 18/50] hrtimers: Split out hrtimer_types.h Kent Overstreet
2023-12-16  3:26   ` [PATCH 19/50] locking/mutex: split out mutex_types.h Kent Overstreet
     [not found]     ` <7066c278-28e0-45eb-a046-eb684c4a659c@redhat.com>
2023-12-18 18:12       ` Waiman Long
2023-12-19  1:46       ` Kent Overstreet
2023-12-19  3:04         ` Waiman Long
2023-12-19  3:37           ` Kent Overstreet
2023-12-19  3:39             ` Waiman Long
2023-12-16  3:26   ` [PATCH 20/50] posix-cpu-timers: Split out posix-timers_types.h Kent Overstreet
2023-12-16  3:26   ` [PATCH 21/50] locking/seqlock: Split out seqlock_types.h Kent Overstreet
2023-12-18 17:02     ` Waiman Long
2023-12-16  3:29 ` [PATCH 22/50] pid: Split out pid_types.h Kent Overstreet
2023-12-16  3:29   ` [PATCH 23/50] sched.h: move pid helpers to pid.h Kent Overstreet
2023-12-16  3:29   ` [PATCH 24/50] plist: Split out plist_types.h Kent Overstreet
2023-12-16  3:29   ` [PATCH 25/50] wait: Remove uapi header file from main header file Kent Overstreet
2023-12-18 12:39     ` Christian Brauner
2023-12-16  3:29   ` [PATCH 26/50] rslib: kill bogus dependency on list.h Kent Overstreet
2023-12-16 19:05     ` Randy Dunlap
2023-12-16 19:09       ` Kent Overstreet
2023-12-16 19:10       ` Randy Dunlap
2023-12-16  3:29   ` [PATCH 27/50] timerqueue: Split out timerqueue_types.h Kent Overstreet
2023-12-16  3:29   ` [PATCH 28/50] signal: Kill bogus dependency on list.h Kent Overstreet
2023-12-16  3:29   ` [PATCH 29/50] timers: Split out timer_types.h Kent Overstreet
2023-12-16  3:29   ` [PATCH 30/50] workqueue: Split out workqueue_types.h Kent Overstreet
2023-12-16  3:29   ` [PATCH 31/50] shm: Slim down dependencies Kent Overstreet
2023-12-16  3:29   ` [PATCH 32/50] ipc: Kill bogus dependency on spinlock.h Kent Overstreet
2023-12-18 11:04   ` [PATCH 22/50] pid: Split out pid_types.h Christian Brauner
2023-12-16  3:32 ` [PATCH 33/50] Split out irqflags_types.h Kent Overstreet
2023-12-16  3:32   ` [PATCH 34/50] mm_types_task.h: Trim dependencies Kent Overstreet
2023-12-16  3:32   ` [PATCH 35/50] cpumask: Split out cpumask_types.h Kent Overstreet
2023-12-16  3:32   ` [PATCH 36/50] syscall_user_dispatch.h: split out *_types.h Kent Overstreet
2023-12-16  3:32   ` [PATCH 37/50] x86/signal: kill dependency on time.h Kent Overstreet
2023-12-16  3:32   ` [PATCH 38/50] uapi/linux/resource.h: fix include Kent Overstreet
2023-12-16  3:32   ` [PATCH 39/50] refcount: Split out refcount_types.h Kent Overstreet
2023-12-16  3:32   ` [PATCH 40/50] seccomp: Split out seccomp_types.h Kent Overstreet
2023-12-16  3:32   ` [PATCH 41/50] uidgid: Split out uidgid_types.h Kent Overstreet
2023-12-18 11:01     ` Christian Brauner
2023-12-16  3:32   ` [PATCH 42/50] sem: Split out sem_types.h Kent Overstreet
2023-12-20 11:53     ` Geert Uytterhoeven
2023-12-20 21:39       ` Kent Overstreet
2024-01-02  8:47         ` Geert Uytterhoeven
2023-12-16  3:32   ` [PATCH 43/50] lockdep: move held_lock to lockdep_types.h Kent Overstreet
2023-12-18 17:05     ` Waiman Long [this message]
2023-12-16  3:35 ` [PATCH 44/50] restart_block: Trim includes Kent Overstreet
2023-12-16  3:35   ` [PATCH 45/50] rseq: Split out rseq.h from sched.h Kent Overstreet
2023-12-16  3:35   ` [PATCH 46/50] preempt.h: Kill dependency on list.h Kent Overstreet
2023-12-16  6:13     ` Matthew Wilcox
2023-12-16 19:21       ` Randy Dunlap
2023-12-16 22:35       ` Kent Overstreet
2023-12-17  0:04         ` Randy Dunlap
2023-12-17  0:18           ` Matthew Wilcox
2023-12-17  0:20             ` Kent Overstreet
2023-12-17  2:03               ` Randy Dunlap
2023-12-17  2:05                 ` Kent Overstreet
2023-12-17  0:18           ` Kent Overstreet
2023-12-17  0:26             ` Randy Dunlap
2023-12-16  3:35   ` [PATCH 47/50] thread_info, uaccess.h: Move HARDENED_USERCOPY to better location Kent Overstreet
2023-12-16  3:35   ` [PATCH 48/50] Kill unnecessary kernel.h include Kent Overstreet
2023-12-16  3:35   ` [PATCH 49/50] kill unnecessary thread_info.h include Kent Overstreet
2023-12-16  3:35   ` [PATCH 50/50] Kill sched.h dependency on rcupdate.h Kent Overstreet
2023-12-16 19:35     ` Paul E. McKenney
2023-12-16 22:20       ` Kent Overstreet
2023-12-20 11:59     ` Geert Uytterhoeven
2023-12-20 21:39       ` Kent Overstreet
2024-01-02 11:39         ` Geert Uytterhoeven

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=91824e90-0319-467c-a7a7-acda9464a542@redhat.com \
    --to=longman@redhat.com \
    --cc=boqun.feng@gmail.com \
    --cc=brauner@kernel.org \
    --cc=dave.hansen@linux.intel.com \
    --cc=keescook@chromium.org \
    --cc=kent.overstreet@linux.dev \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@redhat.com \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --cc=will@kernel.org \
    --cc=x86@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;
as well as URLs for NNTP newsgroup(s).