On Wed, Apr 13, 2016 at 05:09:45PM +1000, Alexey Kardashevskiy wrote: >On 02/17/2016 02:43 PM, Gavin Shan wrote: >>When unplugging PCI devices, their parent PEs might be offline. >>The consumed M64 resource by the PEs should be released at that >>time. As we track M32 segment consumption, this introduces an >>array to the PHB to track the mapping between M64 segment and >>PE number. >> >>Signed-off-by: Gavin Shan <gwshan@xxxxxxxxxxxxxxxxxx> > > >Reviewed-by: Alexey Kardashevskiy <aik@xxxxxxxxx> > >but it would not hurt to mention in the commit log why M64 segment is not >tracked/setup by the existing (at this point, at least) >pnv_ioda_setup_one_res(). > Right, I'll add something for it to the commit log in next revision, thanks! > >>--- >> arch/powerpc/platforms/powernv/pci-ioda.c | 10 ++++++++-- >> arch/powerpc/platforms/powernv/pci.h | 1 + >> 2 files changed, 9 insertions(+), 2 deletions(-) >> >>diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c >>index 7330a73..fc0374a 100644 >>--- a/arch/powerpc/platforms/powernv/pci-ioda.c >>+++ b/arch/powerpc/platforms/powernv/pci-ioda.c >>@@ -305,6 +305,7 @@ static int pnv_ioda2_pick_m64_pe(struct pci_bus *bus, bool all) >> phb->ioda.total_pe_num) { >> pe = &phb->ioda.pe_array[i]; >> >>+ phb->ioda.m64_segmap[pe->pe_number] = pe->pe_number; >> if (!master_pe) { >> pe->flags |= PNV_IODA_PE_MASTER; >> INIT_LIST_HEAD(&pe->slaves); >>@@ -3245,7 +3246,7 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np, >> { >> struct pci_controller *hose; >> struct pnv_phb *phb; >>- unsigned long size, m32map_off, pemap_off, iomap_off = 0; >>+ unsigned long size, m64map_off, m32map_off, pemap_off, iomap_off = 0; >> const __be64 *prop64; >> const __be32 *prop32; >> int i, len; >>@@ -3332,6 +3333,8 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np, >> >> /* Allocate aux data & arrays. We don't have IO ports on PHB3 */ >> size = _ALIGN_UP(phb->ioda.total_pe_num / 8, sizeof(unsigned long)); >>+ m64map_off = size; >>+ size += phb->ioda.total_pe_num * sizeof(phb->ioda.m64_segmap[0]); >> m32map_off = size; >> size += phb->ioda.total_pe_num * sizeof(phb->ioda.m32_segmap[0]); >> if (phb->type == PNV_PHB_IODA1) { >>@@ -3342,9 +3345,12 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np, >> size += phb->ioda.total_pe_num * sizeof(struct pnv_ioda_pe); >> aux = memblock_virt_alloc(size, 0); >> phb->ioda.pe_alloc = aux; >>+ phb->ioda.m64_segmap = aux + m64map_off; >> phb->ioda.m32_segmap = aux + m32map_off; >>- for (i = 0; i < phb->ioda.total_pe_num; i++) >>+ for (i = 0; i < phb->ioda.total_pe_num; i++) { >>+ phb->ioda.m64_segmap[i] = IODA_INVALID_PE; >> phb->ioda.m32_segmap[i] = IODA_INVALID_PE; >>+ } >> if (phb->type == PNV_PHB_IODA1) { >> phb->ioda.io_segmap = aux + iomap_off; >> for (i = 0; i < phb->ioda.total_pe_num; i++) >>diff --git a/arch/powerpc/platforms/powernv/pci.h b/arch/powerpc/platforms/powernv/pci.h >>index 36c4965..866a5ea 100644 >>--- a/arch/powerpc/platforms/powernv/pci.h >>+++ b/arch/powerpc/platforms/powernv/pci.h >>@@ -146,6 +146,7 @@ struct pnv_phb { >> struct pnv_ioda_pe *pe_array; >> >> /* M32 & IO segment maps */ >>+ int *m64_segmap; >> int *m32_segmap; >> int *io_segmap; >> >> > > >-- >Alexey > -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html