All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>,
	Len Brown <lenb@kernel.org>,
	ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
	linux-pm@lists.linux-foundation.org, linux-pci@vger.kernel.org,
	Matthew Garrett <mjg59@srcf.ucam.org>,
	Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Subject: Re: [PATCH] PCI / PCIe: Ask BIOS for control of all native services at once (v4)
Date: Fri, 30 Jul 2010 15:00:37 +0900	[thread overview]
Message-ID: <4C526A85.3070902@jp.fujitsu.com> (raw)
In-Reply-To: <201007291745.39285.rjw@sisk.pl>

(2010/07/30 0:45), Rafael J. Wysocki wrote:
> On Thursday, July 29, 2010, Kenji Kaneshige wrote:
>> (2010/07/29 6:43), Jesse Barnes wrote:
>>> On Wed, 28 Jul 2010 23:23:56 +0200
>>> "Rafael J. Wysocki"<rjw@sisk.pl>   wrote:
>>>
>>>> From: Rafael J. Wysocki<rjw@sisk.pl>
>>>>
>>>> PCIe port service drivers ask the BIOS, through _OSC, for control of
>>>> the services they handle.  Unfortunately, each of them individually
>>>> asks for control of the PCIe capability structure and if that is
>>>> granted, some BIOSes expect that the other PCIe port services will be
>>>> configured and handled by the kernel as well.  If that is not the
>>>> case (eg. one of the PCIe port service drivers is not loaded), the
>>>> BIOS may be confused and may cause the system as a whole to misbehave
>>>> (eg. on one of such systems enabling the native PCIe PME service
>>>> without loading the native PCIe hot-plug service driver causes a
>>>> storm of ACPI notify requests to appear).
>>>>
>>>> For this reason rework the PCIe port driver so that (1) it checks
>>>> which native PCIe port services can be enabled, according to the
>>>> BIOS, and (2) it requests control of all these services
>>>> simultaneously.  In particular, this causes pcie_portdrv_probe() to
>>>> fail if the BIOS refuses to grant control of the PCIe capability
>>>> structure, which means that no native PCIe port services can be
>>>> enabled for the PCIe root complex the given port belongs to.
>>>>
>>>> Make it possible to override this behavior using a new command line
>>>> switch pcie_ports= that can be set to 'auto' (ask the BIOS, the
>>>> default), 'native' (use the PCIe native services regardless of the
>>>> BIOS response to the control request), or 'compat' (do not use the
>>>> PCIe native services at all).
>>>>
>>>> Accordingly, rework the existing PCIe port service drivers so that
>>>> they don't request control of the services directly.
>>>>
>>>> Signed-off-by: Rafael J. Wysocki<rjw@sisk.pl>
>>>> ---
>>>
>>> Kenji-san, are you ok with this version?  I would like to get your ack
>>> (and ideally your tested-by) for this one since it affects
>>> functionality you need.
>>>
>>
>> Hi Jesse, Rafael,
>>
>> I've just started reviewing the latest version of the patch. I have good
>> impression about this version so far. Please give me a few days for deeper
>> review. And I've booked the test machine for this patch in next week. I'll
>> try to test the patch and send you the result as soon as I can.
>>
>> Here are two comments I have so far.
>>
>> Though it is not directly related to Rafael's patch, I found one problem
>> in _OSC query handling while reviewing this patch. Currently, all the
>> _OSC controls are queried at the same time in acpi_pci_osc_support() and
>> the result is preserved for later acpi_pci_osc_control_set() call. But
>> query result can vary depending on the combination of requested controls.
>
> In principle it can, but acpi_pci_query_osc() asks for all aplicable control
> bits, in which case the formware can only clear those bits in the response if
> the corresponding features are unsupported.  Doing otherwise would be in
> violation of Section 6.2.9.1. of ACPI spec 3.0b, the following in particular:
>
> "If any bits in the Control Field are returned cleared (masked to zero) by the _OSC control method,
> the respective feature is designated unsupported by the platform and must not be enabled by the OS."
>

My concern is as follows.

For easy, assume as follows:
- all the _OSC controls are A, B, C
-B depends on C.
- When requesting A, B and C, all A, B and C are granted to OS.
- When requesting A, B, only A is granted to OS.

Current linux queries all A, B and C at the boot time and preserve the
result (all A, B and C can be granted to OS). Here, if a service driver
requests A and B using acpi_pci_osc_control_set(), acpi_pci_osc_control_set()
checks if both of those controls can be granted to OS. The expected result
here is only A can be granted to OS, but current linux judges both of them
can be granted because linux does this check by seeing preserved result.
As a result, acpi_pci_osc_control_set() evaluates _OSC with query flag
cleared to request A and B. Since the control B returned cleared,
acpi_pci_osc_control() returns error to the service driver. As a result,
control A is granted to OS even though there is no driver to handle the
control A.


