git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git
"next" branch sha1 e682e4c needs 3 fixes to get NVLink passthrough
working (in fact 4 but the last one is goind via VFIO tree),
two of them are in this patchset; also:
35a3a27 "powerpc/powernv: Exclude root bus in pnv_pci_reset_secondary_bus()"
needs to be reverted (otherwise it produces EEH during GPU FLR reset, i.e.
each time when the guest starts and stops).
Please comment. Thanks.
Alexey Kardashevskiy (2):
powerpc/powernv: Fix insufficient memory allocation
powerpc/powernv/npu: Add PE to PHB's list
arch/powerpc/platforms/powernv/pci-ioda.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
--
2.5.0.rc3
The pnv_pci_init_ioda_phb() helper allocates a blob to store auxilary
data such PE and M32/M64 segment allocation maps; this single blob has few
partitions, size of each is derived from the PE number -
phb->ioda.total_pe_num.
It was assumed that the minimum PE number is 8, however it is 4 for NPU
so the pe_alloc part was missing in the allocated blob.
It was invisible till recently as we were not tracking used M64 segments
and NPUs do not use M32 segments so the phb->ioda.m32_segmap
(which was pointing to the same address as phb->ioda.pe_alloc)
has never been written to leaving the pe_alloc memory intact.
After 401203ac2d "powerpc/powernv: Track M64 segment consumption"
the pe_alloc gets corrupted and PE allocation cannot work.
This fixes the issue by enforcing the minimum PE number to 8.
Signed-off-by: Alexey Kardashevskiy <redacted>
---
arch/powerpc/platforms/powernv/pci-ioda.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
@@ -3507,7 +3507,8 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np,PNV_IODA1_DMA32_SEGSIZE;/* Allocate aux data & arrays. We don't have IO ports on PHB3 */-size=_ALIGN_UP(phb->ioda.total_pe_num/8,sizeof(unsignedlong));+size=_ALIGN_UP(max_t(unsigned,phb->ioda.total_pe_num,8)/8,+sizeof(unsignedlong));m64map_off=size;size+=phb->ioda.total_pe_num*sizeof(phb->ioda.m64_segmap[0]);m32map_off=size;
Before 3e68dc57 "powerpc/powernv: Remove DMA32 PE list", NPU PEs
were linked to the NPU PHB via phb->ioda.pe_dma_list; after that fix,
the phb->ioda.pe_list is used.
During the pe_dma_list removal, list_add_tail(&phb->ioda.pe_dma_list)
was removed, however no list_add() was added so does this patch.
Signed-off-by: Alexey Kardashevskiy <redacted>
---
arch/powerpc/platforms/powernv/pci-ioda.c | 3 +++
1 file changed, 3 insertions(+)
@@ -1009,6 +1009,9 @@ static struct pnv_ioda_pe *pnv_ioda_setup_dev_PE(struct pci_dev *dev)returnNULL;}+/* Put PE to the list */+list_add_tail(&pe->list,&phb->ioda.pe_list);+returnpe;}
On Thu, May 12, 2016 at 03:47:10PM +1000, Alexey Kardashevskiy wrote:
Before 3e68dc57 "powerpc/powernv: Remove DMA32 PE list", NPU PEs
were linked to the NPU PHB via phb->ioda.pe_dma_list; after that fix,
the phb->ioda.pe_list is used.
During the pe_dma_list removal, list_add_tail(&phb->ioda.pe_dma_list)
was removed, however no list_add() was added so does this patch.
Signed-off-by: Alexey Kardashevskiy <redacted>
On Thu, May 12, 2016 at 03:47:09PM +1000, Alexey Kardashevskiy wrote:
The pnv_pci_init_ioda_phb() helper allocates a blob to store auxilary
data such PE and M32/M64 segment allocation maps; this single blob has few
partitions, size of each is derived from the PE number -
phb->ioda.total_pe_num.
It was assumed that the minimum PE number is 8, however it is 4 for NPU
so the pe_alloc part was missing in the allocated blob.
It was invisible till recently as we were not tracking used M64 segments
and NPUs do not use M32 segments so the phb->ioda.m32_segmap
(which was pointing to the same address as phb->ioda.pe_alloc)
has never been written to leaving the pe_alloc memory intact.
After 401203ac2d "powerpc/powernv: Track M64 segment consumption"
the pe_alloc gets corrupted and PE allocation cannot work.
This fixes the issue by enforcing the minimum PE number to 8.
As I said offline yesterday, the issue exists from day-1 when NPU PHB
is supported. I don't think it's related to 401203ac2d. Without the logic
tracking M64 segments, the PE# bitmap still can be corrupted when writting
to M32 segment map. It's confusing to mention a unrelated commit in the
changelog.
Since the issue exists from day-1 when NPU PHB is supported, is a stable
tag needed?
Signed-off-by: Alexey Kardashevskiy <redacted>
With above parts fixed:
Reviewed-by: Gavin Shan <redacted>
On Thu, May 12, 2016 at 03:47:09PM +1000, Alexey Kardashevskiy wrote:
quoted
The pnv_pci_init_ioda_phb() helper allocates a blob to store auxilary
data such PE and M32/M64 segment allocation maps; this single blob has few
partitions, size of each is derived from the PE number -
phb->ioda.total_pe_num.
It was assumed that the minimum PE number is 8, however it is 4 for NPU
so the pe_alloc part was missing in the allocated blob.
It was invisible till recently as we were not tracking used M64 segments
and NPUs do not use M32 segments so the phb->ioda.m32_segmap
(which was pointing to the same address as phb->ioda.pe_alloc)
has never been written to leaving the pe_alloc memory intact.
After 401203ac2d "powerpc/powernv: Track M64 segment consumption"
the pe_alloc gets corrupted and PE allocation cannot work.
This fixes the issue by enforcing the minimum PE number to 8.
As I said offline yesterday, the issue exists from day-1 when NPU PHB
is supported. I don't think it's related to 401203ac2d. Without the logic
tracking M64 segments, the PE# bitmap still can be corrupted when writting
to M32 segment map. It's confusing to mention a unrelated commit in the
changelog.
The bug exists from day 1. The actual corruption started happening from
401203ac2d, it could be happening before but it was not.
Since the issue exists from day-1 when NPU PHB is supported, is a stable
tag needed?
quoted
Signed-off-by: Alexey Kardashevskiy <redacted>
With above parts fixed:
Reviewed-by: Gavin Shan <redacted>
On Thu, May 12, 2016 at 04:39:57PM +1000, Alexey Kardashevskiy wrote:
On 05/12/2016 04:09 PM, Gavin Shan wrote:
quoted
On Thu, May 12, 2016 at 03:47:09PM +1000, Alexey Kardashevskiy wrote:
quoted
The pnv_pci_init_ioda_phb() helper allocates a blob to store auxilary
data such PE and M32/M64 segment allocation maps; this single blob has few
partitions, size of each is derived from the PE number -
phb->ioda.total_pe_num.
It was assumed that the minimum PE number is 8, however it is 4 for NPU
so the pe_alloc part was missing in the allocated blob.
It was invisible till recently as we were not tracking used M64 segments
and NPUs do not use M32 segments so the phb->ioda.m32_segmap
(which was pointing to the same address as phb->ioda.pe_alloc)
has never been written to leaving the pe_alloc memory intact.
After 401203ac2d "powerpc/powernv: Track M64 segment consumption"
the pe_alloc gets corrupted and PE allocation cannot work.
This fixes the issue by enforcing the minimum PE number to 8.
As I said offline yesterday, the issue exists from day-1 when NPU PHB
is supported. I don't think it's related to 401203ac2d. Without the logic
tracking M64 segments, the PE# bitmap still can be corrupted when writting
to M32 segment map. It's confusing to mention a unrelated commit in the
changelog.
The bug exists from day 1. The actual corruption started happening from
401203ac2d, it could be happening before but it was not.
well, Are you sure it starts from 401203ac2d? I would believe it starts
from commit 3fa23ff ("powerpc/powernv: Fix initial IO and M32 segmap").
Please fix the commit log.
quoted
Since the issue exists from day-1 when NPU PHB is supported, is a stable
tag needed?
quoted
Signed-off-by: Alexey Kardashevskiy <redacted>
With above parts fixed:
Reviewed-by: Gavin Shan <redacted>
From: Michael Ellerman <mpe@ellerman.id.au> Date: 2016-05-12 11:32:43
On Thu, 2016-12-05 at 05:47:09 UTC, Alexey Kardashevskiy wrote:
The pnv_pci_init_ioda_phb() helper allocates a blob to store auxilary
data such PE and M32/M64 segment allocation maps; this single blob has few
partitions, size of each is derived from the PE number -
phb->ioda.total_pe_num.
It was assumed that the minimum PE number is 8, however it is 4 for NPU
so the pe_alloc part was missing in the allocated blob.
It was invisible till recently as we were not tracking used M64 segments
and NPUs do not use M32 segments so the phb->ioda.m32_segmap
(which was pointing to the same address as phb->ioda.pe_alloc)
has never been written to leaving the pe_alloc memory intact.
After 401203ac2d "powerpc/powernv: Track M64 segment consumption"
the pe_alloc gets corrupted and PE allocation cannot work.
This fixes the issue by enforcing the minimum PE number to 8.
Signed-off-by: Alexey Kardashevskiy <redacted>
Reviewed-by: Gavin Shan <redacted>
From: Michael Ellerman <mpe@ellerman.id.au> Date: 2016-05-12 11:32:43
On Thu, 2016-12-05 at 05:47:10 UTC, Alexey Kardashevskiy wrote:
Before 3e68dc57 "powerpc/powernv: Remove DMA32 PE list", NPU PEs
were linked to the NPU PHB via phb->ioda.pe_dma_list; after that fix,
the phb->ioda.pe_list is used.
During the pe_dma_list removal, list_add_tail(&phb->ioda.pe_dma_list)
was removed, however no list_add() was added so does this patch.
Signed-off-by: Alexey Kardashevskiy <redacted>
Reviewed-by: Gavin Shan <redacted>