From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.4 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id ADA95C3F2D1 for ; Thu, 5 Mar 2020 10:19:06 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 3C46020848 for ; Thu, 5 Mar 2020 10:19:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="QlHXBxG/" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3C46020848 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id AF84E6B0003; Thu, 5 Mar 2020 05:19:05 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id AA9A66B0005; Thu, 5 Mar 2020 05:19:05 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 997586B0007; Thu, 5 Mar 2020 05:19:05 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0145.hostedemail.com [216.40.44.145]) by kanga.kvack.org (Postfix) with ESMTP id 7DCA16B0003 for ; Thu, 5 Mar 2020 05:19:05 -0500 (EST) Received: from smtpin09.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 616141F1D for ; Thu, 5 Mar 2020 10:19:05 +0000 (UTC) X-FDA: 76560910650.09.bulb65_4f493a229501d X-HE-Tag: bulb65_4f493a229501d X-Filterd-Recvd-Size: 18602 Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by imf15.hostedemail.com (Postfix) with ESMTP for ; Thu, 5 Mar 2020 10:19:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1583403544; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=F8ucPs9XdAxs9vVDSCzDR5aZxfEe347Z6EPW0bBA8vg=; b=QlHXBxG/my+Wb8ZYIIAmslcaEVcsUsSji7R7yiWZ8AczB/BHc1tvP6fZiJUOdCmZoQLxgE lwF7nPjKUBKVk/rBjUTFcEt/jl7Qwx0kRpAaXiHW6XMC7999eRj5r+QnQXAs0dTqqQ5HSZ JMzKGEB5pPcHK2+VuNSZwJTRQeL0Rjw= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-310-SYKbgpTtNzuslssxdiT5wQ-1; Thu, 05 Mar 2020 05:18:57 -0500 X-MC-Unique: SYKbgpTtNzuslssxdiT5wQ-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9140D107B270; Thu, 5 Mar 2020 10:18:56 +0000 (UTC) Received: from [10.10.120.166] (ovpn-120-166.rdu2.redhat.com [10.10.120.166]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5A74D91D80; Thu, 5 Mar 2020 10:18:53 +0000 (UTC) Subject: Re: kdump twirling - does not finish - commit 326e1b8f83a4318b09033ef754f40c785aed5e68 To: Marshall Midden , linux-mm@kvack.org Cc: "mark.d.rustad@intel.com" References: From: David Hildenbrand Autocrypt: addr=david@redhat.com; prefer-encrypt=mutual; keydata= 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 Organization: Red Hat GmbH Message-ID: <03d36fe7-7607-dbbb-a507-b40d9baa5603@redhat.com> Date: Thu, 5 Mar 2020 11:18:50 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On 04.03.20 18:03, Marshall Midden wrote: > I know a translator is required - trying... Mark - is this better than > typical? >=20 > Problem: kdump is not finishing, hangs twirling ... iKVM > Found: Power failure. Qlogic/Cavium/Marvell driver crash, but no kernel > dump.=C2=A0 v5.3.8+local. > Reproduce: Boot, "echo c > /proc/sysrq-trigger" > Last known working release: v5.2.x (any of them). > First release failure: v5.3-rc1 > Tried many versions up to v5.6-rc4 (2020-03-01). >=20 > Repository: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.= git > System: Supermicro X10 dual socket x86_64, 64g/256g/512g (different > systems/MB/CPUs). > UserLand: RedHat7.5 > Tried (did not fix) kexec-tools fetched Feb 25th, 2020 from: > =C2=A0 =C2=A0 git://git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools= .git > > .config: No modules, except those listed below (only 10 "=3Dm"). > No modules in initramfs, /etc/dracut.conf.d/xxxx: > =C2=A0 =C2=A0 omit_drivers+=3D"qla2xxx nfs_layout_flexfiles" > =C2=A0 =C2=A0 omit_drivers+=3D" tcm_loop tcm_fc target_core_mod iscsi_tar= get_mod > target_core_file" > =C2=A0 =C2=A0 omit_drivers+=3D" target_core_iblock target_core_mod target= _core_pscsi" >=20 > Commit where problem appeared (git bisect): > =C2=A0 =C2=A0 commit 326e1b8f83a4318b09033ef754f40c785aed5e68 > =C2=A0 =C2=A0 Author: Dan Williams > > =C2=A0 =C2=A0 Date: =C2=A0 Thu Jul 18 15:58:00 2019 -0700 > -------------------------------------------------------------------------= ----- > -rw------- 1 root root 2174976 Feb 28 13:33 vmcore-incomplete > -rw-r--r-- 1 root root =C2=A0 87611 Feb 28 13:33 vmcore-dmesg.txt > verses > -rw------- 1 root root 1186929986 Mar =C2=A03 18:57 vmcore > -rw-r--r-- 1 root root =C2=A0 =C2=A0 181709 Mar =C2=A03 18:57 vmcore-dmes= g.txt > -------------------------------------------------------------------------= ----- > What am I breaking -- if I comment out the usage of early_section(ms) > in file mm/sparse.c -- although kdump's seems to work fine, etc. > // =C2=A0 =C2=A0 =C2=A0bool section_is_early =3D early_section(ms); > ... > // =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (!section_is_early)= { > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 kfree(ms->usage); > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 ms->usage =3D NULL; > // =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} > -------------------------------------------------------------------------= ----- > Humor: > =C2=A0 =C2=A0 commit 5f9e832c137075045d15cd6899ab0505cfb2ca4b (tag: v5.3-= rc1) > =C2=A0 =C2=A0 Author: Linus Torvalds > > =C2=A0 =C2=A0 Date: =C2=A0 Sun Jul 21 14:05:38 2019 -0700 > =C2=A0 =C2=A0 =C2=A0 =C2=A0 Linus 5.3-rc1 > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ^ > Horror: > =C2=A0 =C2=A0 No one else has run into this since the end of July? > -------------------------------------------------------------------------= ----- > Full git show below: >=20 > commit 326e1b8f83a4318b09033ef754f40c785aed5e68 > Author: Dan Williams > > Date: =C2=A0 Thu Jul 18 15:58:00 2019 -0700 >=20 > =C2=A0 =C2=A0 mm/sparsemem: introduce a SECTION_IS_EARLY flag >=20 > =C2=A0 =C2=A0 In preparation for sub-section hotplug, track whether a giv= en section > =C2=A0 =C2=A0 was created during early memory initialization, or later vi= a memory > =C2=A0 =C2=A0 hotplug.=C2=A0 This distinction is needed to maintain the c= oarse expectation > =C2=A0 =C2=A0 that pfn_valid() returns true for any pfn within a given se= ction even if > =C2=A0 =C2=A0 that section has pages that are reserved from the page allo= cator. >=20 > =C2=A0 =C2=A0 For example one of the of goals of subsection hotplug is to= support > =C2=A0 =C2=A0 cases where the system physical memory layout collides Syst= em RAM and > =C2=A0 =C2=A0 PMEM within a section.=C2=A0 Several pfn_valid() users expe= ct to just check > =C2=A0 =C2=A0 if a section is valid, but they are not careful to check if= the given > =C2=A0 =C2=A0 pfn is within a "System RAM" boundary and instead expect pg= dat > =C2=A0 =C2=A0 information to further validate the pfn. >=20 > =C2=A0 =C2=A0 Rather than unwind those paths to make their pfn_valid() qu= eries more > =C2=A0 =C2=A0 precise a follow on patch uses the SECTION_IS_EARLY flag to= maintain the > =C2=A0 =C2=A0 traditional expectation that pfn_valid() returns true for a= ll early > =C2=A0 =C2=A0 sections. >=20 > =C2=A0 =C2=A0 Link: > https://lore.kernel.org/lkml/1560366952-10660-1-git-send-email-cai@lca.pw= / > =C2=A0 =C2=A0 Link: > http://lkml.kernel.org/r/156092350358.979959.5817209875548072819.stgit@dw= illia2-desk3.amr.corp.intel.com > =C2=A0 =C2=A0 Signed-off-by: Dan Williams > > =C2=A0 =C2=A0 Reported-by: Qian Cai > > =C2=A0 =C2=A0 Tested-by: Aneesh Kumar K.V > =C2=A0 =C2=A0 =C2=A0 =C2=A0[ppc64] > =C2=A0 =C2=A0 Reviewed-by: Oscar Salvador > > =C2=A0 =C2=A0 Cc: Michal Hocko > > =C2=A0 =C2=A0 Cc: Logan Gunthorpe > > =C2=A0 =C2=A0 Cc: David Hildenbrand > > =C2=A0 =C2=A0 Cc: Pavel Tatashin > > =C2=A0 =C2=A0 Cc: Jane Chu > > =C2=A0 =C2=A0 Cc: Jeff Moyer > > =C2=A0 =C2=A0 Cc: J=C3=A9r=C3=B4me Glisse > > =C2=A0 =C2=A0 Cc: Jonathan Corbet = > > =C2=A0 =C2=A0 Cc: Mike Rapoport > > =C2=A0 =C2=A0 Cc: Toshi Kani > > =C2=A0 =C2=A0 Cc: Vlastimil Babka = > > =C2=A0 =C2=A0 Cc: Wei Yang > > =C2=A0 =C2=A0 Cc: Jason Gunthorpe > > =C2=A0 =C2=A0 Cc: Christoph Hellwig > > =C2=A0 =C2=A0 Signed-off-by: Andrew Morton > > =C2=A0 =C2=A0 Signed-off-by: Linus Torvalds > >=20 > diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h > index 2520336bdfd1..4be40634238b 100644 > --- a/include/linux/mmzone.h > +++ b/include/linux/mmzone.h > @@ -1260,7 +1260,8 @@ extern size_t mem_section_usage_size(void); > =C2=A0#define =C2=A0 =C2=A0 =C2=A0 =C2=A0SECTION_MARKED_PRESENT =C2=A0(1U= L<<0) > =C2=A0#define SECTION_HAS_MEM_MAP =C2=A0 =C2=A0(1UL<<1) > =C2=A0#define SECTION_IS_ONLINE =C2=A0 =C2=A0 =C2=A0(1UL<<2) > -#define SECTION_MAP_LAST_BIT =C2=A0 (1UL<<3) > +#define SECTION_IS_EARLY =C2=A0 =C2=A0 =C2=A0 (1UL<<3) > +#define SECTION_MAP_LAST_BIT =C2=A0 (1UL<<4) > =C2=A0#define SECTION_MAP_MASK =C2=A0 =C2=A0 =C2=A0 (~(SECTION_MAP_LAST_B= IT-1)) > =C2=A0#define SECTION_NID_SHIFT =C2=A0 =C2=A0 =C2=A03 >=20 > @@ -1286,6 +1287,11 @@ static inline int valid_section(struct > mem_section *section) > =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (section && (section->section_mem_map = & > SECTION_HAS_MEM_MAP)); > =C2=A0} >=20 > +static inline int early_section(struct mem_section *section) > +{ > + =C2=A0 =C2=A0 =C2=A0 return (section && (section->section_mem_map & SEC= TION_IS_EARLY)); > +} > + > =C2=A0static inline int valid_section_nr(unsigned long nr) > =C2=A0{ > =C2=A0 =C2=A0 =C2=A0 =C2=A0 return valid_section(__nr_to_section(nr)); > diff --git a/mm/sparse.c b/mm/sparse.c > index 41bef8e1f65c..6d23a526279a 100644 > --- a/mm/sparse.c > +++ b/mm/sparse.c > @@ -288,11 +288,11 @@ struct page *sparse_decode_mem_map(unsigned long > coded_mem_map, unsigned long pn >=20 > =C2=A0static void __meminit sparse_init_one_section(struct mem_section *m= s, > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 unsigned long pnu= m, struct page *mem_map, > - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 struct mem_section_usa= ge *usage) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 struct mem_section_usa= ge *usage, unsigned long flags) > =C2=A0{ > =C2=A0 =C2=A0 =C2=A0 =C2=A0 ms->section_mem_map &=3D ~SECTION_MAP_MASK; > - =C2=A0 =C2=A0 =C2=A0 ms->section_mem_map |=3D sparse_encode_mem_map(mem= _map, pnum) | > - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 SECTION_HAS_MEM_MAP; > + =C2=A0 =C2=A0 =C2=A0 ms->section_mem_map |=3D sparse_encode_mem_map(mem= _map, pnum) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | SECTION_HAS_MEM_MAP = | flags; > =C2=A0 =C2=A0 =C2=A0 =C2=A0 ms->usage =3D usage; > =C2=A0} >=20 > @@ -497,7 +497,8 @@ static void __init sparse_init_nid(int nid, unsigned > long pnum_begin, > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 goto failed; > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 } > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 check_usemap_sect= ion_nr(nid, usage); > - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sparse_init_one_sectio= n(__nr_to_section(pnum), pnum, > map, usage); > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sparse_init_one_sectio= n(__nr_to_section(pnum), pnum, > map, usage, > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 SECTION_IS_EARLY); > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 usage =3D (void *= ) usage + mem_section_usage_size(); > =C2=A0 =C2=A0 =C2=A0 =C2=A0 } > =C2=A0 =C2=A0 =C2=A0 =C2=A0 sparse_buffer_fini(); > @@ -732,7 +733,7 @@ int __meminit sparse_add_one_section(int nid, > unsigned long start_pfn, >=20 > =C2=A0 =C2=A0 =C2=A0 =C2=A0 set_section_nid(section_nr, nid); > =C2=A0 =C2=A0 =C2=A0 =C2=A0 section_mark_present(ms); > - =C2=A0 =C2=A0 =C2=A0 sparse_init_one_section(ms, section_nr, memmap, us= age); > + =C2=A0 =C2=A0 =C2=A0 sparse_init_one_section(ms, section_nr, memmap, us= age, 0); >=20 > =C2=A0out: > =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (ret < 0) { > @@ -772,19 +773,16 @@ static inline void clear_hwpoisoned_pages(struct > page *memmap, int nr_pages) > =C2=A0} > =C2=A0#endif >=20 > -static void free_section_usage(struct page *memmap, > +static void free_section_usage(struct mem_section *ms, struct page *memm= ap, > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 struct mem_sectio= n_usage *usage, struct vmem_altmap *altmap) > =C2=A0{ > - =C2=A0 =C2=A0 =C2=A0 struct page *usage_page; > - > =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (!usage) > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return; >=20 > - =C2=A0 =C2=A0 =C2=A0 usage_page =3D virt_to_page(usage); > =C2=A0 =C2=A0 =C2=A0 =C2=A0 /* > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* Check to see if allocation came from = hot-plug-add > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*/ > - =C2=A0 =C2=A0 =C2=A0 if (PageSlab(usage_page) || PageCompound(usage_pag= e)) { > + =C2=A0 =C2=A0 =C2=A0 if (!early_section(ms)) { > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 kfree(usage); > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (memmap) > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 __kfree_section_memmap(memmap, altmap); > @@ -816,6 +814,6 @@ void sparse_remove_one_section(struct mem_section > *ms, unsigned long map_offset, >=20 > =C2=A0 =C2=A0 =C2=A0 =C2=A0 clear_hwpoisoned_pages(memmap + map_offset, > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 PAGES_PER_SECTION - map_offset); > - =C2=A0 =C2=A0 =C2=A0 free_section_usage(memmap, usage, altmap); > + =C2=A0 =C2=A0 =C2=A0 free_section_usage(ms, memmap, usage, altmap); > =C2=A0} > =C2=A0#endif /* CONFIG_MEMORY_HOTPLUG */ >=20 I am most probably missing some context here. But we do have commit 8068df3b60373c390198f660574ea14c8098de57 Author: David Hildenbrand Date: Mon Jan 13 16:29:07 2020 -0800 mm/memory_hotplug: don't free usage map when removing a re-added early section Does that fix your issue? --=20 Thanks, David / dhildenb