From: Yijing Wang <wangyijing0307@gmail.com>
To: Bjorn Helgaas <bhelgaas@google.com>
Cc: Jiang Liu <liuj97@gmail.com>, "Rafael J . Wysocki" <rjw@sisk.pl>,
Jiang Liu <jiang.liu@huawei.com>, Yinghai Lu <yinghai@kernel.org>,
Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>,
Yijing Wang <wangyijing@huawei.com>,
linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
Toshi Kani <toshi.kani@hp.com>,
Myron Stowe <myron.stowe@redhat.com>
Subject: Re: [RFC PATCH v5 7/8] PCI/PCIe: add "pci=nopciehp" to disable PCIe native hotplug
Date: Sat, 19 Jan 2013 09:56:24 +0800 [thread overview]
Message-ID: <50F9FD48.20509@gmail.com> (raw)
In-Reply-To: <CAErSpo6E0SrY8_JOU6pmrCt9opfKe_jJ6b0E0daNAbpX5KtFuQ@mail.gmail.com>
于 2013-01-19 1:35, Bjorn Helgaas 写道:
> On Fri, Jan 18, 2013 at 9:07 AM, Jiang Liu <liuj97@gmail.com> wrote:
>> If user specifies "pci=nopciehp" on kernel boot command line, OSPM
>> won't claim PCIe native hotplug service from firmware and no PCIe
>> port devices will be created for PCIe native hotplug service.
>
> Why do we need this option?
>
> If I understand correctly, there are machines where it *looks* like we
> should use pciehp, but pciehp doesn't work because we don't get the
> interrupts we expect. On those machines, we have to use acpiphp
> instead. It seems like many Dell XPS laptops have this issue with
> ExpressCard slots, e.g.,
> https://bugzilla.kernel.org/show_bug.cgi?id=40802 .
What about use modprobe pciehp pciehp_poll_mode=1?
If just cannot receive the interrupt, maybe this module parameter will fix it.
>
> If you want "pci=nopciehp" as a way for users to deal with this
> problem by forcing the use of acpiphp, I object. Windows manages to
> make these slots work without having users do anything special, so we
> should be able to do it, too.
In fact, pcie native hotplug may not be implemented perfectly,
for example, I found some x86 machines pcie native hotplug slots that have problems
with latch register. After inserted a pci card, the latch still report latch open state.
So we cannot use pciehp to hotplug, But this problem cannot detect while system bootup or
load pciehp module. And now kernel force to use pciehp if pci slotcap has hotplug capable.
So I agree as Yinghai said users should have choice to choose hotplug module to use.
>
>> Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
>> ---
>> Documentation/kernel-parameters.txt | 2 ++
>> drivers/acpi/pci_root.c | 3 ++-
>> drivers/pci/pci.c | 2 ++
>> drivers/pci/pcie/portdrv_core.c | 5 +++--
>> drivers/pci/pcie/portdrv_pci.c | 3 +++
>> include/linux/pci.h | 9 +++++++++
>> 6 files changed, 21 insertions(+), 3 deletions(-)
>>
>> diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
>> index 9776f06..28dd0ad 100644
>> --- a/Documentation/kernel-parameters.txt
>> +++ b/Documentation/kernel-parameters.txt
>> @@ -2106,6 +2106,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
>> noaer [PCIE] If the PCIEAER kernel config parameter is
>> enabled, this kernel boot option can be used to
>> disable the use of PCIE advanced error reporting.
>> + nopciehp [PCIE] this kernel boot option can be used to
>> + disable PCIe native hotplug.
>> nodomains [PCI] Disable support for multiple PCI
>> root domains (aka PCI segments, in ACPI-speak).
>> nommconf [X86] Disable use of MMCONFIG for PCI
>> diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
>> index c6200ff..c37eedb 100644
>> --- a/drivers/acpi/pci_root.c
>> +++ b/drivers/acpi/pci_root.c
>> @@ -551,8 +551,9 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
>> if (!pcie_ports_disabled
>> && (flags & ACPI_PCIE_REQ_SUPPORT) == ACPI_PCIE_REQ_SUPPORT) {
>> flags = OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL
>> - | OSC_PCI_EXPRESS_NATIVE_HP_CONTROL
>> | OSC_PCI_EXPRESS_PME_CONTROL;
>> + if (!pcie_native_hotplug_disabled)
>> + flags |= OSC_PCI_EXPRESS_NATIVE_HP_CONTROL;
>>
>> if (pci_aer_available()) {
>> if (aer_acpi_firmware_first())
>> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
>> index 2f8f4c6..34b2c83 100644
>> --- a/drivers/pci/pci.c
>> +++ b/drivers/pci/pci.c
>> @@ -3869,6 +3869,8 @@ static int __init pci_setup(char *str)
>> pci_no_msi();
>> } else if (!strcmp(str, "noaer")) {
>> pci_no_aer();
>> + } else if (!strcmp(str, "nopciehp")) {
>> + pcie_no_native_hotplug();
>> } else if (!strncmp(str, "realloc=", 8)) {
>> pci_realloc_get_opt(str + 8);
>> } else if (!strncmp(str, "realloc", 7)) {
>> diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c
>> index ed129b4..e7e1679 100644
>> --- a/drivers/pci/pcie/portdrv_core.c
>> +++ b/drivers/pci/pcie/portdrv_core.c
>> @@ -263,8 +263,9 @@ static int get_port_device_capability(struct pci_dev *dev)
>>
>> err = pcie_port_platform_notify(dev, &cap_mask);
>> if (!pcie_ports_auto) {
>> - cap_mask = PCIE_PORT_SERVICE_PME | PCIE_PORT_SERVICE_HP
>> - | PCIE_PORT_SERVICE_VC;
>> + cap_mask = PCIE_PORT_SERVICE_PME | PCIE_PORT_SERVICE_VC;
>> + if (!pcie_native_hotplug_disabled)
>> + cap_mask |= PCIE_PORT_SERVICE_HP;
>> if (pci_aer_available())
>> cap_mask |= PCIE_PORT_SERVICE_AER;
>> } else if (err) {
>> diff --git a/drivers/pci/pcie/portdrv_pci.c b/drivers/pci/pcie/portdrv_pci.c
>> index 0761d90..018cee0 100644
>> --- a/drivers/pci/pcie/portdrv_pci.c
>> +++ b/drivers/pci/pcie/portdrv_pci.c
>> @@ -40,6 +40,9 @@ bool pcie_ports_disabled;
>> */
>> bool pcie_ports_auto = true;
>>
>> +/* If set, the PCIe native hotplug will not be used. */
>> +bool pcie_native_hotplug_disabled;
>> +
>> static int __init pcie_port_setup(char *str)
>> {
>> if (!strncmp(str, "compat", 6)) {
>> diff --git a/include/linux/pci.h b/include/linux/pci.h
>> index 12e5447..715e17b 100644
>> --- a/include/linux/pci.h
>> +++ b/include/linux/pci.h
>> @@ -1138,9 +1138,18 @@ extern int pci_msi_enabled(void);
>> #ifdef CONFIG_PCIEPORTBUS
>> extern bool pcie_ports_disabled;
>> extern bool pcie_ports_auto;
>> +extern bool pcie_native_hotplug_disabled;
>> +
>> +static inline void pcie_no_native_hotplug(void)
>> +{
>> + pcie_native_hotplug_disabled = true;
>> +}
>> #else
>> #define pcie_ports_disabled true
>> #define pcie_ports_auto false
>> +#define pcie_native_hotplug_disabled true
>> +
>> +static inline void pcie_no_native_hotplug(void) { }
>> #endif
>>
>> #ifndef CONFIG_PCIEASPM
>> --
>> 1.7.9.5
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pci" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2013-01-19 1:56 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-18 16:07 [RFC PATCH v5 0/8] introduce PCI bus notifier chain to get rid of the ACPI PCI subdriver interfaces Jiang Liu
2013-01-18 16:07 ` [RFC PATCH v5 1/8] PCI: make PCI device create/destroy logic symmetric Jiang Liu
2013-01-20 23:35 ` Rafael J. Wysocki
2013-01-18 16:07 ` [RFC PATCH v5 2/8] PCI: split registration of PCI bus devices into two stages Jiang Liu
2013-01-18 16:07 ` [RFC PATCH v5 3/8] PCI: add a blocking notifier chain for PCI bus addition/removal Jiang Liu
2013-01-20 23:54 ` Rafael J. Wysocki
2013-01-21 16:18 ` Jiang Liu
2013-01-21 22:46 ` Rafael J. Wysocki
2013-01-18 16:07 ` [RFC PATCH v5 4/8] ACPI, PCI: avoid building pci_slot as module Jiang Liu
2013-01-21 0:01 ` Rafael J. Wysocki
2013-01-28 21:09 ` Bjorn Helgaas
2013-01-28 21:29 ` Yinghai Lu
2013-01-28 21:52 ` Bjorn Helgaas
2013-01-28 22:00 ` Yinghai Lu
2013-01-28 22:14 ` Bjorn Helgaas
2013-01-28 22:58 ` Yinghai Lu
2013-01-29 2:07 ` Jiang Liu
2013-01-29 2:21 ` Yinghai Lu
2013-01-29 2:45 ` Jiang Liu
2013-01-29 2:50 ` Bjorn Helgaas
2013-01-29 4:36 ` Matthew Garrett
2013-01-29 4:36 ` Matthew Garrett
2013-01-29 1:00 ` Rafael J. Wysocki
2013-02-03 20:18 ` Rafael J. Wysocki
2013-02-03 20:58 ` Bjorn Helgaas
2013-02-03 22:47 ` Myron Stowe
2013-02-03 23:38 ` Rafael J. Wysocki
2013-01-18 16:07 ` [RFC PATCH v5 5/8] PCI, ACPI: hook PCI bus notifications to create/destroy PCI slots Jiang Liu
2013-01-21 0:05 ` Rafael J. Wysocki
2013-01-18 16:07 ` [RFC PATCH v5 6/8] pci_slot: replace printk(KERN_xxx) with pr_xxx() Jiang Liu
2013-01-18 16:07 ` [RFC PATCH v5 7/8] PCI/PCIe: add "pci=nopciehp" to disable PCIe native hotplug Jiang Liu
2013-01-18 17:35 ` Bjorn Helgaas
2013-01-18 17:50 ` Yinghai Lu
2013-01-18 22:08 ` Rafael J. Wysocki
2013-01-22 16:19 ` Jiang Liu
2013-01-18 22:01 ` Rafael J. Wysocki
2013-01-19 1:56 ` Yijing Wang [this message]
2013-01-19 14:51 ` Greg Kroah-Hartman
2013-01-18 16:07 ` [RFC PATCH v5 8/8] PCI/PCIe: only claim PME from firmware when CONFIG_PCIE_PME is enabled Jiang Liu
2013-01-20 23:43 ` Rafael J. Wysocki
2013-01-21 17:06 ` Jiang Liu
2013-01-28 20:56 ` [RFC PATCH v5 0/8] introduce PCI bus notifier chain to get rid of the ACPI PCI subdriver interfaces Bjorn Helgaas
2013-01-29 0:34 ` Rafael J. Wysocki
2013-01-29 2:04 ` Jiang Liu
2013-02-01 16:13 ` Jiang Liu
2013-02-01 22:52 ` 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=50F9FD48.20509@gmail.com \
--to=wangyijing0307@gmail.com \
--cc=bhelgaas@google.com \
--cc=gregkh@linuxfoundation.org \
--cc=jiang.liu@huawei.com \
--cc=kaneshige.kenji@jp.fujitsu.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=liuj97@gmail.com \
--cc=myron.stowe@redhat.com \
--cc=rjw@sisk.pl \
--cc=toshi.kani@hp.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).