Re: [PATCH v7] PCI: Try best to allocate pref mmio 64bit above 4g

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Apr 16, 2014 at 10:06 AM, Bjorn Helgaas <bhelgaas@xxxxxxxxxx> wrote:
> I think we should stop putting PCI_PREF_RANGE_TYPE_64 in res->flags.
> I don't think we ever test for PCI_PREF_RANGE_TYPE_64 today, except
> for the trivial usage in pci_read_bridge_mmio_pref(), which can be
> easily removed.
>
> Everywhere else, we use IORESOURCE_MEM, IORESOURCE_MEM_64, and
> IORESOURCE_PREFETCH to keep track of the properties of the hardware
> underlying the struct resource, i.e., the BAR.  Why shouldn't we do
> the same for bridge windows?
>
> The struct resource flags should tell us the *possible* properties of
> the window, e.g., what the bridge can support.  These properties are
> fixed by the bridge hardware, regardless of what devices happen to be
> below the bridge.  We discover those properties at enumeration-time,
> and we shouldn't change them afterwards.

After this patch (we check exact type with 64bit pref), actually bridge flags
IORESOURCE_MEM_64 would not get cleared.
so we don't check that in pbus_size_mem anymore.

Following patch could be applied later.

Subject: [PATCH] PCI: don't update bridge resource flags according to children

After  PCI: Try best to allocate pref mmio 64bit above 4g
We don't need to check if children support 64bit, and update
bridge resource flags anymore.
As the code size and assign according exact type already.

Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>

---
 drivers/pci/setup-bus.c |    7 +------
 1 file changed, 1 insertion(+), 6 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
@@ -926,7 +926,6 @@ static int pbus_size_mem(struct pci_bus
     int order, max_order;
     struct resource *b_res = find_free_bus_resource(bus,
                      mask | IORESOURCE_PREFETCH, type);
-    unsigned int mem64_mask = 0;
     resource_size_t children_add_size = 0;

     if (!b_res)
@@ -936,9 +935,6 @@ static int pbus_size_mem(struct pci_bus
     max_order = 0;
     size = 0;

-    mem64_mask = b_res->flags & IORESOURCE_MEM_64;
-    b_res->flags &= ~IORESOURCE_MEM_64;
-
     list_for_each_entry(dev, &bus->devices, bus_list) {
         int i;

@@ -980,7 +976,6 @@ static int pbus_size_mem(struct pci_bus
                 aligns[order] += align;
             if (order > max_order)
                 max_order = order;
-            mem64_mask &= r->flags & IORESOURCE_MEM_64;

             if (realloc_head)
                 children_add_size += get_res_add_size(realloc_head, r);
@@ -1005,7 +1000,7 @@ static int pbus_size_mem(struct pci_bus
     }
     b_res->start = min_align;
     b_res->end = size0 + min_align - 1;
-    b_res->flags |= IORESOURCE_STARTALIGN | mem64_mask;
+    b_res->flags |= IORESOURCE_STARTALIGN;
     if (size1 > size0 && realloc_head) {
         add_to_list(realloc_head, bus->self, b_res, size1-size0, min_align);
         dev_printk(KERN_DEBUG, &bus->self->dev, "bridge window "
Subject: [PATCH] PCI: don't update bridge resource flags according to children

After  PCI: Try best to allocate pref mmio 64bit above 4g
We don't need to check if children support 64bit, and update
bridge resource flags anymore.
As the code size and assign according exact type already.

Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>

---
 drivers/pci/setup-bus.c |    7 +------
 1 file changed, 1 insertion(+), 6 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
@@ -926,7 +926,6 @@ static int pbus_size_mem(struct pci_bus
 	int order, max_order;
 	struct resource *b_res = find_free_bus_resource(bus,
 					 mask | IORESOURCE_PREFETCH, type);
-	unsigned int mem64_mask = 0;
 	resource_size_t children_add_size = 0;
 
 	if (!b_res)
@@ -936,9 +935,6 @@ static int pbus_size_mem(struct pci_bus
 	max_order = 0;
 	size = 0;
 
-	mem64_mask = b_res->flags & IORESOURCE_MEM_64;
-	b_res->flags &= ~IORESOURCE_MEM_64;
-
 	list_for_each_entry(dev, &bus->devices, bus_list) {
 		int i;
 
@@ -980,7 +976,6 @@ static int pbus_size_mem(struct pci_bus
 				aligns[order] += align;
 			if (order > max_order)
 				max_order = order;
-			mem64_mask &= r->flags & IORESOURCE_MEM_64;
 
 			if (realloc_head)
 				children_add_size += get_res_add_size(realloc_head, r);
@@ -1005,7 +1000,7 @@ static int pbus_size_mem(struct pci_bus
 	}
 	b_res->start = min_align;
 	b_res->end = size0 + min_align - 1;
-	b_res->flags |= IORESOURCE_STARTALIGN | mem64_mask;
+	b_res->flags |= IORESOURCE_STARTALIGN;
 	if (size1 > size0 && realloc_head) {
 		add_to_list(realloc_head, bus->self, b_res, size1-size0, min_align);
 		dev_printk(KERN_DEBUG, &bus->self->dev, "bridge window "

[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux