linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Wenchao Hao <haowenchao@huawei.com>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>, <linux-pci@vger.kernel.org>,
	Wu Bo <wubo40@huawei.com>,
	Zhiqiang Liu <liuzhiqiang26@huawei.com>, <linfeilong@huawei.com>,
	<lijinlin3@huawei.com>, Matthew Wilcox <willy@infradead.org>
Subject: Re: [question]: Query regarding the PCI addresses
Date: Fri, 16 Jul 2021 21:59:45 +0800	[thread overview]
Message-ID: <9809f4d7-cf9e-3672-cb02-4c49c55abada@huawei.com> (raw)
In-Reply-To: <20210714165427.GA1854138@bjorn-Precision-5520>

On 2021/7/15 0:54, Bjorn Helgaas wrote:
> [+cc Matthew for "lspci -P"]
>
> On Wed, Jul 14, 2021 at 02:33:37PM +0800, Wenchao Hao wrote:
>> Since linux identify PCI peripheral by [domain:bus:device:function] number
>> like following,
>>
>> # lspci -D
>> 0000:00:00.0 Host bridge: Red Hat, Inc. QEMU PCIe Host bridge
>> 0000:00:01.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 92)
>> 0000:00:02.0 PCI bridge: Intel Corporation 7500/5520/5500/X58 I/O Hub PCI
>> Express Root Port 0 (rev 02)
>> 0000:00:02.1 PCI bridge: Intel Corporation 7500/5520/5500/X58 I/O Hub PCI
>> Express Root Port 0 (rev 02)
>> 0000:00:02.2 PCI bridge: Intel Corporation 7500/5520/5500/X58 I/O Hub PCI
>> Express Root Port 0 (rev 02)
>> 0000:00:02.3 PCI bridge: Intel Corporation 7500/5520/5500/X58 I/O Hub PCI
>> Express Root Port 0 (rev 02)
>> 0000:01:00.0 PCI bridge: Red Hat, Inc. QEMU PCI-PCI bridge
>> 0000:02:01.0 USB controller: Intel Corporation 82801DB/DBM (ICH4/ICH4-M)
>> USB2 EHCI Controller (rev 10)
>> 0000:02:02.0 Unclassified device [00ff]: Virtio: Virtio memory balloon
>> 0000:02:03.0 SCSI storage controller: Virtio: Virtio SCSI
>> 0000:02:04.0 Display controller: Virtio: Virtio GPU (rev 01)
>> 0000:03:00.0 Ethernet controller: Virtio: Virtio network device (rev 01)
>>
>> Here are my questions: Are these [domain:bus:device:function] number
>> come from hardware's physical connection or allocated by software
>> dynamic?
> The device and function numbers are completely determined by the
> hardware and are not programmable.
>
> Bus numbers are programmable and are determined by the Secondary Bus
> Number of the bridge leading to the device.  These bus numbers are
> generally programmed by the BIOS on x86.  It's possible for Linux to
> reprogram them, but it generally leaves them alone if they are valid.
>
> On x86 with ACPI, the domain number comes from the _SEG method of the
> PNP0A03 device that describes the host bridge.  This may correspond to
> a programmable hardware register, but that isn't visible to the OS and
> Linux has no way to change it.
>
>> If hardware do not change, can we guarantee these number do not
>> change after system reboot?
> For the typical x86 system with ACPI, this is really a question for
> the BIOS.  If the hardware doesn't change, I would *expect* the
> domain/bus/device/function numbers to stay the same, but only BIOS
> folks can answer this definitively.
>
>> If they are not fixed, then is there anyway I can get a fixed ID
>> which can indicate physical connection.
> You can look at the "lspci -P" option.  I'm not really familiar with
> this, but I think Matthew (cc'd) implemented it.
>
> Bjorn
> .

Thanks Bjorn for your great analysis and I would ask BIOS for their 
suggestions.
I think we can put some constraints such as make BIOS give a stable bus
number on our users to meet their needs of finding a stable path,
although this method looks ugly.

Wenchao


      parent reply	other threads:[~2021-07-16 13:59 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-14  6:33 [question]: Query regarding the PCI addresses Wenchao Hao
2021-07-14 16:54 ` Bjorn Helgaas
2021-07-14 17:26   ` Keith Busch
2021-07-16 14:04     ` Wenchao Hao
2021-07-16 14:25       ` Bjorn Helgaas
2021-07-20  2:05         ` Wenchao Hao
2021-07-16 13:59   ` Wenchao Hao [this message]

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=9809f4d7-cf9e-3672-cb02-4c49c55abada@huawei.com \
    --to=haowenchao@huawei.com \
    --cc=bhelgaas@google.com \
    --cc=helgaas@kernel.org \
    --cc=lijinlin3@huawei.com \
    --cc=linfeilong@huawei.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=liuzhiqiang26@huawei.com \
    --cc=willy@infradead.org \
    --cc=wubo40@huawei.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).