From: Don Dutile <ddutile@redhat.com>
To: Yinghai Lu <yinghai@kernel.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>, Jiang Liu <liuj97@gmail.com>,
Jiang Liu <jiang.liu@huawei.com>,
Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>,
Yijing Wang <wangyijing@huawei.com>,
linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org
Subject: Re: [PATCH 4/5] PCI/IOV: simplify code by hotplug safe pci_get_domain_bus_and_slot()
Date: Fri, 21 Sep 2012 10:15:35 -0400 [thread overview]
Message-ID: <505C7687.1030001@redhat.com> (raw)
In-Reply-To: <CAE9FiQXXB-qqWXc_pL-BVrboMzuvvPDPbEwK2To-taMg+NHu4A@mail.gmail.com>
On 09/21/2012 02:22 AM, Yinghai Lu wrote:
> On Thu, Sep 20, 2012 at 7:56 PM, Bjorn Helgaas<bhelgaas@google.com> wrote:
>> This is another thing I'm curious about. How do you handle this
>> situation today (before host bridge hot-add)?
>>
>> The DMAR I'm not so worried about because as far as I know, there's no
>> such thing as a DMAR that's discovered by PCI enumeration. We should
>> discover it via ACPI, and that can happen before we enumerate anything
>> behind a host bridge, so I don't really see any ordering problem
>> between the DMAR and the PCI devices that would use it.
>
> only need to have pci devices on that root bus scanned, and current intel iommu
> maintain one device scope to drhd with pointer to pci device... that
> need to be fixed
> too.
>
translation: you have an ACPI-DMAR setup bug? a drhd can have multiple device
scopes, one of which can be "all devices under bus X uses this IOMMU".
If (dynamic) DMARs are scanned at root hot-plug time in ACPI hot-plug,
the proper dmar-init should be completed before any PCI devs are scanned
(and put into the proper iommu domain).
>>
>> However, I know there *are* IOAPICs that are enumerated as PCI
>> devices, and I don't know whether we can deduce a relationship between
>> the IOAPIC and the devices that use it. Don't we have this problem
>> already? I assume that even without hot-adding a host bridge, we
>> might discover a PCI IOAPIC that was present at boot, and we'd have to
>> make sure to bind a driver to it before we use any of the PCI devices
>> connected to it. How does that work?
>
> I converted it to acpi way to discover it, and it could handle that case.
>
> will search _GSB and try to get pci device, if there is pci device
> will try to get BAR as ioapic base.
>
> http://git.kernel.org/?p=linux/kernel/git/yinghai/linux-yinghai.git;a=blob;f=drivers/pci/ioapic.c;h=504ca93ac692646a7754fff83a04e3d07d98f648;hb=refs/heads/for-x86-irq
>
> something like:
>
> static void handle_ioapic_add(acpi_handle handle, struct pci_dev **pdev,
> u32 *pgsi_base)
> {
> acpi_status status;
> unsigned long long gsb;
> struct pci_dev *dev;
> u32 gsi_base;
> int ret;
> char *type;
> struct resource r;
> struct resource *res =&r;
> char objname[64];
> struct acpi_buffer buffer = {sizeof(objname), objname};
>
> *pdev = NULL;
> *pgsi_base = 0;
>
> status = acpi_evaluate_integer(handle, "_GSB", NULL,&gsb);
> if (ACPI_FAILURE(status) || !gsb)
> return;
>
> dev = acpi_get_pci_dev(handle);
> if (!dev) {
> struct acpi_device_info *info;
> char *hid = NULL;
>
> status = acpi_get_object_info(handle,&info);
> if (ACPI_FAILURE(status))
> return;
> if (info->valid& ACPI_VALID_HID)
> hid = info->hardware_id.string;
> if (!hid || strcmp(hid, "ACPI0009")) {
> kfree(info);
> return;
> }
> kfree(info);
> memset(res, 0, sizeof(*res));
> acpi_walk_resources(handle, METHOD_NAME__CRS, setup_res, res);
> if (!res->flags)
> return;
> }
>
> acpi_get_name(handle, ACPI_FULL_PATHNAME,&buffer);
>
> gsi_base = gsb;
> type = "IOxAPIC";
> if (dev) {
> ret = pci_enable_device(dev);
> if (ret< 0)
> goto exit_put;
>
> pci_set_master(dev);
>
> if (dev->class == PCI_CLASS_SYSTEM_PIC_IOAPIC)
> type = "IOAPIC";
>
> if (pci_request_region(dev, 0, type))
> goto exit_disable;
>
> res =&dev->resource[0];
> }
>
> if (acpi_register_ioapic(handle, res->start, gsi_base)) {
> if (dev)
> goto exit_release;
> return;
> }
>
> printk(KERN_INFO "%s %s %s at %pR, GSI %u\n",
> dev ? dev_name(&dev->dev) : "", objname, type,
> res, gsi_base);
>
> *pdev = dev;
> *pgsi_base = gsi_base;
> return;
>
> exit_release:
> pci_release_region(dev, 0);
> exit_disable:
> pci_disable_device(dev);
> exit_put:
> pci_dev_put(dev);
> }
next prev parent reply other threads:[~2012-09-21 14:15 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-28 15:43 [PATCH 0/5] Simplify code by using hotplug safe pci_get_domain_bus_and_slot() Jiang Liu
2012-08-28 15:43 ` [PATCH 1/5] PCI/IA64: simplify code by " Jiang Liu
2012-08-28 15:43 ` [PATCH 2/5] PCI/vga: " Jiang Liu
2012-08-28 15:43 ` [PATCH 3/5] PCI/cpcihp: " Jiang Liu
2012-08-28 15:43 ` [PATCH 4/5] PCI/IOV: " Jiang Liu
2012-09-20 20:38 ` Yinghai Lu
2012-09-20 23:59 ` Bjorn Helgaas
2012-09-21 0:02 ` Jiang Liu
2012-09-21 1:51 ` Yinghai Lu
2012-09-21 2:56 ` Bjorn Helgaas
2012-09-21 6:22 ` Yinghai Lu
2012-09-21 14:15 ` Don Dutile [this message]
2012-09-21 15:11 ` Yinghai Lu
2012-08-28 15:43 ` [PATCH 5/5] PCI/xen-pcifront: " Jiang Liu
2012-08-28 16:59 ` Konrad Rzeszutek Wilk
2012-08-28 23:56 ` Jiang Liu
2012-09-05 16:29 ` Konrad Rzeszutek Wilk
2012-09-05 20:32 ` Konrad Rzeszutek Wilk
2012-09-17 19:34 ` [PATCH 0/5] Simplify code by using " Bjorn Helgaas
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=505C7687.1030001@redhat.com \
--to=ddutile@redhat.com \
--cc=bhelgaas@google.com \
--cc=jiang.liu@huawei.com \
--cc=kaneshige.kenji@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=liuj97@gmail.com \
--cc=wangyijing@huawei.com \
--cc=yinghai@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 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).