Files
linux/include/linux
Peter Zijlstra 7531e2f34d lockdep: lock protection locks
On Fri, 2008-08-01 at 16:26 -0700, Linus Torvalds wrote:

> On Fri, 1 Aug 2008, David Miller wrote:
> >
> > Taking more than a few locks of the same class at once is bad
> > news and it's better to find an alternative method.
>
> It's not always wrong.
>
> If you can guarantee that anybody that takes more than one lock of a
> particular class will always take a single top-level lock _first_, then
> that's all good. You can obviously screw up and take the same lock _twice_
> (which will deadlock), but at least you cannot get into ABBA situations.
>
> So maybe the right thing to do is to just teach lockdep about "lock
> protection locks". That would have solved the multi-queue issues for
> networking too - all the actual network drivers would still have taken
> just their single queue lock, but the one case that needs to take all of
> them would have taken a separate top-level lock first.
>
> Never mind that the multi-queue locks were always taken in the same order:
> it's never wrong to just have some top-level serialization, and anybody
> who needs to take <n> locks might as well do <n+1>, because they sure as
> hell aren't going to be on _any_ fastpaths.
>
> So the simplest solution really sounds like just teaching lockdep about
> that one special case. It's not "nesting" exactly, although it's obviously
> related to it.

Do as Linus suggested. The lock protection lock is called nest_lock.

Note that we still have the MAX_LOCK_DEPTH (48) limit to consider, so anything
that spills that it still up shit creek.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-08-11 09:30:24 +02:00
..
2008-07-25 10:53:30 -07:00
2008-07-27 01:26:17 +02:00
2008-07-01 11:28:06 +10:00
2008-06-19 10:42:17 +10:00
2008-06-19 10:42:17 +10:00
2008-03-04 13:41:23 +01:00
2008-07-24 10:47:24 -07:00
2008-07-24 10:47:33 -07:00
2008-07-24 10:47:33 -07:00
2008-07-03 13:21:14 +02:00
2008-04-29 08:11:16 -07:00
2008-06-06 11:29:10 -07:00
2008-05-29 01:38:46 -07:00
2008-04-22 15:16:32 -05:00
2008-07-04 10:40:05 -07:00
2008-07-25 10:53:33 -07:00
2008-05-01 08:03:59 -07:00
2008-07-20 17:12:38 -07:00
2008-07-22 17:30:57 -07:00
2008-07-11 10:46:50 +02:00
2008-07-21 12:00:37 +01:00
2008-04-21 11:22:28 -05:00
2008-04-25 13:26:55 +01:00
2008-04-25 13:26:55 +01:00
2008-07-21 12:00:37 +01:00
2008-04-25 13:26:55 +01:00
2008-04-28 08:58:30 -07:00
2008-07-24 10:47:29 -07:00
2008-05-07 09:48:23 +02:00
2008-07-24 10:47:41 -07:00
2008-05-16 17:22:26 -04:00
2008-05-01 13:08:16 -04:00
2008-07-08 17:55:41 +02:00
2008-07-16 23:27:03 +02:00
2008-07-26 20:53:20 -04:00
2008-07-11 15:49:21 +02:00
2008-07-25 10:53:48 -07:00
2008-07-20 17:12:36 -07:00
2008-07-25 10:53:30 -07:00
2008-07-20 17:12:36 -07:00
2008-07-23 15:25:21 +02:00
2008-05-20 16:44:43 +02:00
2008-04-22 11:34:59 +02:00
2008-04-04 18:36:49 +02:00
2008-07-25 10:53:42 -07:00
2008-06-11 21:00:38 -07:00
2008-07-18 18:05:19 -07:00
2008-06-11 21:00:38 -07:00
2008-07-14 22:49:06 -07:00
2008-07-03 17:51:57 +09:00
2008-03-17 22:48:46 -07:00
2008-07-25 10:53:39 -07:00
2008-05-05 16:47:14 +10:00
2008-07-16 23:27:07 +02:00
2008-06-11 21:00:38 -07:00
2008-04-29 08:06:15 -07:00
2008-04-19 19:10:28 -07:00
2008-07-20 17:12:37 -07:00
2008-06-04 17:50:17 +01:00
2008-05-01 08:03:58 -07:00
2008-05-20 12:17:39 -04:00
2008-07-25 10:53:29 -07:00
2008-07-25 10:53:29 -07:00
2008-07-26 12:00:04 -07:00
2008-07-24 10:47:17 -07:00
2008-07-04 10:40:05 -07:00
2008-04-19 19:44:57 +02:00
2008-07-20 12:42:32 +03:00
2008-07-23 09:49:56 +01:00
2008-08-11 09:30:24 +02:00
2008-07-24 10:47:41 -07:00
2008-05-23 22:26:03 +02:00
2008-04-29 08:06:01 -07:00
2008-07-27 01:56:38 +02:00
2008-07-27 01:54:58 +02:00
2008-07-27 01:54:58 +02:00
2008-07-28 16:30:21 -07:00
2008-07-28 16:30:21 -07:00
2008-07-24 10:47:24 -07:00
2008-07-25 10:53:34 -07:00
2008-06-06 11:29:12 -07:00
2008-04-28 08:58:29 -07:00
2008-07-25 10:53:29 -07:00
2008-04-19 16:54:56 -04:00
2008-07-26 12:00:03 -07:00
2008-07-24 11:50:15 -07:00
2008-02-14 21:13:33 -08:00
2008-06-10 14:37:03 -07:00
2008-07-28 15:12:11 -07:00
2008-04-29 08:06:02 -07:00
2008-04-29 08:06:02 -07:00
2008-05-06 12:01:41 -04:00
2008-06-11 21:00:38 -07:00
2008-06-11 21:00:38 -07:00
2008-07-26 20:53:12 -04:00
2008-07-26 12:00:10 -07:00
2008-05-19 16:25:39 +01:00
2008-07-25 10:53:29 -07:00
2008-08-11 09:30:24 +02:00
2008-07-25 10:53:29 -07:00
2008-04-29 08:05:59 -07:00
2008-05-25 07:09:47 +02:00
2008-07-25 21:45:49 -07:00
2008-07-25 10:53:42 -07:00
2008-07-24 08:31:21 -04:00
2008-04-25 00:25:08 +02:00
2008-04-28 08:58:32 -07:00
2008-07-24 10:47:24 -07:00
2008-07-14 22:49:06 -07:00
2008-07-25 10:53:30 -07:00
2008-06-20 14:05:53 -06:00
2008-07-27 01:47:00 +02:00
2008-07-20 17:12:37 -07:00
2008-07-26 12:00:12 -07:00
2008-07-26 20:53:12 -04:00
2008-06-12 10:48:00 +02:00
2008-05-01 08:03:59 -07:00
2008-07-26 14:41:26 -07:00
2008-07-22 13:03:28 -07:00
2008-07-20 17:12:34 -07:00
2008-07-22 13:03:27 -07:00
2008-04-17 20:05:36 +02:00
2008-07-21 15:15:55 -07:00
2008-05-09 07:45:18 -07:00
2008-04-28 08:58:21 -07:00
2008-07-24 10:47:14 -07:00
2008-07-25 10:53:40 -07:00