>> So I think query result must not be preserved. Since Rafael's patch uses
>> query result, this problem should be fixed at the same time. I'll try to
>> make a patch for this and update Rafael's patch if needed.
>
> It would be sufficient to change acpi_pci_osc_control_get(), introduced
> by my patch, to call acpi_pci_query_osc() unconditionally, but as I said above,
> I don't think it's necessary.

I made a patch for this and updated your patch slightly. I'll send them soon.

>
>> I think the following changes should be done in the separated patch. I
>> guess this change is for the BIOS which enables hotplug interrupt at when
>> _OSC is evaluated with native hot-plug control. Right?
>
> Yes, it is.
>
>> Anyway, it should be separated patch with appropriate description.
>
> But the $subject patch does analogous things for AER and PCIe PME.  Do you
> think they also should be introduced by separate patches?

I think the following changes in your patch should be introduced by
separate patches.

  - optimizing the checks in acpi_pci_osc_control_set()
  - Disabling hot-plug interrupt
  - Removing module_exit()

Thanks,
Kenji Kaneshige

  reply	other threads:[~2010-07-30  6:00 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-28 21:23 [PATCH] PCI / PCIe: Ask BIOS for control of all native services at once (v4) Rafael J. Wysocki
2010-07-28 21:43 ` Jesse Barnes
2010-07-29  5:03   ` Kenji Kaneshige
2010-07-29  5:03   ` Kenji Kaneshige
2010-07-29 15:45     ` Rafael J. Wysocki
2010-07-29 15:45     ` Rafael J. Wysocki
2010-07-30  6:00       ` Kenji Kaneshige [this message]
2010-07-30  6:16         ` Kenji Kaneshige
2010-07-30  6:20           ` [PATCH 1/6] ACPI/PCI: cleanup acpi_pci_run_osc Kenji Kaneshige
2010-07-30 12:15             ` Rafael J. Wysocki
2010-07-30 12:15             ` Rafael J. Wysocki
2010-07-30  6:20           ` Kenji Kaneshige
2010-07-30  6:21           ` [PATCH 2/6] ACPI/PCI: do not preserve query result Kenji Kaneshige
2010-07-30  6:21           ` Kenji Kaneshige
2010-07-30 12:42             ` Rafael J. Wysocki
2010-07-30 12:42             ` Rafael J. Wysocki
2010-07-30  6:22           ` [PATCH 3/6] ACPI/PCI: optimize checks in acpi_pci_osc_control_set() Kenji Kaneshige
2010-07-30  6:22           ` Kenji Kaneshige
2010-07-30 12:42             ` Rafael J. Wysocki
2010-07-30 12:42             ` Rafael J. Wysocki
2010-07-30  6:23           ` [PATCH 4/6] ACPI/PCI: ask bios for control of all native services at once Kenji Kaneshige
2010-07-30  6:23           ` Kenji Kaneshige
2010-07-30  8:42             ` Hidetoshi Seto
2010-07-30  8:47               ` [PATCH] portdrv: Don't take control of AER if not required Hidetoshi Seto
2010-07-30  8:47               ` Hidetoshi Seto
2010-07-30  8:42             ` [PATCH 4/6] ACPI/PCI: ask bios for control of all native services at once Hidetoshi Seto
2010-07-30 12:46             ` Rafael J. Wysocki
2010-07-30 12:46             ` Rafael J. Wysocki
2010-07-30  6:24           ` [PATCH 5/6] PCI: portdrv: disable native hot-plug interrupt Kenji Kaneshige
2010-07-30  6:24           ` Kenji Kaneshige
2010-07-30  6:25           ` [PATCH 6/6] PCI: portdrv: remove module_exit Kenji Kaneshige
2010-07-30  6:25           ` Kenji Kaneshige
2010-07-30  6:16         ` [PATCH] PCI / PCIe: Ask BIOS for control of all native services at once (v4) Kenji Kaneshige
2010-07-30 11:50         ` Rafael J. Wysocki
2010-07-30 11:50         ` Rafael J. Wysocki
2010-07-30  6:00       ` Kenji Kaneshige
2010-07-28 21:43 ` Jesse Barnes
  -- strict thread matches above, loose matches on Subject: below --
2010-07-28 21:23 Rafael J. Wysocki

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=4C526A85.3070902@jp.fujitsu.com \
    --to=kaneshige.kenji@jp.fujitsu.com \
    --cc=jbarnes@virtuousgeek.org \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=mjg59@srcf.ucam.org \
    --cc=rjw@sisk.pl \
    --cc=seto.hidetoshi@jp.fujitsu.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 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.