On Wed, 2015-09-02 at 08:39 -0700, Nishanth Aravamudan wrote:
> On 02.09.2015 [19:00:31 +1000], Alexey Kardashevskiy wrote:
> > On 09/02/2015 11:11 AM, Nishanth Aravamudan wrote:
> > >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" ;)
> 
> I knew I'd forget something!

Nish! In future please send a reply with the above comment, and then the v2 as
a separate mail, otherwise I have to manually edit out your comment when
applying.

> 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")

That went into 4.2, so should this have a:

Cc: sta...@vger.kernel.org # 4.2

?

> diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c 
> b/arch/powerpc/platforms/powernv/pci-ioda.c
> index 85cbc96eff6c..e51aff01a218 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.
> +      */
> +     const __u64 window_size =

Why is this using __u64 and not u64, it's not exported to userspace.

It looks like pnv_pci_ioda2_create_table() uses __u64, but there's no reason
for that AFAICS either. And yes I did commit it so it's my fault :)

I'll fix this up to use u64.

cheers



_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to