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 <gws...@linux.vnet.ibm.com>
>
>
>Reviewed-by: Alexey Kardashevskiy <a...@ozlabs.ru>
>
>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
>

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

Reply via email to