powerpc/powernv: Fix insufficient memory allocation
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 commit 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. Fixes: 401203ac2d15 ("powerpc/powernv: Track M64 segment consumption") Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: Gavin Shan <gwshan@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
8445a87f70
commit
92a8675690
|
@ -3504,7 +3504,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(unsigned long));
|
||||
size = _ALIGN_UP(max_t(unsigned, phb->ioda.total_pe_num, 8) / 8,
|
||||
sizeof(unsigned long));
|
||||
m64map_off = size;
|
||||
size += phb->ioda.total_pe_num * sizeof(phb->ioda.m64_segmap[0]);
|
||||
m32map_off = size;
|
||||
|
|
Loading…
Reference in New Issue