From: Jiang Liu <jiang.liu@linux.intel.com>
To: Yinghai Lu <yinghai@kernel.org>, Bjorn Helgaas <bhelgaas@google.com>
Cc: "linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>
Subject: Re: Need advices about PCI IRQ reference count tracking
Date: Thu, 17 Jul 2014 11:02:30 +0800 [thread overview]
Message-ID: <53C73CC6.20803@linux.intel.com> (raw)
In-Reply-To: <CAE9FiQWsjXU0YBsgnSvNXzkPKDPph4RgYQcvmGGoL27TE7YrhA@mail.gmail.com>
On 2014/7/17 2:37, Yinghai Lu wrote:
> On Wed, Jul 16, 2014 at 11:04 AM, Bjorn Helgaas <bhelgaas@google.com> wrote:
>> [+cc Yinghai]
>>
>> On Tue, Jul 15, 2014 at 9:34 PM, Jiang Liu <jiang.liu@linux.intel.com> wrote:
>>> Hi Bjorn,
>>> When enabling ACPI based IOAPIC hotplug, we encountered an
>>> issue with PCI IRQ reference count tracking and need your advices.
>>> In order to hot-remove an IOAPIC, we need to track and keep
>>> balance of IOAPIC pin usage count. But acpi_pci_irq_enable() may
>>> be called twice for a PCI device,
>>> 1) pci_acpi_init() if pci_routeirq is true
>>> 2) pci_enable_device()
>>>
>>> So in function acpi_pci_irq_enable(), we need a way to track whether
>>> an IOAPIC IRQ has been assigned to the PCI device. Previously we check
>>> "if (dev->irq > 0)" for that, but that's wrong because dev->irq may
>>> be set to non-zero in pci_read_irq() if BIOS has already assigned
>>> a legacy IRQ for the device. So is it OK to add a flag into pci_dev
>>> to track this information?
>
> Why do you need to track it?
>
> When do you hot-remove ioapic with pci root bus, all the drivers for
> devices on that pci root bus should be stopped at first, so no one
> will use the ioapic before ioapic is being removed.
Hi Yinghai,
By tracking IOAPIC pin usage count, we could release the
assigned IRQ number when there are no device uses an IOAPIC pin anymore.
>
>>>
>>> Another possible workaround is to disable IOAPIC hotplug when
>>> pci_routeirq is set, but that sounds not the best solution.
>
> That is not good.
>
>>
>> My first choice would be to get rid of pci_routeirq. It was added in
>> 2004 as a workaround for broken drivers. I don't know any reason why
>> we need the "pci=routeirq" option any more.
>
> I always use "pci=routeirq apic=debug" to check the print out
> if BIOS routing irq correctly.
So seems the solution is to add a flag to struct pci_dev, right?
Regards!
Gerry
>
>>
>> However, 629e15d245f4 ("x86, irq: update_mptable needs pci_routeirq")
>> added another use of pci_routeirq. This is only used when booting
>> with the undocumented "update_mptable" option, and I can't tell
>> whether it's useful or not.
>
> Yes, we could drop update_mptable now. Will produce one patch to do that.
>
> Thanks
>
> Yinghai
>
next prev parent reply other threads:[~2014-07-17 3:03 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-16 3:34 Need advices about PCI IRQ reference count tracking Jiang Liu
2014-07-16 18:04 ` Bjorn Helgaas
2014-07-16 18:37 ` Yinghai Lu
2014-07-17 3:02 ` Jiang Liu [this message]
2014-07-17 3:06 ` Yinghai Lu
2014-07-17 3:14 ` Jiang Liu
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=53C73CC6.20803@linux.intel.com \
--to=jiang.liu@linux.intel.com \
--cc=bhelgaas@google.com \
--cc=linux-pci@vger.kernel.org \
--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).