Re: pci->pcie bridge issue: kernel unable to find a free I/O port range.

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

 



On Wed, Jan 29, 2014 at 9:31 PM, `VL <vl.homutov@xxxxxxxxx> wrote:
> On 15.01.2014 22:09, `VL wrote:
>>
>> On 15.01.2014 13:10, `VL wrote:
>>>>
>>>> looks like the your adapter need more time to settle down?
>>>> Can you check if you can enable slow boot mode in BIOS setup?
>>>
>>> yes, probably. I'll try to repeat steps with disabled fast boot.
>>
>> no, this is not the case. I've disabled all fast boot in BIOS and nothing
>> changed in logs.
>>
>> so this is the best of what we have:
>> http://inspert.ru/pci/dmesg-earlydump.txt
>>
>> I was also able to reproduce the issue without pci=realloc. I have
>> disabled
>> all builtin devices on motherboard (unused controllers, NICs and audio).
>> Looks like in this conditions kernel was able to allocate some resource
>> and hang during snd_ice1712 driver load.
>>
>> Attached is the photo of boot with this situation.
>> Unfortunately, since NICs are disabled and there is no serial onboard,
>> I cannot provide full log.
>>
> up: any concluision/suggestions?

I don't know why the io bar of 07:00.0 can not be updated.
also it's weird that 07:0.0 is not showing up in earlydump.

anyway please try attached patch to see if it could make any difference.

Thanks

Yinghai
Suject: [PATCH] x86, pci: use raw_pci_ext_ops for conf1

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

---
 arch/x86/pci/common.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Index: linux-2.6/arch/x86/pci/common.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/common.c
+++ linux-2.6/arch/x86/pci/common.c
@@ -41,20 +41,20 @@ const struct pci_raw_ops *__read_mostly
 int raw_pci_read(unsigned int domain, unsigned int bus, unsigned int devfn,
 						int reg, int len, u32 *val)
 {
-	if (domain == 0 && reg < 256 && raw_pci_ops)
-		return raw_pci_ops->read(domain, bus, devfn, reg, len, val);
 	if (raw_pci_ext_ops)
 		return raw_pci_ext_ops->read(domain, bus, devfn, reg, len, val);
+	if (domain == 0 && reg < 256 && raw_pci_ops)
+		return raw_pci_ops->read(domain, bus, devfn, reg, len, val);
 	return -EINVAL;
 }
 
 int raw_pci_write(unsigned int domain, unsigned int bus, unsigned int devfn,
 						int reg, int len, u32 val)
 {
-	if (domain == 0 && reg < 256 && raw_pci_ops)
-		return raw_pci_ops->write(domain, bus, devfn, reg, len, val);
 	if (raw_pci_ext_ops)
 		return raw_pci_ext_ops->write(domain, bus, devfn, reg, len, val);
+	if (domain == 0 && reg < 256 && raw_pci_ops)
+		return raw_pci_ops->write(domain, bus, devfn, reg, len, val);
 	return -EINVAL;
 }
 

[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