All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Yang <weiyang@linux.vnet.ibm.com>
To: Don Dutile <ddutile@redhat.com>
Cc: Richard Yang <weiyang@linux.vnet.ibm.com>,
	linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: One problem in reassign pci bus number?
Date: Tue, 24 Apr 2012 15:29:18 +0800	[thread overview]
Message-ID: <20120424072918.GA9138@richard> (raw)
In-Reply-To: <4F95B17B.3030401@redhat.com>

On Mon, Apr 23, 2012 at 03:46:03PM -0400, Don Dutile wrote:
>On 04/22/2012 11:52 AM, Richard Yang wrote:
>>All,
>>
>>I am reading the pci_scan_bridge() and not sure what will happen in
>>following situation.
>>
>>Suppose the kernel is not passed the pci=assign-busses.
>>
>>Below is a picture about the pci system.
>>
>>                    +-------+
>>                    |       | root bridge(0,255)
>>                    +---+---+
>>                        |          Bus 0
>>       -----+-----------+------------------------------+--
>>            |                                          |
>>            |                                          |
>>            |                                          |
>>       +----+----+                               +-----+-----+
>>       |         |  B1(1,15)                     |           |B2(16,28)
>>       +----+----+                               +-----+-----+
>>            |  Bus 1                                   |    Bus 16
>>       -----+-----------------------         ----------+----------------
>>                             |
>>                        +----+----+
>>                        |         | B3
>>                        +---------+
>>
>>Suppose B1 and B2 works fine with the BIOS, which get the right bus
>>number and range.
>>
>>B3 does not works fine with the BIOS, which doesn't get the bus number.
>>
>>So in pci_scan_bridge(), B3 will be met in the second pass and get bus
>>number 16?
>
>unfortunately, today, the answer is yes.
>I have run into a similar problem recently when trying to use pci=assign-busses
>with an SRIOV device behind a non-ARI-capable PCIe switch.
>In this scenario, the assign-busses code assigned the next bus number,
>which conflicted with an existing one on the system, and hangs the
>system -- two bridges responding to the same PCI bus num evidently
>confuses the hw! ;-)
Hmm... seems we are not talking about the same case.
My case is the kernel not passed with pci=assign-busses.

I think, if pci=assign-busses is used, kernel will just ignore the bus
number assigned by BIOS, and do the assignment itself.
>
>The PCI code is suppose to do two bus scans -- pass=0: to see what the BIOS
>has setup, and then pass=1 to assign non-BIOS setup devices.
>But, what I'm finding is that when pci=assign-busses is set, the
>pass=0 scan is not doing a full PCI tree scan and registering all
>the BIOS-setup busses first, and it tries to do extended bus assignment in pass=0,
>not pass=1; in the above configuration, it expands B1's bus num range from (1,15)
>to (1,16), then tries to scan behind it.  that creates an overlap btwn
>B1 & B2's sec/sub bus-num ranges, and they both respond to a Type1 config cycle
>with a bus-number of 16 (typically when trying to read the VID register of 16:0.0
>in this case).... boom! ... or more like silence due to system hang...
>
>*If* the system spaces bus ranges apart, e.g., in your config above,
>if the BIOS setup B1(1,15) and B2(24,32), then pci=assign-busses will
>work because bus num 16 is free, and two bridges won't think they both
>respond to type1 pci config cycle (with bus-number=16 lying in their sec/sub-bus num range),
>and all will (luckily) work.
>
>Unfortunately, I'm in & out of work due to at-home time requirements,
>so I haven't had a chance to work out a proper patch.
>What should happen in the above case, is the kernel prints a warning saying
>it couldn't do needed assign-busses operations due to configuration constraints...
>and continue to do pci (pass=1) bridge scanning.... and not wedge the system
>as it does now.
>The base problem is that
>(a)pass=0 is doing bus-assigning, and it shouldn't be done
>    until pass=1, after all known BIOS-setup busses are known
>(b) the code doesn't have a nice warning and continuation when this
>    conflict occurs.
>
>>Would this be a conflict?
>>
>summary: yes.

-- 
Richard Yang
Help you, Help me


  parent reply	other threads:[~2012-04-24  7:29 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20120410090306.GA7056@richard>
2012-04-22 15:52 ` One problem in reassign pci bus number? Richard Yang
2012-04-23 19:46   ` Don Dutile
2012-04-23 20:19     ` Yinghai Lu
2012-04-23 21:09       ` Don Dutile
2012-04-23 22:07         ` Yinghai Lu
2012-04-25  2:56           ` Don Dutile
2012-04-23 22:22         ` Yinghai Lu
2012-04-25  2:59           ` Don Dutile
2012-04-24  7:29     ` Richard Yang [this message]
2012-05-14  1:55     ` Richard Yang
2012-05-14  5:40       ` Yinghai Lu
2012-05-14  6:46         ` Richard Yang
2012-05-15 17:32           ` Yinghai Lu
2012-05-16  1:18             ` Richard Yang
2012-05-16  2:11               ` Yinghai Lu
2012-05-29 11:59                 ` Richard Yang
2012-05-29 17:14                   ` Yinghai Lu
2012-06-04 13:34                     ` Richard Yang
2012-06-04 23:36                       ` Yinghai Lu
2012-06-05  6:26                         ` Richard Yang
2012-06-05 18:01                           ` Yinghai Lu
2012-04-23 20:13   ` Yinghai Lu
2012-04-24 14:56     ` Wei Yang
2012-04-25  9:47     ` Wei Yang
2012-04-25 16:28       ` Yinghai Lu
2012-05-03  6:54         ` Richard Yang
2012-05-03  8:33           ` Yinghai Lu
2012-05-04  2:47             ` Richard Yang
2012-05-04  3:15               ` Yinghai Lu
2012-05-04  4:52                 ` Richard Yang
2012-05-04 17:37                   ` Yinghai Lu
2012-05-06 15:17                     ` Richard Yang
2012-05-06 16:35                       ` Yinghai Lu
2012-05-06 16:36                         ` Yinghai Lu
2012-05-07  1:17                           ` Richard Yang
2012-05-07  2:04                             ` Yinghai Lu
2012-05-08  2:46                               ` Richard Yang
2012-05-08  3:42                                 ` Yinghai Lu
2012-05-10  3:35                                   ` Richard Yang
2012-05-10  5:42                                     ` Yinghai Lu
2012-05-11  1:23                                       ` Richard Yang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120424072918.GA9138@richard \
    --to=weiyang@linux.vnet.ibm.com \
    --cc=ddutile@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.