Thread (48 messages) 48 messages, 9 authors, 2015-08-27

Re: [PATCHv3 4/5] mm: make compound_head() robust

From: Hugh Dickins <hughd@google.com>
Date: 2015-08-26 22:28:49
Also in: lkml

On Wed, 26 Aug 2015, Paul E. McKenney wrote:
On Wed, Aug 26, 2015 at 11:18:45AM -0700, Hugh Dickins wrote:
quoted
On Tue, 25 Aug 2015, Paul E. McKenney wrote:
quoted
On Tue, Aug 25, 2015 at 10:46:44PM +0200, Vlastimil Babka wrote:
quoted
On 25.8.2015 22:11, Paul E. McKenney wrote:
quoted
On Tue, Aug 25, 2015 at 09:33:54PM +0300, Kirill A. Shutemov wrote:
quoted
On Tue, Aug 25, 2015 at 01:44:13PM +0200, Vlastimil Babka wrote:
quoted
On 08/21/2015 02:10 PM, Kirill A. Shutemov wrote:
quoted
On Thu, Aug 20, 2015 at 04:36:43PM -0700, Andrew Morton wrote:
quoted
On Wed, 19 Aug 2015 12:21:45 +0300 "Kirill A. Shutemov" [off-list ref] wrote:
quoted
The patch introduces page->compound_head into third double word block in
front of compound_dtor and compound_order. That means it shares storage
space with:

 - page->lru.next;
 - page->next;
 - page->rcu_head.next;
 - page->pmd_huge_pte;
We should probably ask Paul about the chances that rcu_head.next would like
to use the bit too one day?
+Paul.
The call_rcu() function does stomp that bit, but if you stop using that
bit before you invoke call_rcu(), no problem.
You mean that it sets the bit 0 of rcu_head.next during its processing?
Not at the moment, though RCU will splat if given a misaligned rcu_head
structure because of the possibility to use that bit to flag callbacks
that do nothing but free memory.  If RCU needs to do that (e.g., to
promote energy efficiency), then that bit might well be set during
RCU grace-period processing.
But if you do one day implement that, wouldn't sl?b.c have to use
call_rcu_with_added_meaning() instead of call_rcu(), to be in danger
of getting that bit set?  (No rcu_head is placed in a PageTail page.)
Good point, call_rcu_lazy(), but yes.
quoted
So although it might be a little strange not to use a variant intended
for freeing memory when indeed that's what it's doing, it would not be
the end of the world for SLAB_DESTROY_BY_RCU to carry on using straight
call_rcu(), in defence of the struct page safety Kirill is proposing.
As long as you are OK with the bottom bit being zero throughout the RCU
processing, yes.
That's exactly what we want: sounds like we have no problem, thanks Paul.

Hugh

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help