lkml.org 
[lkml]   [2010]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 03/11] pci: reject mmio range start from 0 on pci_bridge read
    only need to set the value to resource.
    also could keep the old setting in resource for prevent shrink bridge
    resources.

    -v2: change to "bar reading" to "reg reading"

    Signed-off-by: Yinghai Lu <yinghai@kernel.org>
    ---
    drivers/pci/probe.c | 18 +++++++++++++++---
    1 files changed, 15 insertions(+), 3 deletions(-)

    diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
    index 11824d7..8cd4fb3 100644
    --- a/drivers/pci/probe.c
    +++ b/drivers/pci/probe.c
    @@ -316,13 +316,17 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child)
    limit |= (io_limit_hi << 16);
    }

    - if (base <= limit) {
    + if (base && base <= limit) {
    res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
    if (!res->start)
    res->start = base;
    if (!res->end)
    res->end = limit + 0xfff;
    dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
    + } else {
    + dev_printk(KERN_DEBUG, &dev->dev,
    + " bridge window [io %04lx - %04lx] reg reading\n",
    + base, limit);
    }

    res = child->resource[1];
    @@ -330,11 +334,15 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child)
    pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
    base = (mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
    limit = (mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
    - if (base <= limit) {
    + if (base && base <= limit) {
    res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
    res->start = base;
    res->end = limit + 0xfffff;
    dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
    + } else {
    + dev_printk(KERN_DEBUG, &dev->dev,
    + " bridge window [mem 0x%08lx - 0x%08lx] reg reading\n",
    + base, limit + 0xfffff);
    }

    res = child->resource[2];
    @@ -366,7 +374,7 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child)
    #endif
    }
    }
    - if (base <= limit) {
    + if (base && base <= limit) {
    res->flags = (mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) |
    IORESOURCE_MEM | IORESOURCE_PREFETCH;
    if (res->flags & PCI_PREF_RANGE_TYPE_64)
    @@ -374,6 +382,10 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child)
    res->start = base;
    res->end = limit + 0xfffff;
    dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
    + } else {
    + dev_printk(KERN_DEBUG, &dev->dev,
    + " bridge window [mem 0x%08lx - %08lx pref] reg reading\n",
    + base, limit + 0xfffff);
    }
    }

    --
    1.6.4.2


    \
     
     \ /
      Last update: 2010-01-16 12:15    [W:2.789 / U:0.244 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site