Re: [PATCH 1/2] brw_mutex: big read-write mutex

From: Paul E. McKenney
Date: Wed Oct 17 2012 - 18:44:27 EST


On Wed, Oct 17, 2012 at 06:59:02PM +0200, Oleg Nesterov wrote:
> On 10/16, Linus Torvalds wrote:
> >
> > On Mon, Oct 15, 2012 at 12:10 PM, Oleg Nesterov <oleg@xxxxxxxxxx> wrote:
> > > This patch adds the new sleeping lock, brw_mutex. Unlike rw_semaphore
> > > it allows multiple writers too, just "read" and "write" are mutually
> > > exclusive.
> >
> > So those semantics just don't sound sane. It's also not what any kind
> > of normal "rw" lock ever does.
>
> Yes, this is not usual.
>
> And initially I made brw_sem which allows only 1 writer, but then
> I changed this patch.
>
> > So can you explain why these particular insane semantics are useful,
> > and what for?
>
> To allow multiple uprobe_register/unregister at the same time. Mostly
> to not add the "regression", currently this is possible.
>
> It is not that I think this is terribly important, but still. And
> personally I think that "multiple writers" is not necessarily insane
> in general. Suppose you have the complex object/subsystem, the readers
> can use a single brw_mutex to access it "lockless", start_read() is
> very cheap.
>
> But start_write() is slow. Multiple writes can use the fine-grained
> inside the start_write/end_write section and do not block each other.

Strangely enough, the old VAXCluster locking primitives allowed this
sort of thing. The brw_start_read() would be a "protected read", and
brw_start_write() would be a "concurrent write". Even more interesting,
they gave the same advice you give -- concurrent writes should use
fine-grained locking to protect the actual accesses.

It seems like it should be possible to come up with better names,
but I cannot think of any at the moment.

Thanx, Paul

PS. For the sufficiently masochistic, here is the exclusion table
for the six VAXCluster locking modes:

NL CR CW PR PW EX
NL
CR X
CW X X X
PR X X X
PW X X X X
EX X X X X X

"X" means that the pair of modes exclude each other,
otherwise the lock may be held in both of the modes
simultaneously.


Modes:

NL: Null, or "not held".
CR: Concurrent read.
CW: Concurrent write.
PR: Protected read.
PW: Protected write.
EX: Exclusive.


A reader-writer lock could use protected read for readers and either of
protected write or exclusive for writers, the difference between protected
write and exclusive being irrelevant in the absence of concurrent readers.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/