All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Helgaas <bhelgaas@google.com>
To: Gavin Shan <shangw@linux.vnet.ibm.com>
Cc: linux-pci@vger.kernel.org, yinghai@kernel.org,
	linuxram@us.ibm.com, linuxppc-dev@ozlabs.org
Subject: Re: [PATCH 5/7] pci: minimal alignment for bars of P2P bridges
Date: Mon, 16 Jul 2012 08:58:20 -0600	[thread overview]
Message-ID: <CAErSpo5sfBidPhgq942k7DZRfYtemqmMF=Lrph_zu2-g6Pbi0g@mail.gmail.com> (raw)
In-Reply-To: <20120716035044.GC24203@shangw>

On Sun, Jul 15, 2012 at 9:50 PM, Gavin Shan <shangw@linux.vnet.ibm.com> wrote:
> On Fri, Jul 13, 2012 at 02:12:50PM -0600, Bjorn Helgaas wrote:
>>On Fri, Jun 29, 2012 at 02:47:48PM +0800, Gavin Shan wrote:
>>> On some powerpc platforms, device BARs need to be assigned to separate
>>> "segments" of the address space in order for the error isolation and HW
>>> virtualization mechanisms (EEH) to work properly. Those "segments" have
>>> a minimum size that can be fairly large (16M). In order to be able to
>>> use the generic resource assignment code rather than re-inventing our
>>> own, we chose to group devices by bus. That way, a simple change of the
>>> minimum alignment requirements of resources assigned to PCI to PCI (P2P)
>>> bridges is enough to ensure that all BARs for devices below those bridges
>>> will fit into contiguous sets of segments and there will be no overlap.
>
> I send the previous reply in a rush and that missed some
> necessary information. So I resend it with some makeup.
>
>>If I understand correctly, you might have something like this:
>>
>>  PCI host bridge to bus 0000:00
>>  pci_bus 0000:00: root bus resource [mem 0xc0000000-0xcfffffff]
>>  0000:00:01.0: PCI bridge to [bus 10-1f]
>>  0000:00:01.0:   bridge window [mem 0xc1000000-0xc1ffffff]
>>  0000:00:02.0: PCI bridge to [bus 20-2f]
>>  0000:00:02.0:   bridge window [mem 0xc2000000-0xc2ffffff]
>>
>>where everything under bridge 00:01.0 is in one EEH segment, and
>>everything under 00:02.0 is in another.  In this case, each EEH
>>segment is 16MB.
>>
>>I think your proposal is basically that when we add up resources required
>>below the P2P bridges, we round up to the default 1MB (the minimum P2P
>>bridge memory aperture size per spec) *or* to a larger value, e.g., 16MB,
>>if the architecture requires it.
>
> Yes, you're correct.
>
>>That makes sense to me, but I have some implementation questions.
>>
>>Your patches make the required alignment a property of the host bridge.
>>But don't you want to do this rounding up only at certain levels of the
>>hierarchy?  For example, what if you had another P2P bridge:
>>
>>  0000:10:01.0: PCI bridge to [bus 18-1f]
>>
>>I assume the devices on bus 0000:18 would still be in the first EEH
>>segment, and you wouldn't necessarily want to round up the 10:01.0
>>apertures to 16MB.
>>
>>Maybe there should be an interface like this:
>>
>>  resource_size_t __weak pcibios_window_alignment(struct pci_bus *bus,
>>                                                 unsigned long type)
>>  {
>>    if (type & IORESOURCE_MEM)
>>      return 1024*1024;                /* mem windows must be 1MB aligned */
>>    if (bus->self->io_window_1k)
>>      return 1024;
>>    return 4*1024;             /* I/O windows default to 4K alignment */
>>  }
>>
>>that the arch could override?  Then you could return the 16MB alignment
>>for the top-level P2P bridge leading to an EEH segment, and use the
>>default alignment for P2P bridges *inside* the segment.
>>
>
> Yes. I think it's good mechanism to apply the minimal resource alignment
> for P2P bridges. Also, it wouldn't waste more resources if the specific
> PCI bridge (not PCIe bridge) needn't form separate EEH segment. However,
> I have some implementation questions for this.
>
> 1. I just checked out source code from following link, but it seems that
>    pci_dev doesn't have field called "io_window_1k", so I'm not sure I
>    should add that by myself?
>
>         git clone git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git linux-pci-next

