* [PATCH v4 1/6] resources: ensure alignment callback doesn't allocate below available start
2010-10-14 23:18 [PATCH v4 0/6] PCI: allocate space top-down, not bottom-up Bjorn Helgaas
@ 2010-10-14 23:18 ` Bjorn Helgaas
2010-10-14 23:18 ` [PATCH v4 2/6] resources: support allocating space within a region from the top down Bjorn Helgaas
` (4 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Bjorn Helgaas @ 2010-10-14 23:18 UTC (permalink / raw)
To: Jesse Barnes
Cc: Bob Picco, Brian Bloniarz, Charles Butterfield, Denys Vlasenko,
linux-pci, Horst H. von Brand, Ingo Molnar, linux-kernel,
Stefan Becker, H. Peter Anvin, Yinghai Lu, Leann Ogasawara,
Linus Torvalds, Thomas Gleixner
The alignment callback returns a proposed location, which may have been
adjusted to avoid ISA aliases or for other architecture-specific reasons.
We already had a check ("tmp.start < tmp.end") to make sure the callback
doesn't return a location above the available area.
This patch adds a check to make sure the callback doesn't return something
*below* the available area, as may happen if the callback tries to allocate
top-down.
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
---
kernel/resource.c | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/kernel/resource.c b/kernel/resource.c
index 7b36976..ace2269 100644
--- a/kernel/resource.c
+++ b/kernel/resource.c
@@ -371,6 +371,7 @@ static int find_resource(struct resource *root, struct resource *new,
{
struct resource *this = root->child;
struct resource tmp = *new;
+ resource_size_t start;
tmp.start = root->start;
/*
@@ -391,8 +392,13 @@ static int find_resource(struct resource *root, struct resource *new,
if (tmp.end > max)
tmp.end = max;
tmp.start = ALIGN(tmp.start, align);
- if (alignf)
- tmp.start = alignf(alignf_data, &tmp, size, align);
+ if (alignf) {
+ start = alignf(alignf_data, &tmp, size, align);
+ if (tmp.start <= start && start <= tmp.end)
+ tmp.start = start;
+ else
+ tmp.start = tmp.end;
+ }
if (tmp.start < tmp.end && tmp.end - tmp.start >= size - 1) {
new->start = tmp.start;
new->end = tmp.start + size - 1;
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v4 2/6] resources: support allocating space within a region from the top down
2010-10-14 23:18 [PATCH v4 0/6] PCI: allocate space top-down, not bottom-up Bjorn Helgaas
2010-10-14 23:18 ` [PATCH v4 1/6] resources: ensure alignment callback doesn't allocate below available start Bjorn Helgaas
@ 2010-10-14 23:18 ` Bjorn Helgaas
2010-10-14 23:18 ` [PATCH v4 3/6] PCI: allocate bus resources " Bjorn Helgaas
` (3 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Bjorn Helgaas @ 2010-10-14 23:18 UTC (permalink / raw)
To: Jesse Barnes
Cc: Bob Picco, Brian Bloniarz, Charles Butterfield, Denys Vlasenko,
linux-pci, Horst H. von Brand, Ingo Molnar, linux-kernel,
Stefan Becker, H. Peter Anvin, Yinghai Lu, Leann Ogasawara,
Linus Torvalds, Thomas Gleixner
Allocate space from the top of a region first, then work downward,
if an architecture desires this.
When we allocate space from a resource, we look for gaps between children
of the resource. Previously, we always looked at gaps from the bottom up.
For example, given this:
[mem 0xbff00000-0xf7ffffff] PCI Bus 0000:00
[mem 0xbff00000-0xbfffffff] gap -- available
[mem 0xc0000000-0xdfffffff] PCI Bus 0000:02
[mem 0xe0000000-0xf7ffffff] gap -- available
we attempted to allocate from the [mem 0xbff00000-0xbfffffff] gap first,
then the [mem 0xe0000000-0xf7ffffff] gap.
With this patch an architecture can choose to allocate from the top gap
[mem 0xe0000000-0xf7ffffff] first.
We can't do this across the board because iomem_resource.end is initialized
to 0xffffffff_ffffffff on 64-bit architectures, and most machines can't
address the entire 64-bit physical address space. Therefore, we only
allocate top-down if the arch requests it by clearing
"resource_alloc_from_bottom".
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
---
Documentation/kernel-parameters.txt | 5 ++
include/linux/ioport.h | 1
kernel/resource.c | 89 +++++++++++++++++++++++++++++++++++
3 files changed, 94 insertions(+), 1 deletions(-)
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 8dd7248..fe50cbd 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -2156,6 +2156,11 @@ and is between 256 and 4096 characters. It is defined in the file
reset_devices [KNL] Force drivers to reset the underlying device
during initialization.
+ resource_alloc_from_bottom
+ Allocate new resources from the beginning of available
+ space, not the end. If you need to use this, please
+ report a bug.
+
resume= [SWSUSP]
Specify the partition device for software suspend
diff --git a/include/linux/ioport.h b/include/linux/ioport.h
index b227902..d377ea8 100644
--- a/include/linux/ioport.h
+++ b/include/linux/ioport.h
@@ -112,6 +112,7 @@ struct resource_list {
/* PC/ISA/whatever - the normal PC address spaces: IO and memory */
extern struct resource ioport_resource;
extern struct resource iomem_resource;
+extern int resource_alloc_from_bottom;
extern struct resource *request_resource_conflict(struct resource *root, struct resource *new);
extern int request_resource(struct resource *root, struct resource *new);
diff --git a/kernel/resource.c b/kernel/resource.c
index ace2269..8d337a9 100644
--- a/kernel/resource.c
+++ b/kernel/resource.c
@@ -40,6 +40,23 @@ EXPORT_SYMBOL(iomem_resource);
static DEFINE_RWLOCK(resource_lock);
+/*
+ * By default, we allocate free space bottom-up. The architecture can request
+ * top-down by clearing this flag. The user can override the architecture's
+ * choice with the "resource_alloc_from_bottom" kernel boot option, but that
+ * should only be a debugging tool.
+ */
+int resource_alloc_from_bottom = 1;
+
+static __init int setup_alloc_from_bottom(char *s)
+{
+ printk(KERN_INFO
+ "resource: allocating from bottom-up; please report a bug\n");
+ resource_alloc_from_bottom = 1;
+ return 0;
+}
+early_param("resource_alloc_from_bottom", setup_alloc_from_bottom);
+
static void *r_next(struct seq_file *m, void *v, loff_t *pos)
{
struct resource *p = v;
@@ -358,7 +375,74 @@ int __weak page_is_ram(unsigned long pfn)
}
/*
+ * Find the resource before "child" in the sibling list of "root" children.
+ */
+static struct resource *find_sibling_prev(struct resource *root, struct resource *child)
+{
+ struct resource *this;
+
+ for (this = root->child; this; this = this->sibling)
+ if (this->sibling == child)
+ return this;
+
+ return NULL;
+}
+
+/*
+ * Find empty slot in the resource tree given range and alignment.
+ * This version allocates from the end of the root resource first.
+ */
+static int find_resource_from_top(struct resource *root, struct resource *new,
+ resource_size_t size, resource_size_t min,
+ resource_size_t max, resource_size_t align,
+ resource_size_t (*alignf)(void *,
+ const struct resource *,
+ resource_size_t,
+ resource_size_t),
+ void *alignf_data)
+{
+ struct resource *this;
+ struct resource tmp = *new;
+ resource_size_t start;
+
+ tmp.start = root->end;
+ tmp.end = root->end;
+
+ this = find_sibling_prev(root, NULL);
+ for (;;) {
+ if (this) {
+ if (this->end < root->end)
+ tmp.start = this->end + 1;
+ } else
+ tmp.start = root->start;
+ if (tmp.start < min)
+ tmp.start = min;
+ if (tmp.end > max)
+ tmp.end = max;
+ tmp.start = ALIGN(tmp.start, align);
+ if (alignf) {
+ start = alignf(alignf_data, &tmp, size, align);
+ if (tmp.start <= start && start <= tmp.end)
+ tmp.start = start;
+ else
+ tmp.start = tmp.end;
+ }
+ if (tmp.start < tmp.end && tmp.end - tmp.start >= size - 1) {
+ new->start = tmp.start;
+ new->end = tmp.start + size - 1;
+ return 0;
+ }
+ if (!this || this->start == root->start)
+ break;
+ tmp.end = this->start - 1;
+ this = find_sibling_prev(root, this);
+ }
+ return -EBUSY;
+}
+
+/*
* Find empty slot in the resource tree given range and alignment.
+ * This version allocates from the beginning of the root resource first.
*/
static int find_resource(struct resource *root, struct resource *new,
resource_size_t size, resource_size_t min,
@@ -435,7 +519,10 @@ int allocate_resource(struct resource *root, struct resource *new,
int err;
write_lock(&resource_lock);
- err = find_resource(root, new, size, min, max, align, alignf, alignf_data);
+ if (resource_alloc_from_bottom)
+ err = find_resource(root, new, size, min, max, align, alignf, alignf_data);
+ else
+ err = find_resource_from_top(root, new, size, min, max, align, alignf, alignf_data);
if (err >= 0 && __request_resource(root, new))
err = -EBUSY;
write_unlock(&resource_lock);
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v4 3/6] PCI: allocate bus resources from the top down
2010-10-14 23:18 [PATCH v4 0/6] PCI: allocate space top-down, not bottom-up Bjorn Helgaas
2010-10-14 23:18 ` [PATCH v4 1/6] resources: ensure alignment callback doesn't allocate below available start Bjorn Helgaas
2010-10-14 23:18 ` [PATCH v4 2/6] resources: support allocating space within a region from the top down Bjorn Helgaas
@ 2010-10-14 23:18 ` Bjorn Helgaas
2010-10-14 23:18 ` [PATCH v4 4/6] x86/PCI: allocate space from the end of a region, not the beginning Bjorn Helgaas
` (2 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Bjorn Helgaas @ 2010-10-14 23:18 UTC (permalink / raw)
To: Jesse Barnes
Cc: Bob Picco, Brian Bloniarz, Charles Butterfield, Denys Vlasenko,
linux-pci, Horst H. von Brand, Ingo Molnar, linux-kernel,
Stefan Becker, H. Peter Anvin, Yinghai Lu, Leann Ogasawara,
Linus Torvalds, Thomas Gleixner
Allocate space from the highest-address PCI bus resource first, then work
downward.
Previously, we looked for space in PCI host bridge windows in the order
we discovered the windows. For example, given the following windows
(discovered via an ACPI _CRS method):
pci_root PNP0A03:00: host bridge window [mem 0x000a0000-0x000bffff]
pci_root PNP0A03:00: host bridge window [mem 0x000c0000-0x000effff]
pci_root PNP0A03:00: host bridge window [mem 0x000f0000-0x000fffff]
pci_root PNP0A03:00: host bridge window [mem 0xbff00000-0xf7ffffff]
pci_root PNP0A03:00: host bridge window [mem 0xff980000-0xff980fff]
pci_root PNP0A03:00: host bridge window [mem 0xff97c000-0xff97ffff]
pci_root PNP0A03:00: host bridge window [mem 0xfed20000-0xfed9ffff]
we attempted to allocate from [mem 0x000a0000-0x000bffff] first, then
[mem 0x000c0000-0x000effff], and so on.
With this patch, we allocate from [mem 0xff980000-0xff980fff] first, then
[mem 0xff97c000-0xff97ffff], [mem 0xfed20000-0xfed9ffff], etc.
Allocating top-down follows Windows practice, so we're less likely to
trip over BIOS defects in the _CRS description.
On the machine above (a Dell T3500), the [mem 0xbff00000-0xbfffffff] region
doesn't actually work and is likely a BIOS defect. The symptom is that we
move the AHCI controller to 0xbff00000, which leads to "Boot has failed,
sleeping forever," a BUG in ahci_stop_engine(), or some other boot failure.
Reference: https://bugzilla.kernel.org/show_bug.cgi?id=16228#c43
Reference: https://bugzilla.redhat.com/show_bug.cgi?id=620313
Reference: https://bugzilla.redhat.com/show_bug.cgi?id=629933
Reported-by: Brian Bloniarz <phunge0@hotmail.com>
Reported-and-tested-by: Stefan Becker <chemobejk@gmail.com>
Reported-by: Denys Vlasenko <dvlasenk@redhat.com>
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
---
drivers/pci/bus.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 48 insertions(+), 5 deletions(-)
diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
index 7f0af0e..172bf26 100644
--- a/drivers/pci/bus.c
+++ b/drivers/pci/bus.c
@@ -64,6 +64,49 @@ void pci_bus_remove_resources(struct pci_bus *bus)
}
}
+/*
+ * Find the highest-address bus resource below the cursor "res". If the
+ * cursor is NULL, return the highest resource.
+ */
+static struct resource *pci_bus_find_resource_prev(struct pci_bus *bus,
+ unsigned int type,
+ struct resource *res)
+{
+ struct resource *r, *prev = NULL;
+ int i;
+
+ pci_bus_for_each_resource(bus, r, i) {
+ if (!r)
+ continue;
+
+ if ((r->flags & IORESOURCE_TYPE_BITS) != type)
+ continue;
+
+ /* If this resource is at or past the cursor, skip it */
+ if (res) {
+ if (r == res)
+ continue;
+ if (r->end > res->end)
+ continue;
+ if (r->end == res->end && r->start > res->start)
+ continue;
+ }
+
+ if (!prev)
+ prev = r;
+
+ /*
+ * A small resource is higher than a large one that ends at
+ * the same address.
+ */
+ if (r->end > prev->end ||
+ (r->end == prev->end && r->start > prev->start))
+ prev = r;
+ }
+
+ return prev;
+}
+
/**
* pci_bus_alloc_resource - allocate a resource from a parent bus
* @bus: PCI bus
@@ -89,9 +132,10 @@ pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res,
resource_size_t),
void *alignf_data)
{
- int i, ret = -ENOMEM;
+ int ret = -ENOMEM;
struct resource *r;
resource_size_t max = -1;
+ unsigned int type = res->flags & IORESOURCE_TYPE_BITS;
type_mask |= IORESOURCE_IO | IORESOURCE_MEM;
@@ -99,10 +143,9 @@ pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res,
if (!(res->flags & IORESOURCE_MEM_64))
max = PCIBIOS_MAX_MEM_32;
- pci_bus_for_each_resource(bus, r, i) {
- if (!r)
- continue;
-
+ /* Look for space at highest addresses first */
+ r = pci_bus_find_resource_prev(bus, type, NULL);
+ for ( ; r; r = pci_bus_find_resource_prev(bus, type, r)) {
/* type_mask must match */
if ((res->flags ^ r->flags) & type_mask)
continue;
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v4 4/6] x86/PCI: allocate space from the end of a region, not the beginning
2010-10-14 23:18 [PATCH v4 0/6] PCI: allocate space top-down, not bottom-up Bjorn Helgaas
` (2 preceding siblings ...)
2010-10-14 23:18 ` [PATCH v4 3/6] PCI: allocate bus resources " Bjorn Helgaas
@ 2010-10-14 23:18 ` Bjorn Helgaas
2010-10-14 23:18 ` [PATCH v4 5/6] x86: update iomem_resource end based on CPU physical address capabilities Bjorn Helgaas
2010-10-14 23:18 ` [PATCH v4 6/6] x86: allocate space within a region top-down Bjorn Helgaas
5 siblings, 0 replies; 11+ messages in thread
From: Bjorn Helgaas @ 2010-10-14 23:18 UTC (permalink / raw)
To: Jesse Barnes
Cc: Bob Picco, Brian Bloniarz, Charles Butterfield, Denys Vlasenko,
linux-pci, Horst H. von Brand, Ingo Molnar, linux-kernel,
Stefan Becker, H. Peter Anvin, Yinghai Lu, Leann Ogasawara,
Linus Torvalds, Thomas Gleixner
Allocate from the end of a region, not the beginning.
For example, if we need to allocate 0x800 bytes for a device on bus
0000:00 given these resources:
[mem 0xbff00000-0xdfffffff] PCI Bus 0000:00
[mem 0xc0000000-0xdfffffff] PCI Bus 0000:02
the available space at [mem 0xbff00000-0xbfffffff] is passed to the
alignment callback (pcibios_align_resource()). Prior to this patch, we
would put the new 0x800 byte resource at the beginning of that available
space, i.e., at [mem 0xbff00000-0xbff007ff].
With this patch, we put it at the end, at [mem 0xbffff800-0xbfffffff].
Reference: https://bugzilla.kernel.org/show_bug.cgi?id=16228#c41
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
---
arch/x86/pci/i386.c | 17 +++++++++++------
1 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c
index 5525309..826140a 100644
--- a/arch/x86/pci/i386.c
+++ b/arch/x86/pci/i386.c
@@ -65,16 +65,21 @@ pcibios_align_resource(void *data, const struct resource *res,
resource_size_t size, resource_size_t align)
{
struct pci_dev *dev = data;
- resource_size_t start = res->start;
+ resource_size_t start = round_down(res->end - size + 1, align);
if (res->flags & IORESOURCE_IO) {
- if (skip_isa_ioresource_align(dev))
- return start;
- if (start & 0x300)
- start = (start + 0x3ff) & ~0x3ff;
+
+ /*
+ * If we're avoiding ISA aliases, the largest contiguous I/O
+ * port space is 256 bytes. Clearing bits 9 and 10 preserves
+ * all 256-byte and smaller alignments, so the result will
+ * still be correctly aligned.
+ */
+ if (!skip_isa_ioresource_align(dev))
+ start &= ~0x300;
} else if (res->flags & IORESOURCE_MEM) {
if (start < BIOS_END)
- start = BIOS_END;
+ start = res->end; /* fail; no space */
}
return start;
}
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v4 5/6] x86: update iomem_resource end based on CPU physical address capabilities
2010-10-14 23:18 [PATCH v4 0/6] PCI: allocate space top-down, not bottom-up Bjorn Helgaas
` (3 preceding siblings ...)
2010-10-14 23:18 ` [PATCH v4 4/6] x86/PCI: allocate space from the end of a region, not the beginning Bjorn Helgaas
@ 2010-10-14 23:18 ` Bjorn Helgaas
2010-10-14 23:18 ` [PATCH v4 6/6] x86: allocate space within a region top-down Bjorn Helgaas
5 siblings, 0 replies; 11+ messages in thread
From: Bjorn Helgaas @ 2010-10-14 23:18 UTC (permalink / raw)
To: Jesse Barnes
Cc: Bob Picco, Brian Bloniarz, Charles Butterfield, Denys Vlasenko,
linux-pci, Horst H. von Brand, Ingo Molnar, linux-kernel,
Stefan Becker, H. Peter Anvin, Yinghai Lu, Leann Ogasawara,
Linus Torvalds, Thomas Gleixner
The iomem_resource map reflects the available physical address space.
We statically initialize the end to -1, i.e., 0xffffffff_ffffffff, but
of course we can only use as much as the CPU can address.
This patch updates the end based on the CPU capabilities, so we don't
mistakenly allocate space that isn't usable, as we're likely to do when
allocating from the top-down.
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
---
arch/x86/kernel/setup.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index c3a4fbb..922b5a1 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -788,6 +788,7 @@ void __init setup_arch(char **cmdline_p)
x86_init.oem.arch_setup();
+ iomem_resource.end = (1ULL << boot_cpu_data.x86_phys_bits) - 1;
setup_memory_map();
parse_setup_data();
/* update the e820_saved too */
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v4 6/6] x86: allocate space within a region top-down
2010-10-14 23:18 [PATCH v4 0/6] PCI: allocate space top-down, not bottom-up Bjorn Helgaas
` (4 preceding siblings ...)
2010-10-14 23:18 ` [PATCH v4 5/6] x86: update iomem_resource end based on CPU physical address capabilities Bjorn Helgaas
@ 2010-10-14 23:18 ` Bjorn Helgaas
2010-10-25 21:01 ` Jesse Barnes
5 siblings, 1 reply; 11+ messages in thread
From: Bjorn Helgaas @ 2010-10-14 23:18 UTC (permalink / raw)
To: Jesse Barnes
Cc: Bob Picco, Brian Bloniarz, Charles Butterfield, Denys Vlasenko,
linux-pci, Horst H. von Brand, Ingo Molnar, linux-kernel,
Stefan Becker, H. Peter Anvin, Yinghai Lu, Leann Ogasawara,
Linus Torvalds, Thomas Gleixner
Request that allocate_resource() use available space from high addresses
first, rather than the default of using low addresses first.
The most common place this makes a difference is when we move or assign
new PCI device resources. Low addresses are generally scarce, so it's
better to use high addresses when possible. This follows Windows practice
for PCI allocation.
Reference: https://bugzilla.kernel.org/show_bug.cgi?id=16228#c42
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
---
arch/x86/kernel/setup.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 922b5a1..0fe76df 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -788,6 +788,7 @@ void __init setup_arch(char **cmdline_p)
x86_init.oem.arch_setup();
+ resource_alloc_from_bottom = 0;
iomem_resource.end = (1ULL << boot_cpu_data.x86_phys_bits) - 1;
setup_memory_map();
parse_setup_data();
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH v4 6/6] x86: allocate space within a region top-down
2010-10-14 23:18 ` [PATCH v4 6/6] x86: allocate space within a region top-down Bjorn Helgaas
@ 2010-10-25 21:01 ` Jesse Barnes
2010-10-25 21:08 ` Bjorn Helgaas
0 siblings, 1 reply; 11+ messages in thread
From: Jesse Barnes @ 2010-10-25 21:01 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Bob Picco, Brian Bloniarz, Charles Butterfield, Denys Vlasenko,
linux-pci, Horst H. von Brand, Ingo Molnar, linux-kernel,
Stefan Becker, H. Peter Anvin, Yinghai Lu, Leann Ogasawara,
Linus Torvalds, Thomas Gleixner
On Thu, 14 Oct 2010 17:18:52 -0600
Bjorn Helgaas <bjorn.helgaas@hp.com> wrote:
>
> Request that allocate_resource() use available space from high addresses
> first, rather than the default of using low addresses first.
>
> The most common place this makes a difference is when we move or assign
> new PCI device resources. Low addresses are generally scarce, so it's
> better to use high addresses when possible. This follows Windows practice
> for PCI allocation.
Applied this series to linux-next; assuming nothing blows up I'll send
it to Linus this week (previous versions got some testing and landed in
a separate branch so this should be fine).
--
Jesse Barnes, Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 6/6] x86: allocate space within a region top-down
2010-10-25 21:01 ` Jesse Barnes
@ 2010-10-25 21:08 ` Bjorn Helgaas
2010-10-25 21:15 ` Bjorn Helgaas
2010-10-25 21:17 ` Jesse Barnes
0 siblings, 2 replies; 11+ messages in thread
From: Bjorn Helgaas @ 2010-10-25 21:08 UTC (permalink / raw)
To: Jesse Barnes
Cc: Bob Picco, Brian Bloniarz, Charles Butterfield, Denys Vlasenko,
linux-pci, Horst H. von Brand, Ingo Molnar, linux-kernel,
Stefan Becker, H. Peter Anvin, Yinghai Lu, Leann Ogasawara,
Linus Torvalds, Thomas Gleixner
On Monday, October 25, 2010 03:01:54 pm Jesse Barnes wrote:
> On Thu, 14 Oct 2010 17:18:52 -0600
> Bjorn Helgaas <bjorn.helgaas@hp.com> wrote:
>
> >
> > Request that allocate_resource() use available space from high addresses
> > first, rather than the default of using low addresses first.
> >
> > The most common place this makes a difference is when we move or assign
> > new PCI device resources. Low addresses are generally scarce, so it's
> > better to use high addresses when possible. This follows Windows practice
> > for PCI allocation.
>
> Applied this series to linux-next; assuming nothing blows up I'll send
> it to Linus this week (previous versions got some testing and landed in
> a separate branch so this should be fine).
We tripped over another issue in Fedora:
https://bugzilla.redhat.com/show_bug.cgi?id=646027
I think I see the problem, and posted a patch for testing. When it's
resolved, I'll post an updated series.
Bjorn
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 6/6] x86: allocate space within a region top-down
2010-10-25 21:08 ` Bjorn Helgaas
@ 2010-10-25 21:15 ` Bjorn Helgaas
2010-10-25 21:17 ` Jesse Barnes
1 sibling, 0 replies; 11+ messages in thread
From: Bjorn Helgaas @ 2010-10-25 21:15 UTC (permalink / raw)
To: Jesse Barnes
Cc: Bob Picco, Brian Bloniarz, Charles Butterfield, Denys Vlasenko,
linux-pci, Horst H. von Brand, Ingo Molnar, linux-kernel,
Stefan Becker, H. Peter Anvin, Yinghai Lu, Leann Ogasawara,
Linus Torvalds, Thomas Gleixner, Chuck Ebbert
On Monday, October 25, 2010 03:08:48 pm Bjorn Helgaas wrote:
> On Monday, October 25, 2010 03:01:54 pm Jesse Barnes wrote:
> > On Thu, 14 Oct 2010 17:18:52 -0600
> > Bjorn Helgaas <bjorn.helgaas@hp.com> wrote:
> >
> > >
> > > Request that allocate_resource() use available space from high addresses
> > > first, rather than the default of using low addresses first.
> > >
> > > The most common place this makes a difference is when we move or assign
> > > new PCI device resources. Low addresses are generally scarce, so it's
> > > better to use high addresses when possible. This follows Windows practice
> > > for PCI allocation.
> >
> > Applied this series to linux-next; assuming nothing blows up I'll send
> > it to Linus this week (previous versions got some testing and landed in
> > a separate branch so this should be fine).
>
> We tripped over another issue in Fedora:
> https://bugzilla.redhat.com/show_bug.cgi?id=646027
By the way, it's been a *great* help to have Fedora being willing to
go out on a limb and help get these tested. I know it sucks to get
those Rawhide bug reports, but they have been extremely useful to me.
Thanks!
Bjorn
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 6/6] x86: allocate space within a region top-down
2010-10-25 21:08 ` Bjorn Helgaas
2010-10-25 21:15 ` Bjorn Helgaas
@ 2010-10-25 21:17 ` Jesse Barnes
1 sibling, 0 replies; 11+ messages in thread
From: Jesse Barnes @ 2010-10-25 21:17 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Bob Picco, Brian Bloniarz, Charles Butterfield, Denys Vlasenko,
linux-pci, Horst H. von Brand, Ingo Molnar, linux-kernel,
Stefan Becker, H. Peter Anvin, Yinghai Lu, Leann Ogasawara,
Linus Torvalds, Thomas Gleixner
On Mon, 25 Oct 2010 15:08:48 -0600
Bjorn Helgaas <bjorn.helgaas@hp.com> wrote:
> On Monday, October 25, 2010 03:01:54 pm Jesse Barnes wrote:
> > On Thu, 14 Oct 2010 17:18:52 -0600
> > Bjorn Helgaas <bjorn.helgaas@hp.com> wrote:
> >
> > >
> > > Request that allocate_resource() use available space from high addresses
> > > first, rather than the default of using low addresses first.
> > >
> > > The most common place this makes a difference is when we move or assign
> > > new PCI device resources. Low addresses are generally scarce, so it's
> > > better to use high addresses when possible. This follows Windows practice
> > > for PCI allocation.
> >
> > Applied this series to linux-next; assuming nothing blows up I'll send
> > it to Linus this week (previous versions got some testing and landed in
> > a separate branch so this should be fine).
>
> We tripped over another issue in Fedora:
> https://bugzilla.redhat.com/show_bug.cgi?id=646027
>
> I think I see the problem, and posted a patch for testing. When it's
> resolved, I'll post an updated series.
Ok thanks, I'll drop it from -next then.
--
Jesse Barnes, Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 11+ messages in thread