[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAJZ5v0iv99MB=Eyw=-s=9RhtxhogTNwk0TdLY=gO46GYsRhZqg@mail.gmail.com>
Date: Mon, 9 Jan 2017 22:45:59 +0100
From: "Rafael J. Wysocki" <rafael@...nel.org>
To: Zhou Wang <wangzhou1@...ilicon.com>
Cc: "Rafael J. Wysocki" <rjw@...ysocki.net>,
Len Brown <lenb@...nel.org>, Tomasz Nowicki <tn@...ihalf.com>,
Jayachandran C <jchandra@...adcom.com>,
Lorenzo Pieralisi <lorenzo.pieralisi@....com>,
jorn Helgaas <bhelgaas@...gle.com>,
Dongdong Liu <liudongdong3@...wei.com>,
Gabriele Paoloni <gabriele.paoloni@...wei.com>,
xuwei5@...ilicon.com,
ACPI Devel Maling List <linux-acpi@...r.kernel.org>,
Linux PCI <linux-pci@...r.kernel.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] ACPI/PCI: Fix bus range comparation in pci_mcfg_lookup
On Mon, Jan 9, 2017 at 4:39 AM, Zhou Wang <wangzhou1@...ilicon.com> wrote:
> On 2017/1/4 15:00, Zhou Wang wrote:
>> The configuration data provided by an MCFG region (ie PCI segment and
>> bus range) may span multiple host bridges.
>>
>> Current code in pci_mcfg_lookup() carries out an exact match of host
>> bridge bus range start value against the MCFG region(s) bus range start
>> value which would cause configurations like the following:
>>
>> MCFG region:
>> bus range: 0x00~0xff.
>> segment: 0.
>>
>> PCI host bridges configuration (segment numbers and bus ranges):
>> host bridge 1:
>> bus range: 0x00~0x1f.
>> segment: 0.
>> host bridge 2:
>> bus range: 0x20~0x4f.
>> segment: 0.
>>
>> to fail, in that the bus range start value for host bridge 2 does
>> not match the bus range start value of the respective MCFG region.
>>
>> Relax the bus range check in pci_mcfg_lookup() to cater for
>> PCI configurations with multiple host bridges sharing the same
>> MCFG region.
>>
>> Signed-off-by: Zhou Wang <wangzhou1@...ilicon.com>
>> Reviewed-by: Tomasz Nowicki <tn@...ihalf.com>
>> Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@....com>
>> ---
>> drivers/acpi/pci_mcfg.c | 5 ++---
>> 1 file changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c
>> index a6a4cea..2944353 100644
>> --- a/drivers/acpi/pci_mcfg.c
>> +++ b/drivers/acpi/pci_mcfg.c
>> @@ -195,11 +195,10 @@ int pci_mcfg_lookup(struct acpi_pci_root *root, struct resource *cfgres,
>> goto skip_lookup;
>>
>> /*
>> - * We expect exact match, unless MCFG entry end bus covers more than
>> - * specified by caller.
>> + * We expect the range in bus_res in the coverage of MCFG bus range.
>> */
>> list_for_each_entry(e, &pci_mcfg_list, list) {
>> - if (e->segment == seg && e->bus_start == bus_res->start &&
>> + if (e->segment == seg && e->bus_start <= bus_res->start &&
>> e->bus_end >= bus_res->end) {
>> root->mcfg_addr = e->addr;
>> }
>>
>
> Hi Rafael,
>
> Could you please look into this patch if you have time?
Well, it makes sense to me, but this is PCI, so Bjorn has to decide here.
Thanks,
Rafael
Powered by blists - more mailing lists