No, don't add io_window_1k in your patch.  That was added in a recent
patch and should already be in my "next" branch:

http://git.kernel.org/?p=linux/kernel/git/helgaas/pci.git;a=commitdiff;h=2b28ae1912e5ce5bb0527e352ae6ff04e76183d1

If there are merge conflicts with your patch, I can resolve them.

> 2. With the mechanism (__weak function) you suggested, the alignment of
>    the specific P2P bridge should be figured out by PowerPC platform. That's
>    to say, the PPC platform has to introduce function pcibios_window_alignment()
>    and return the appropriate alignment.

Yes.

> 3. In order to return appropriate alignment from PPC platform, We need
>    to introduce same function for PPC platform. Also, we probably need
>    introduce function "ppc_md.pcibios_window_alignment" so that those
>    specific platforms (e.g. powernv) could override that.

Yes.

  parent reply	other threads:[~2012-07-16 14:58 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-29  6:47 [PATCH V5 0/7] minimal alignment for p2p bars Gavin Shan
2012-06-29  6:47 ` Gavin Shan
2012-06-29  6:47 ` [PATCH 1/7] pci: change variable name for find_pci_host_bridge Gavin Shan
2012-06-29  6:47   ` Gavin Shan
2012-06-29  6:47 ` [PATCH 2/7] pci: argument pci_bus " Gavin Shan
2012-06-29  6:47   ` Gavin Shan
2012-06-29  6:47 ` [PATCH 3/7] pci: make find_pci_host_bridge global Gavin Shan
2012-06-29  6:47   ` Gavin Shan
2012-06-29  6:47 ` [PATCH 4/7] pci: fiddle with conversion of pci and CPU address Gavin Shan
2012-06-29  6:47   ` Gavin Shan
2012-06-29  6:47 ` [PATCH 5/7] pci: minimal alignment for bars of P2P bridges Gavin Shan
2012-06-29  6:47   ` Gavin Shan
2012-07-13 20:12   ` Bjorn Helgaas
2012-07-13 20:12     ` Bjorn Helgaas
     [not found]     ` <20120716035044.GC24203@shangw>
2012-07-16 14:58       ` Bjorn Helgaas [this message]
2012-06-29  6:47 ` [PATCH 6/7] pci: function to retrieve alignment of p2p bars Gavin Shan
2012-06-29  6:47   ` Gavin Shan
2012-06-29  6:47 ` [PATCH 7/7] pci: resource assignment based on p2p alignment Gavin Shan
2012-06-29  6:47   ` Gavin Shan
2012-07-03  7:01 ` [PATCH V5 0/7] minimal alignment for p2p bars Gavin Shan
2012-07-03  7:01   ` Gavin Shan
2012-07-16 23:12 ` [PATCH v5 " Bjorn Helgaas
2012-07-16 23:12   ` Bjorn Helgaas
     [not found] ` <1342452631-21152-4-git-send-email-shangw@linux.vnet.ibm.com>
2012-07-17  0:07   ` [PATCH 04/15] pci: weak function returns alignment Bjorn Helgaas
2012-07-17  0:07     ` Bjorn Helgaas
     [not found] ` <1342452631-21152-5-git-send-email-shangw@linux.vnet.ibm.com>
2012-07-17  0:47   ` [PATCH 05/15] pci: resource assignment based on p2p alignment Bjorn Helgaas
2012-07-17  0:47     ` Bjorn Helgaas

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='CAErSpo5sfBidPhgq942k7DZRfYtemqmMF=Lrph_zu2-g6Pbi0g@mail.gmail.com' \
    --to=bhelgaas@google.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=linuxram@us.ibm.com \
    --cc=shangw@linux.vnet.ibm.com \
    --cc=yinghai@kernel.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: link
Be 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.