Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751655AbcDNBet (ORCPT ); Wed, 13 Apr 2016 21:34:49 -0400 Received: from LGEAMRELO12.lge.com ([156.147.23.52]:53843 "EHLO lgeamrelo12.lge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750945AbcDNBes (ORCPT ); Wed, 13 Apr 2016 21:34:48 -0400 X-Original-SENDERIP: 156.147.1.127 X-Original-MAILFROM: iamjoonsoo.kim@lge.com X-Original-SENDERIP: 10.177.222.138 X-Original-MAILFROM: iamjoonsoo.kim@lge.com Date: Thu, 14 Apr 2016 10:35:47 +0900 From: Joonsoo Kim To: Valdis Kletnieks Cc: Andrew Morton , linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: linux-next crash during very early boot Message-ID: <20160414013546.GA9198@js1304-P5Q-DELUXE> References: <3689.1460593786@turing-police.cc.vt.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3689.1460593786@turing-police.cc.vt.edu> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1773 Lines: 54 On Wed, Apr 13, 2016 at 08:29:46PM -0400, Valdis Kletnieks wrote: > I'm seeing my laptop crash/wedge up/something during very early > boot - before it can write anything to the console. Nothing in pstore, > need to hold down the power button for 6 seconds and reboot. > > git bisect points at: > > commit 7a6bacb133752beacb76775797fd550417e9d3a2 > Author: Joonsoo Kim > Date: Thu Apr 7 13:59:39 2016 +1000 > > mm/slab: factor out kmem_cache_node initialization code > > It can be reused on other place, so factor out it. Following patch will > use it. > > > Not sure what the problem is - the logic *looks* ok at first read. The > patch *does* remove a spin_lock_irq() - but I find it difficult to > believe that with it gone, my laptop is able to hit the race condition > the spinlock protects against *every single boot*. > > The only other thing I see is that n->free_limit used to be assigned > every time, and now it's only assigned at initial creation. Hello, My fault. It should be assgined every time. Please test below patch. I will send it with proper SOB after you confirm the problem disappear. Thanks for report and analysis! Thanks. ---------------->8----------------- diff --git a/mm/slab.c b/mm/slab.c index 13e74aa..59dd94a 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -856,8 +856,14 @@ static int init_cache_node(struct kmem_cache *cachep, int node, gfp_t gfp) * node has not already allocated this */ n = get_node(cachep, node); - if (n) + if (n) { + spin_lock_irq(&n->list_lock); + n->free_limit = (1 + nr_cpus_node(node)) * cachep->batchcount + + cachep->num; + spin_unlock_irq(&n->list_lock); + return 0; + } n = kmalloc_node(sizeof(struct kmem_cache_node), gfp, node); if (!n)