From: Guo Chao <yan@linux.vnet.ibm.com>
To: Yinghai Lu <yinghai@kernel.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v4 4/5] PCI: Try best to allocate pref mmio 64bit above 4g
Date: Wed, 18 Dec 2013 17:51:16 +0800 [thread overview]
Message-ID: <20131218095116.GA961@yanx> (raw)
In-Reply-To: <CAE9FiQV8kJZz0oaiZOvfWce_bu+8nZB2Qtw7KjLeASTkwUrjug@mail.gmail.com>
Hi:
On Mon, Dec 16, 2013 at 04:36:32PM -0800, Yinghai Lu wrote:
> On Mon, Dec 16, 2013 at 1:36 PM, Yinghai Lu <yinghai@kernel.org> wrote:
> > On Mon, Dec 16, 2013 at 10:13 AM, Yinghai Lu <yinghai@kernel.org> wrote:
> >>>
> >>> 64-bit non-prefetchable BARs are missed from caculation in the scheme,
> >>> causing assign failed eventually.
>
> >>>
> >>> Will you figure out a better way to cover them or just add a 'type3' parameter?
> >
> > Looks like we have add type3 for that case.
>
> please check attached delta patch.
>
It works, thank you.
Guo Chao
> Thanks
>
> Yinghai
> ---
> drivers/pci/setup-bus.c | 17 +++++++++++------
> drivers/pci/setup-res.c | 8 ++++++--
> 2 files changed, 17 insertions(+), 8 deletions(-)
>
> Index: linux-2.6/drivers/pci/setup-bus.c
> ===================================================================
> --- linux-2.6.orig/drivers/pci/setup-bus.c
> +++ linux-2.6/drivers/pci/setup-bus.c
> @@ -916,6 +916,7 @@ static inline resource_size_t calculate_
> */
> static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
> unsigned long type, unsigned long type2,
> + unsigned long type3,
> resource_size_t min_size, resource_size_t add_size,
> struct list_head *realloc_head)
> {
> @@ -946,7 +947,8 @@ static int pbus_size_mem(struct pci_bus
> resource_size_t r_size;
>
> if (r->parent || ((r->flags & mask) != type &&
> - (r->flags & mask) != type2))
> + (r->flags & mask) != type2 &&
> + (r->flags & mask) != type3))
> continue;
> r_size = resource_size(r);
> #ifdef CONFIG_PCI_IOV
> @@ -1119,7 +1121,7 @@ void __ref __pci_bus_size_bridges(struct
> struct list_head *realloc_head)
> {
> struct pci_dev *dev;
> - unsigned long mask, prefmask, type2 = 0;
> + unsigned long mask, prefmask, type2 = 0, type3 = 0;
> resource_size_t additional_mem_size = 0, additional_io_size = 0;
> struct resource *b_res;
>
> @@ -1171,26 +1173,29 @@ void __ref __pci_bus_size_bridges(struct
> prefmask = IORESOURCE_MEM | IORESOURCE_PREFETCH;
> if (b_res[2].flags & IORESOURCE_MEM_64) {
> prefmask |= IORESOURCE_MEM_64;
> - if (pbus_size_mem(bus, prefmask, prefmask, prefmask,
> + if (pbus_size_mem(bus, prefmask, prefmask,
> + prefmask, prefmask,
> realloc_head ? 0 : additional_mem_size,
> additional_mem_size, realloc_head)) {
> /* Success, size non-pref64 only. */
> mask = prefmask;
> type2 = prefmask & ~IORESOURCE_MEM_64;
> + type3 = prefmask & ~IORESOURCE_PREFETCH;
> }
> }
> if (!type2) {
> prefmask &= ~IORESOURCE_MEM_64;
> - if (pbus_size_mem(bus, prefmask, prefmask, prefmask,
> + if (pbus_size_mem(bus, prefmask, prefmask,
> + prefmask, prefmask,
> realloc_head ? 0 : additional_mem_size,
> additional_mem_size, realloc_head)) {
> /* Success, size non-prefetch only. */
> mask = prefmask;
> } else
> additional_mem_size += additional_mem_size;
> - type2 = IORESOURCE_MEM;
> + type2 = type3 = IORESOURCE_MEM;
> }
> - pbus_size_mem(bus, mask, IORESOURCE_MEM, type2,
> + pbus_size_mem(bus, mask, IORESOURCE_MEM, type2, type3,
> realloc_head ? 0 : additional_mem_size,
> additional_mem_size, realloc_head);
> break;
> Index: linux-2.6/drivers/pci/setup-res.c
> ===================================================================
> --- linux-2.6.orig/drivers/pci/setup-res.c
> +++ linux-2.6/drivers/pci/setup-res.c
> @@ -212,7 +212,8 @@ static int __pci_assign_resource(struct
> pcibios_align_resource, dev);
>
> if (ret < 0 &&
> - (res->flags & (IORESOURCE_PREFETCH | IORESOURCE_MEM_64))) {
> + (res->flags & (IORESOURCE_PREFETCH | IORESOURCE_MEM_64)) ==
> + (IORESOURCE_PREFETCH | IORESOURCE_MEM_64)) {
> /*
> * That failed.
> *
> @@ -223,12 +224,15 @@ static int __pci_assign_resource(struct
> pcibios_align_resource, dev);
> }
>
> - if (ret < 0 && (res->flags & IORESOURCE_PREFETCH)) {
> + if (ret < 0 &&
> + (res->flags & (IORESOURCE_PREFETCH | IORESOURCE_MEM_64))) {
> /*
> * That failed.
> *
> * But a prefetching area can handle a non-prefetching
> * window (it will just not perform as well).
> + *
> + * Also can put 64bit under 32bit range. (below 4g).
> */
> ret = pci_bus_alloc_resource(bus, res, size, align, min, 0,
> pcibios_align_resource, dev);
next prev parent reply other threads:[~2013-12-18 9:51 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-10 6:54 [PATCH v4 0/5] PCI: allocate 64bit mmio pref Yinghai Lu
2013-12-10 6:54 ` [PATCH v4 1/5] PCI: pcibus address to resource converting take bus instead of dev Yinghai Lu
2013-12-10 6:54 ` Yinghai Lu
2013-12-10 6:54 ` Yinghai Lu
2013-12-10 6:54 ` [PATCH v4 2/5] PCI: Don't use 4G bus address directly in resource allocation Yinghai Lu
2013-12-10 6:54 ` [PATCH v4 3/5] PCI: Try to allocate mem64 above 4G at first Yinghai Lu
2013-12-10 6:54 ` [PATCH v4 4/5] PCI: Try best to allocate pref mmio 64bit above 4g Yinghai Lu
2013-12-16 8:23 ` Guo Chao
2013-12-16 18:13 ` Yinghai Lu
2013-12-16 21:36 ` Yinghai Lu
2013-12-17 0:36 ` Yinghai Lu
2013-12-18 9:51 ` Guo Chao [this message]
2013-12-10 6:54 ` [PATCH v4 5/5] PCI: Sort pci root bus resources list Yinghai Lu
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=20131218095116.GA961@yanx \
--to=yan@linux.vnet.ibm.com \
--cc=bhelgaas@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--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.