From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>,
Michael Ellerman <mpe@ellerman.id.au>
Cc: Hari Bathini <hbathini@linux.vnet.ibm.com>,
Gavin Shan <gwshan@linux.vnet.ibm.com>,
Ben Herrenschmidt <benh@kernel.crashing.org>,
Paul Mackerras <paulus@samba.org>,
David Gibson <david@gibson.dropbear.id.au>,
Wei Yang <weiyang@linux.vnet.ibm.com>,
linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH] powerpc/powernv/pci-ioda: fix 32-bit TCE table init in kdump kernel
Date: Wed, 2 Sep 2015 19:00:31 +1000 [thread overview]
Message-ID: <55E6BAAF.9090502@ozlabs.ru> (raw)
In-Reply-To: <20150902011123.GA47557@linux.vnet.ibm.com>
On 09/02/2015 11:11 AM, Nishanth Aravamudan wrote:
> When attempting to kdump with the 4.2 kernel, we see for each PCI
> device:
>
> pci 0003:01 : [PE# 000] Assign DMA32 space
> pci 0003:01 : [PE# 000] Setting up 32-bit TCE table at 0..80000000
> pci 0003:01 : [PE# 000] Failed to create 32-bit TCE table, err -22
> PCI: Domain 0004 has 8 available 32-bit DMA segments
> PCI: 4 PE# for a total weight of 70
> pci 0004:01 : [PE# 002] Assign DMA32 space
> pci 0004:01 : [PE# 002] Setting up 32-bit TCE table at 0..80000000
> pci 0004:01 : [PE# 002] Failed to create 32-bit TCE table, err -22
> pci 0004:0d : [PE# 005] Assign DMA32 space
> pci 0004:0d : [PE# 005] Setting up 32-bit TCE table at 0..80000000
> pci 0004:0d : [PE# 005] Failed to create 32-bit TCE table, err -22
> pci 0004:0e : [PE# 006] Assign DMA32 space
> pci 0004:0e : [PE# 006] Setting up 32-bit TCE table at 0..80000000
> pci 0004:0e : [PE# 006] Failed to create 32-bit TCE table, err -22
> pci 0004:10 : [PE# 008] Assign DMA32 space
> pci 0004:10 : [PE# 008] Setting up 32-bit TCE table at 0..80000000
> pci 0004:10 : [PE# 008] Failed to create 32-bit TCE table, err -22
>
> and eventually the kdump kernel fails to boot as none of the PCI devices
> (including the disk controller) are successfully initialized.
>
> The EINVAL response is because the DMA window (the 2GB base window) is
> larger than the kdump kernel's reserved memory (crashkernel=, in this
> case specified to be 1024M). The check in question,
>
> if ((window_size > memory_hotplug_max()) || !is_power_of_2(window_size))
>
> is a valid sanity check for pnv_pci_ioda2_table_alloc_pages(), so adjust
> the caller to pass in a smaller window size if our maximum memory value
> is smaller than the DMA window.
>
> After this change, the PCI devices successfully set up the 32-bit TCE
> table and kdump succeeds.
>
> The problem was seen on a Firestone machine originally.
>
> Fixes: aca6913f5551 ("powerpc/powernv/ioda2: Introduce helpers to allocate TCE pages")
> Signed-off-by: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>
>
> diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
> index 85cbc96eff6c..0d7967e31169 100644
> --- a/arch/powerpc/platforms/powernv/pci-ioda.c
> +++ b/arch/powerpc/platforms/powernv/pci-ioda.c
> @@ -2077,10 +2077,17 @@ static long pnv_pci_ioda2_setup_default_config(struct pnv_ioda_pe *pe)
> {
> struct iommu_table *tbl = NULL;
> long rc;
> + /*
> + * In memory constrained environments, e.g. kdump kernel, the
> + * DMA window can be larger than available memory, which will
> + * cause errors later.
> + */
> + __u64 window_size =
I asked for "const __u64" ;)
Anyway,
Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>
> + min((u64)pe->table_group.tce32_size, memory_hotplug_max());
>
> rc = pnv_pci_ioda2_create_table(&pe->table_group, 0,
> IOMMU_PAGE_SHIFT_4K,
> - pe->table_group.tce32_size,
> + window_size,
> POWERNV_IOMMU_DEFAULT_LEVELS, &tbl);
> if (rc) {
> pe_err(pe, "Failed to create 32-bit TCE table, err %ld",
>
--
Alexey
next prev parent reply other threads:[~2015-09-02 9:00 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-02 1:11 [PATCH] powerpc/powernv/pci-ioda: fix 32-bit TCE table init in kdump kernel Nishanth Aravamudan
2015-09-02 9:00 ` Alexey Kardashevskiy [this message]
2015-09-02 15:39 ` [PATCH v2] " Nishanth Aravamudan
2015-09-03 9:58 ` Michael Ellerman
2015-09-03 15:59 ` Nishanth Aravamudan
2015-09-04 9:57 ` Michael Ellerman
2015-09-04 3:41 ` Alexey Kardashevskiy
2015-09-04 10:03 ` Michael Ellerman
2015-09-08 12:05 ` [v2] " Michael Ellerman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55E6BAAF.9090502@ozlabs.ru \
--to=aik@ozlabs.ru \
--cc=benh@kernel.crashing.org \
--cc=david@gibson.dropbear.id.au \
--cc=gwshan@linux.vnet.ibm.com \
--cc=hbathini@linux.vnet.ibm.com \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=nacc@linux.vnet.ibm.com \
--cc=paulus@samba.org \
--cc=weiyang@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).