From: Gavin Shan <gwshan-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> To: linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org Cc: linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, benh-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r@public.gmane.org, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, aik-sLpHqDYs0B2HXe+LvDLADg@public.gmane.org, panto-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org, robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org, Gavin Shan <gwshan-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> Subject: [PATCH v5 04/42] powerpc/powernv: Trace consumed IO and M32 segments by PE Date: Thu, 4 Jun 2015 16:41:33 +1000 [thread overview] Message-ID: <1433400131-18429-5-git-send-email-gwshan@linux.vnet.ibm.com> (raw) In-Reply-To: <1433400131-18429-1-git-send-email-gwshan-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> The patch introduces two bitmaps to trace the IO and M32 segments consumed by one particular PE, which can be released once the PE is destroyed during PCI unplugging time. Also, we're using fixed quantity of bits to trace the used IO and M32 segments by PEs in one particular PHB. Besides, @pe_array is put to the location adjacent to @pe_alloc on account of their close relation. Signed-off-by: Gavin Shan <gwshan-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> --- v5: * Split from PATCH[v4 04/21] --- arch/powerpc/platforms/powernv/pci-ioda.c | 17 +++++------------ arch/powerpc/platforms/powernv/pci.h | 11 ++++++----- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c index 71afb38..53d0efd 100644 --- a/arch/powerpc/platforms/powernv/pci-ioda.c +++ b/arch/powerpc/platforms/powernv/pci-ioda.c @@ -2992,7 +2992,8 @@ static void pnv_ioda_setup_pe_seg(struct pci_controller *hose, while (index < phb->ioda.total_pe && region.start <= region.end) { - phb->ioda.io_segmap[index] = pe->pe_number; + set_bit(index, phb->ioda.io_segmap); + set_bit(index, pe->io_segmap); rc = opal_pci_map_pe_mmio_window(phb->opal_id, pe->pe_number, OPAL_IO_WINDOW_TYPE, 0, index); if (rc != OPAL_SUCCESS) { @@ -3017,7 +3018,8 @@ static void pnv_ioda_setup_pe_seg(struct pci_controller *hose, while (index < phb->ioda.total_pe && region.start <= region.end) { - phb->ioda.m32_segmap[index] = pe->pe_number; + set_bit(index, phb->ioda.m32_segmap); + set_bit(index, pe->m32_segmap); rc = opal_pci_map_pe_mmio_window(phb->opal_id, pe->pe_number, OPAL_M32_WINDOW_TYPE, 0, index); if (rc != OPAL_SUCCESS) { @@ -3196,7 +3198,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, pemap_off; const __be64 *prop64; const __be32 *prop32; int len; @@ -3281,19 +3283,10 @@ 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 / 8, sizeof(unsigned long)); - m32map_off = size; - size += phb->ioda.total_pe * sizeof(phb->ioda.m32_segmap[0]); - if (phb->type == PNV_PHB_IODA1) { - iomap_off = size; - size += phb->ioda.total_pe * sizeof(phb->ioda.io_segmap[0]); - } pemap_off = size; size += phb->ioda.total_pe * sizeof(struct pnv_ioda_pe); aux = memblock_virt_alloc(size, 0); phb->ioda.pe_alloc = aux; - phb->ioda.m32_segmap = aux + m32map_off; - if (phb->type == PNV_PHB_IODA1) - phb->ioda.io_segmap = aux + iomap_off; phb->ioda.pe_array = aux + pemap_off; set_bit(phb->ioda.reserved_pe, phb->ioda.pe_alloc); diff --git a/arch/powerpc/platforms/powernv/pci.h b/arch/powerpc/platforms/powernv/pci.h index 54657f4..0a8cecb 100644 --- a/arch/powerpc/platforms/powernv/pci.h +++ b/arch/powerpc/platforms/powernv/pci.h @@ -54,6 +54,8 @@ struct pnv_ioda_pe { * by slave PEs will be contributed to the master PE. One * PE can own multiple IO and M32 segments. */ + unsigned long io_segmap[8]; + unsigned long m32_segmap[8]; unsigned long m64_segmap[8]; /* "Weight" assigned to the PE for the sake of DMA resource @@ -154,16 +156,15 @@ struct pnv_phb { unsigned int io_segsize; unsigned int io_pci_base; - /* PE allocation bitmap */ + /* PE allocation */ unsigned long *pe_alloc; - /* PE allocation mutex */ + struct pnv_ioda_pe *pe_array; struct mutex pe_alloc_mutex; /* M32 & IO segment maps */ + unsigned long io_segmap[8]; + unsigned long m32_segmap[8]; unsigned long m64_segmap[8]; - unsigned int *m32_segmap; - unsigned int *io_segmap; - struct pnv_ioda_pe *pe_array; /* IRQ chip */ int irq_chip_init; -- 2.1.0 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: Gavin Shan <gwshan@linux.vnet.ibm.com> To: linuxppc-dev@lists.ozlabs.org Cc: linux-pci@vger.kernel.org, devicetree@vger.kernel.org, benh@kernel.crashing.org, bhelgaas@google.com, aik@ozlabs.ru, panto@antoniou-consulting.com, robherring2@gmail.com, grant.likely@linaro.org, Gavin Shan <gwshan@linux.vnet.ibm.com> Subject: [PATCH v5 04/42] powerpc/powernv: Trace consumed IO and M32 segments by PE Date: Thu, 4 Jun 2015 16:41:33 +1000 [thread overview] Message-ID: <1433400131-18429-5-git-send-email-gwshan@linux.vnet.ibm.com> (raw) In-Reply-To: <1433400131-18429-1-git-send-email-gwshan@linux.vnet.ibm.com> The patch introduces two bitmaps to trace the IO and M32 segments consumed by one particular PE, which can be released once the PE is destroyed during PCI unplugging time. Also, we're using fixed quantity of bits to trace the used IO and M32 segments by PEs in one particular PHB. Besides, @pe_array is put to the location adjacent to @pe_alloc on account of their close relation. Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com> --- v5: * Split from PATCH[v4 04/21] --- arch/powerpc/platforms/powernv/pci-ioda.c | 17 +++++------------ arch/powerpc/platforms/powernv/pci.h | 11 ++++++----- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c index 71afb38..53d0efd 100644 --- a/arch/powerpc/platforms/powernv/pci-ioda.c +++ b/arch/powerpc/platforms/powernv/pci-ioda.c @@ -2992,7 +2992,8 @@ static void pnv_ioda_setup_pe_seg(struct pci_controller *hose, while (index < phb->ioda.total_pe && region.start <= region.end) { - phb->ioda.io_segmap[index] = pe->pe_number; + set_bit(index, phb->ioda.io_segmap); + set_bit(index, pe->io_segmap); rc = opal_pci_map_pe_mmio_window(phb->opal_id, pe->pe_number, OPAL_IO_WINDOW_TYPE, 0, index); if (rc != OPAL_SUCCESS) { @@ -3017,7 +3018,8 @@ static void pnv_ioda_setup_pe_seg(struct pci_controller *hose, while (index < phb->ioda.total_pe && region.start <= region.end) { - phb->ioda.m32_segmap[index] = pe->pe_number; + set_bit(index, phb->ioda.m32_segmap); + set_bit(index, pe->m32_segmap); rc = opal_pci_map_pe_mmio_window(phb->opal_id, pe->pe_number, OPAL_M32_WINDOW_TYPE, 0, index); if (rc != OPAL_SUCCESS) { @@ -3196,7 +3198,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, pemap_off; const __be64 *prop64; const __be32 *prop32; int len; @@ -3281,19 +3283,10 @@ 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 / 8, sizeof(unsigned long)); - m32map_off = size; - size += phb->ioda.total_pe * sizeof(phb->ioda.m32_segmap[0]); - if (phb->type == PNV_PHB_IODA1) { - iomap_off = size; - size += phb->ioda.total_pe * sizeof(phb->ioda.io_segmap[0]); - } pemap_off = size; size += phb->ioda.total_pe * sizeof(struct pnv_ioda_pe); aux = memblock_virt_alloc(size, 0); phb->ioda.pe_alloc = aux; - phb->ioda.m32_segmap = aux + m32map_off; - if (phb->type == PNV_PHB_IODA1) - phb->ioda.io_segmap = aux + iomap_off; phb->ioda.pe_array = aux + pemap_off; set_bit(phb->ioda.reserved_pe, phb->ioda.pe_alloc); diff --git a/arch/powerpc/platforms/powernv/pci.h b/arch/powerpc/platforms/powernv/pci.h index 54657f4..0a8cecb 100644 --- a/arch/powerpc/platforms/powernv/pci.h +++ b/arch/powerpc/platforms/powernv/pci.h @@ -54,6 +54,8 @@ struct pnv_ioda_pe { * by slave PEs will be contributed to the master PE. One * PE can own multiple IO and M32 segments. */ + unsigned long io_segmap[8]; + unsigned long m32_segmap[8]; unsigned long m64_segmap[8]; /* "Weight" assigned to the PE for the sake of DMA resource @@ -154,16 +156,15 @@ struct pnv_phb { unsigned int io_segsize; unsigned int io_pci_base; - /* PE allocation bitmap */ + /* PE allocation */ unsigned long *pe_alloc; - /* PE allocation mutex */ + struct pnv_ioda_pe *pe_array; struct mutex pe_alloc_mutex; /* M32 & IO segment maps */ + unsigned long io_segmap[8]; + unsigned long m32_segmap[8]; unsigned long m64_segmap[8]; - unsigned int *m32_segmap; - unsigned int *io_segmap; - struct pnv_ioda_pe *pe_array; /* IRQ chip */ int irq_chip_init; -- 2.1.0
next prev parent reply other threads:[~2015-06-04 6:41 UTC|newest] Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-06-04 6:41 [PATCH v5 00/42] PowerPC/PowerNV: PCI Slot Management Gavin Shan 2015-06-04 6:41 ` [PATCH v5 01/42] PCI: Add pcibios_setup_bridge() Gavin Shan 2015-06-05 19:44 ` Bjorn Helgaas 2015-06-09 5:49 ` Gavin Shan 2015-06-04 6:41 ` [PATCH v5 02/42] powerpc/powernv: Enable M64 on P7IOC Gavin Shan 2015-06-04 6:41 ` [PATCH v5 03/42] powerpc/powernv: M64 support improvement Gavin Shan 2015-06-04 6:41 ` [PATCH v5 07/42] powerpc/powernv: Calculate PHB's DMA weight dynamically Gavin Shan 2015-06-04 6:41 ` [PATCH v5 08/42] powerpc/powernv: DMA32 cleanup Gavin Shan 2015-06-10 4:17 ` Alexey Kardashevskiy 2015-06-10 6:12 ` Gavin Shan 2015-06-04 6:41 ` [PATCH v5 09/42] powerpc/powernv: pnv_ioda_setup_dma() configure one PE only Gavin Shan 2015-06-04 6:41 ` [PATCH v5 11/42] powerpc/powernv: Increase PE# capacity Gavin Shan 2015-06-10 4:41 ` Alexey Kardashevskiy 2015-06-10 6:18 ` Gavin Shan 2015-06-04 6:41 ` [PATCH v5 12/42] powerpc/pci: Cleanup on pci_controller_ops Gavin Shan 2015-06-10 4:43 ` Alexey Kardashevskiy 2015-06-10 6:20 ` Gavin Shan 2015-06-10 6:20 ` Gavin Shan 2015-06-04 6:41 ` [PATCH v5 14/42] powerpc/powernv: Allocate PE# in deasending order Gavin Shan 2015-06-04 6:41 ` [PATCH v5 17/42] powerpc/powernv: PE oriented during configuration Gavin Shan 2015-06-04 6:41 ` [PATCH v5 19/42] powerpc/powernv: Remove DMA32 list of PEs Gavin Shan 2015-06-04 6:41 ` [PATCH v5 20/42] powerpc/powernv: Rename pnv_ioda_get_pe() to pnv_ioda_dev_to_pe() Gavin Shan 2015-06-04 6:41 ` [PATCH v5 21/42] powerpc/powernv: Drop pnv_ioda_setup_dev_PE() Gavin Shan [not found] ` <1433400131-18429-1-git-send-email-gwshan-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> 2015-06-04 6:41 ` Gavin Shan [this message] 2015-06-04 6:41 ` [PATCH v5 04/42] powerpc/powernv: Trace consumed IO and M32 segments by PE Gavin Shan 2015-06-04 6:41 ` [PATCH v5 05/42] powerpc/powernv: Simplify pnv_ioda_setup_pe_seg() Gavin Shan 2015-06-04 6:41 ` Gavin Shan 2015-06-04 6:41 ` [PATCH v5 06/42] powerpc/powernv: Improve IO and M32 mapping Gavin Shan 2015-06-04 6:41 ` Gavin Shan 2015-06-04 6:41 ` [PATCH v5 10/42] powerpc/powernv: Trace DMA32 segments consumed by PE Gavin Shan 2015-06-04 6:41 ` Gavin Shan 2015-06-04 6:41 ` [PATCH v5 13/42] powerpc/pci: Override pcibios_setup_bridge() Gavin Shan 2015-06-04 6:41 ` Gavin Shan 2015-06-04 6:41 ` [PATCH v5 15/42] powerpc/powernv: Reserve PE# for root bus Gavin Shan 2015-06-04 6:41 ` Gavin Shan 2015-06-04 6:41 ` [PATCH v5 16/42] powerpc/powernv: Create PEs dynamically Gavin Shan 2015-06-04 6:41 ` Gavin Shan 2015-06-04 6:41 ` [PATCH v5 18/42] powerpc/powernv: Helper function pnv_ioda_init_pe() Gavin Shan 2015-06-04 6:41 ` Gavin Shan 2015-06-04 6:41 ` [PATCH v5 22/42] powerpc/powernv: Move functions around Gavin Shan 2015-06-04 6:41 ` Gavin Shan 2015-06-04 6:41 ` [PATCH v5 24/42] powerpc/powernv: Release PEs dynamically Gavin Shan 2015-06-04 6:41 ` Gavin Shan 2015-06-04 6:42 ` [PATCH v5 34/42] powerpc/pci: Delay creating pci_dn Gavin Shan 2015-06-04 6:42 ` Gavin Shan 2015-06-04 6:42 ` [PATCH v5 36/42] powerpc/pci: Export traverse_pci_device_nodes() Gavin Shan 2015-06-04 6:42 ` Gavin Shan 2015-06-04 6:42 ` [PATCH v5 39/42] drivers/of: Unflatten nodes equal or deeper than specified level Gavin Shan 2015-06-04 6:42 ` Gavin Shan [not found] ` <1433400131-18429-40-git-send-email-gwshan-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> 2015-06-30 17:47 ` Grant Likely 2015-06-30 17:47 ` Grant Likely 2015-06-04 6:41 ` [PATCH v5 23/42] powerpc/powernv: Cleanup on pnv_pci_ioda2_release_dma_pe() Gavin Shan 2015-06-04 6:41 ` [PATCH v5 25/42] powerpc/powernv: Supports slot ID Gavin Shan 2015-06-04 6:41 ` [PATCH v5 26/42] powerpc/powernv: Use PCI slot reset infrastructure Gavin Shan 2015-06-04 6:41 ` [PATCH v5 27/42] powerpc/powernv: Simplify pnv_eeh_reset() Gavin Shan 2015-06-04 6:41 ` [PATCH v5 28/42] powerpc/powernv: Don't cover root bus in pnv_pci_reset_secondary_bus() Gavin Shan 2015-06-04 6:41 ` [PATCH v5 29/42] powerpc/powernv: Issue fundamental reset " Gavin Shan 2015-06-04 6:41 ` [PATCH v5 30/42] powerpc/pci: Don't scan empty slot Gavin Shan 2015-06-04 6:42 ` [PATCH v5 31/42] powerpc/pci: Move pcibios_find_pci_bus() around Gavin Shan 2015-06-05 19:47 ` Bjorn Helgaas 2015-06-09 6:10 ` Gavin Shan 2015-06-04 6:42 ` [PATCH v5 32/42] powerpc/powernv: Introduce pnv_pci_poll() Gavin Shan 2015-06-04 6:42 ` [PATCH v5 33/42] powerpc/powernv: Functions to get/reset PCI slot status Gavin Shan 2015-06-04 6:42 ` [PATCH v5 35/42] powerpc/pci: Create eeh_dev while creating pci_dn Gavin Shan 2015-06-04 6:42 ` [PATCH v5 37/42] powerpc/pci: Update bridge windows on PCI plugging Gavin Shan 2015-06-04 6:42 ` [PATCH v5 38/42] powerpc/powernv: Select OF_OVERLAY Gavin Shan 2015-06-04 6:42 ` [PATCH v5 40/42] drivers/of: Allow to specify root node in of_fdt_unflatten_tree() Gavin Shan 2015-06-04 22:10 ` Rob Herring [not found] ` <1433400131-18429-41-git-send-email-gwshan-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> 2015-06-30 18:06 ` Grant Likely 2015-06-30 18:06 ` Grant Likely [not found] ` <20150630180652.198E2C4063C-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org> 2015-06-30 21:46 ` Benjamin Herrenschmidt 2015-06-30 21:46 ` Benjamin Herrenschmidt 2015-06-04 6:42 ` [PATCH v5 41/42] drivers/of: Return allocated memory chunk from of_fdt_unflatten_tree() Gavin Shan 2015-06-04 6:42 ` [PATCH v5 42/42] pci/hotplug: PowerPC PowerNV PCI hotplug driver Gavin Shan [not found] ` <1433400131-18429-43-git-send-email-gwshan-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> 2015-06-05 20:11 ` Bjorn Helgaas 2015-06-05 20:11 ` Bjorn Helgaas [not found] ` <20150605201110.GP3631-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org> 2015-06-05 20:18 ` Benjamin Herrenschmidt 2015-06-05 20:18 ` Benjamin Herrenschmidt 2015-06-09 6:10 ` Gavin Shan 2015-06-09 6:08 ` Gavin Shan 2015-06-30 18:18 ` Grant Likely 2015-06-30 18:18 ` Grant Likely 2015-07-01 0:51 ` Gavin Shan
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1433400131-18429-5-git-send-email-gwshan@linux.vnet.ibm.com \ --to=gwshan-23vcf4htsmix0ybbhkvfkdbpr1lh4cv8@public.gmane.org \ --cc=aik-sLpHqDYs0B2HXe+LvDLADg@public.gmane.org \ --cc=benh-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r@public.gmane.org \ --cc=bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \ --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \ --cc=linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \ --cc=panto-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org \ --cc=robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.