Messages in this thread | | | Date | Wed, 18 Dec 2013 13:37:27 -0800 | Subject | Re: [PATCH -mm 6/7] mm: thp: introduce get_lock_thp_head() | From | Linus Torvalds <> |
| |
On Wed, Dec 18, 2013 at 11:20 AM, Oleg Nesterov <oleg@redhat.com> wrote: > Both __put_page_tail() and __get_page_tail() need to carefully > take a reference on page_head, take compound_lock() and recheck > PageTail(page) under this lock.
Btw I suspect this is just disgustingly expensive, and I don't think there's a really good reason for it.
May I suggest:
- getting rid of the PG_compound_lock bit-lock
bitlocks are expensive and unfair, and don't even get lockdep checking
- replace it with a (small, say 32-256 entries) array of hashed sequence locks
- just hash based on the "struct page" pointer, and teach this code to do a read_seqcount_begin/read_seqcount_retry sequence instead for the page lookup.
I think you can get rid of all the irq disables too, and the sequence lock should be pure memory reads for the read-case that we care about.
Hmm? This is obviously orthogonal to your series, I just reacted to seeing that bitlock thing that needs atomics for both locking and unlocking and the irq disable, and just generally looks like the worst possible way to do these things.
Linus
| |