* [PATCH v2] x86/platform/intel-mid: Retrofit pci_platform_pm_ops ->get_state hook
@ 2016-10-09 12:46 Lukas Wunner
2016-10-09 15:01 ` Andy Shevchenko
2016-10-19 15:10 ` Bjorn Helgaas
0 siblings, 2 replies; 8+ messages in thread
From: Lukas Wunner @ 2016-10-09 12:46 UTC (permalink / raw)
To: Andy Shevchenko, Bjorn Helgaas; +Cc: linux-pci, x86
Commit cc7cc02bada8 ("PCI: Query platform firmware for device power
state") augmented struct pci_platform_pm_ops with a ->get_state hook and
implemented it for acpi_pci_platform_pm, the only pci_platform_pm_ops
existing till v4.7.
However v4.8 introduced another pci_platform_pm_ops for Intel Mobile
Internet Devices with commit 5823d0893ec2 ("x86/platform/intel-mid: Add
Power Management Unit driver"). It is missing the ->get_state hook,
which is fatal since pci_set_platform_pm() enforces its presence.
Retrofit mid_pci_platform_pm with the missing callback to fix the
breakage.
Cc: x86@kernel.org
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Acked-and-tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
Changes v1 -> v2:
- Cast return value of intel_mid_pci_get_power_state() to
(__force pci_power_t) to avoid "sparse -D__CHECK_ENDIAN__" warning.
arch/x86/include/asm/intel-mid.h | 1 +
arch/x86/platform/intel-mid/pwr.c | 19 +++++++++++++++++++
drivers/pci/pci-mid.c | 6 ++++++
3 files changed, 26 insertions(+)
diff --git a/arch/x86/include/asm/intel-mid.h b/arch/x86/include/asm/intel-mid.h
index 9d6b097..4511c10 100644
--- a/arch/x86/include/asm/intel-mid.h
+++ b/arch/x86/include/asm/intel-mid.h
@@ -17,6 +17,7 @@
extern int intel_mid_pci_init(void);
extern int intel_mid_pci_set_power_state(struct pci_dev *pdev, pci_power_t state);
+extern pci_power_t intel_mid_pci_get_power_state(struct pci_dev *pdev);
#define INTEL_MID_PWR_LSS_OFFSET 4
#define INTEL_MID_PWR_LSS_TYPE (1 << 7)
diff --git a/arch/x86/platform/intel-mid/pwr.c b/arch/x86/platform/intel-mid/pwr.c
index c901a34..cae8d9b 100644
--- a/arch/x86/platform/intel-mid/pwr.c
+++ b/arch/x86/platform/intel-mid/pwr.c
@@ -260,6 +260,25 @@ int intel_mid_pci_set_power_state(struct pci_dev *pdev, pci_power_t state)
}
EXPORT_SYMBOL_GPL(intel_mid_pci_set_power_state);
+pci_power_t intel_mid_pci_get_power_state(struct pci_dev *pdev)
+{
+ struct mid_pwr *pwr = midpwr;
+ int id, reg, bit;
+ u32 power;
+
+ if (!pwr || !pwr->available)
+ return PCI_UNKNOWN;
+
+ id = intel_mid_pwr_get_lss_id(pdev);
+ if (id < 0)
+ return PCI_UNKNOWN;
+
+ reg = (id * LSS_PWS_BITS) / 32;
+ bit = (id * LSS_PWS_BITS) % 32;
+ power = mid_pwr_get_state(pwr, reg);
+ return (__force pci_power_t)((power >> bit) & 3);
+}
+
int intel_mid_pwr_get_lss_id(struct pci_dev *pdev)
{
int vndr;
diff --git a/drivers/pci/pci-mid.c b/drivers/pci/pci-mid.c
index c878aa7..a8b52dc 100644
--- a/drivers/pci/pci-mid.c
+++ b/drivers/pci/pci-mid.c
@@ -29,6 +29,11 @@ static int mid_pci_set_power_state(struct pci_dev *pdev, pci_power_t state)
return intel_mid_pci_set_power_state(pdev, state);
}
+static pci_power_t mid_pci_get_power_state(struct pci_dev *pdev)
+{
+ return intel_mid_pci_get_power_state(pdev);
+}
+
static pci_power_t mid_pci_choose_state(struct pci_dev *pdev)
{
return PCI_D3hot;
@@ -52,6 +57,7 @@ static bool mid_pci_need_resume(struct pci_dev *dev)
static struct pci_platform_pm_ops mid_pci_platform_pm = {
.is_manageable = mid_pci_power_manageable,
.set_state = mid_pci_set_power_state,
+ .get_state = mid_pci_get_power_state,
.choose_state = mid_pci_choose_state,
.sleep_wake = mid_pci_sleep_wake,
.run_wake = mid_pci_run_wake,
--
2.9.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2] x86/platform/intel-mid: Retrofit pci_platform_pm_ops ->get_state hook
2016-10-09 12:46 [PATCH v2] x86/platform/intel-mid: Retrofit pci_platform_pm_ops ->get_state hook Lukas Wunner
@ 2016-10-09 15:01 ` Andy Shevchenko
2016-10-11 8:37 ` Ingo Molnar
2016-10-19 15:10 ` Bjorn Helgaas
1 sibling, 1 reply; 8+ messages in thread
From: Andy Shevchenko @ 2016-10-09 15:01 UTC (permalink / raw)
To: Lukas Wunner, Bjorn Helgaas; +Cc: linux-pci, x86, Ingo Molnar
On Sun, 2016-10-09 at 14:46 +0200, Lukas Wunner wrote:
> Commit cc7cc02bada8 ("PCI: Query platform firmware for device power
> state") augmented struct pci_platform_pm_ops with a ->get_state hook
> and
> implemented it for acpi_pci_platform_pm, the only pci_platform_pm_ops
> existing till v4.7.
>
> However v4.8 introduced another pci_platform_pm_ops for Intel Mobile
> Internet Devices with commit 5823d0893ec2 ("x86/platform/intel-mid:
> Add
> Power Management Unit driver"). It is missing the ->get_state hook,
> which is fatal since pci_set_platform_pm() enforces its presence.
>
> Retrofit mid_pci_platform_pm with the missing callback to fix the
> breakage.
>
+Ingo.
I guess it should go via tip/x86/urgent tree.
> Cc: x86@kernel.org
> Signed-off-by: Lukas Wunner <lukas@wunner.de>
> Acked-and-tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.co
> m>
> ---
> Changes v1 -> v2:
> - Cast return value of intel_mid_pci_get_power_state() to
> (__force pci_power_t) to avoid "sparse -D__CHECK_ENDIAN__" warning.
>
> arch/x86/include/asm/intel-mid.h | 1 +
> arch/x86/platform/intel-mid/pwr.c | 19 +++++++++++++++++++
> drivers/pci/pci-mid.c | 6 ++++++
> 3 files changed, 26 insertions(+)
>
> diff --git a/arch/x86/include/asm/intel-mid.h
> b/arch/x86/include/asm/intel-mid.h
> index 9d6b097..4511c10 100644
> --- a/arch/x86/include/asm/intel-mid.h
> +++ b/arch/x86/include/asm/intel-mid.h
> @@ -17,6 +17,7 @@
>
> extern int intel_mid_pci_init(void);
> extern int intel_mid_pci_set_power_state(struct pci_dev *pdev,
> pci_power_t state);
> +extern pci_power_t intel_mid_pci_get_power_state(struct pci_dev
> *pdev);
>
> #define INTEL_MID_PWR_LSS_OFFSET 4
> #define INTEL_MID_PWR_LSS_TYPE (1 << 7)
> diff --git a/arch/x86/platform/intel-mid/pwr.c
> b/arch/x86/platform/intel-mid/pwr.c
> index c901a34..cae8d9b 100644
> --- a/arch/x86/platform/intel-mid/pwr.c
> +++ b/arch/x86/platform/intel-mid/pwr.c
> @@ -260,6 +260,25 @@ int intel_mid_pci_set_power_state(struct pci_dev
> *pdev, pci_power_t state)
> }
> EXPORT_SYMBOL_GPL(intel_mid_pci_set_power_state);
>
> +pci_power_t intel_mid_pci_get_power_state(struct pci_dev *pdev)
> +{
> + struct mid_pwr *pwr = midpwr;
> + int id, reg, bit;
> + u32 power;
> +
> + if (!pwr || !pwr->available)
> + return PCI_UNKNOWN;
> +
> + id = intel_mid_pwr_get_lss_id(pdev);
> + if (id < 0)
> + return PCI_UNKNOWN;
> +
> + reg = (id * LSS_PWS_BITS) / 32;
> + bit = (id * LSS_PWS_BITS) % 32;
> + power = mid_pwr_get_state(pwr, reg);
> + return (__force pci_power_t)((power >> bit) & 3);
> +}
> +
> int intel_mid_pwr_get_lss_id(struct pci_dev *pdev)
> {
> int vndr;
> diff --git a/drivers/pci/pci-mid.c b/drivers/pci/pci-mid.c
> index c878aa7..a8b52dc 100644
> --- a/drivers/pci/pci-mid.c
> +++ b/drivers/pci/pci-mid.c
> @@ -29,6 +29,11 @@ static int mid_pci_set_power_state(struct pci_dev
> *pdev, pci_power_t state)
> return intel_mid_pci_set_power_state(pdev, state);
> }
>
> +static pci_power_t mid_pci_get_power_state(struct pci_dev *pdev)
> +{
> + return intel_mid_pci_get_power_state(pdev);
> +}
> +
> static pci_power_t mid_pci_choose_state(struct pci_dev *pdev)
> {
> return PCI_D3hot;
> @@ -52,6 +57,7 @@ static bool mid_pci_need_resume(struct pci_dev *dev)
> static struct pci_platform_pm_ops mid_pci_platform_pm = {
> .is_manageable = mid_pci_power_manageable,
> .set_state = mid_pci_set_power_state,
> + .get_state = mid_pci_get_power_state,
> .choose_state = mid_pci_choose_state,
> .sleep_wake = mid_pci_sleep_wake,
> .run_wake = mid_pci_run_wake,
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] x86/platform/intel-mid: Retrofit pci_platform_pm_ops ->get_state hook
2016-10-09 15:01 ` Andy Shevchenko
@ 2016-10-11 8:37 ` Ingo Molnar
2016-10-19 13:42 ` Andy Shevchenko
0 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2016-10-11 8:37 UTC (permalink / raw)
To: Andy Shevchenko, Bjorn Helgaas
Cc: Lukas Wunner, Bjorn Helgaas, linux-pci, x86, Ingo Molnar
* Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Sun, 2016-10-09 at 14:46 +0200, Lukas Wunner wrote:
> > Commit cc7cc02bada8 ("PCI: Query platform firmware for device power
> > state") augmented struct pci_platform_pm_ops with a ->get_state hook
> > and
> > implemented it for acpi_pci_platform_pm, the only pci_platform_pm_ops
> > existing till v4.7.
> >
> > However v4.8 introduced another pci_platform_pm_ops for Intel Mobile
> > Internet Devices with commit 5823d0893ec2 ("x86/platform/intel-mid:
> > Add
> > Power Management Unit driver"). It is missing the ->get_state hook,
> > which is fatal since pci_set_platform_pm() enforces its presence.
> >
> > Retrofit mid_pci_platform_pm with the missing callback to fix the
> > breakage.
> >
>
> +Ingo.
>
> I guess it should go via tip/x86/urgent tree.
Can do, if Bjorn is fine with it as well - the patch is touching
drivers/pci/pci-mid.c.
Thanks,
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] x86/platform/intel-mid: Retrofit pci_platform_pm_ops ->get_state hook
2016-10-11 8:37 ` Ingo Molnar
@ 2016-10-19 13:42 ` Andy Shevchenko
0 siblings, 0 replies; 8+ messages in thread
From: Andy Shevchenko @ 2016-10-19 13:42 UTC (permalink / raw)
To: Ingo Molnar, Bjorn Helgaas; +Cc: Lukas Wunner, linux-pci, x86, Ingo Molnar
On Tue, 2016-10-11 at 10:37 +0200, Ingo Molnar wrote:
> * Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>
> >
> > On Sun, 2016-10-09 at 14:46 +0200, Lukas Wunner wrote:
> > >
> > > Commit cc7cc02bada8 ("PCI: Query platform firmware for device
> > > power
> > > state") augmented struct pci_platform_pm_ops with a ->get_state
> > > hook
> > > and
> > > implemented it for acpi_pci_platform_pm, the only
> > > pci_platform_pm_ops
> > > existing till v4.7.
> > >
> > > However v4.8 introduced another pci_platform_pm_ops for Intel
> > > Mobile
> > > Internet Devices with commit 5823d0893ec2 ("x86/platform/intel-
> > > mid:
> > > Add
> > > Power Management Unit driver"). It is missing the ->get_state
> > > hook,
> > > which is fatal since pci_set_platform_pm() enforces its presence.
> > >
> > > Retrofit mid_pci_platform_pm with the missing callback to fix the
> > > breakage.
> > >
> >
> > +Ingo.
> >
> > I guess it should go via tip/x86/urgent tree.
>
> Can do, if Bjorn is fine with it as well - the patch is touching
> drivers/pci/pci-mid.c.
Bjorn, we are at 4.9-rc1 already and it has this regression. Can you,
please, ACK it?
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] x86/platform/intel-mid: Retrofit pci_platform_pm_ops ->get_state hook
2016-10-09 12:46 [PATCH v2] x86/platform/intel-mid: Retrofit pci_platform_pm_ops ->get_state hook Lukas Wunner
2016-10-09 15:01 ` Andy Shevchenko
@ 2016-10-19 15:10 ` Bjorn Helgaas
2016-10-19 15:48 ` Andy Shevchenko
1 sibling, 1 reply; 8+ messages in thread
From: Bjorn Helgaas @ 2016-10-19 15:10 UTC (permalink / raw)
To: Lukas Wunner; +Cc: Andy Shevchenko, Bjorn Helgaas, linux-pci, x86
On Sun, Oct 09, 2016 at 02:46:29PM +0200, Lukas Wunner wrote:
> Commit cc7cc02bada8 ("PCI: Query platform firmware for device power
> state") augmented struct pci_platform_pm_ops with a ->get_state hook and
> implemented it for acpi_pci_platform_pm, the only pci_platform_pm_ops
> existing till v4.7.
>
> However v4.8 introduced another pci_platform_pm_ops for Intel Mobile
> Internet Devices with commit 5823d0893ec2 ("x86/platform/intel-mid: Add
> Power Management Unit driver"). It is missing the ->get_state hook,
> which is fatal since pci_set_platform_pm() enforces its presence.
I assume Andy tested 5823d0893ec2, so apparently "fatal" here doesn't
mean a panic on the MIDs? I'm wondering (1) exactly what the user-
visible failure mode is, and (2) whether there's anything we can do to
avoid omissions like this in the future.
pci_set_platform_pm() does indeed return -EINVAL if it receives a
pci_platform_pm_ops with a NULL ops->get_state pointer, but
unfortunately neither of the callers checks that return code.
> Retrofit mid_pci_platform_pm with the missing callback to fix the
> breakage.
>
> Cc: x86@kernel.org
> Signed-off-by: Lukas Wunner <lukas@wunner.de>
> Acked-and-tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Fixes: 5823d0893ec2 ("x86/platform/intel-mid: Add Power Management Unit driver")
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Sounds like this should be marked for stable, since v4.8 contains
5823d0893ec2 and is apparently broken?
I agree this should go via the x86 tree, since that's how 5823d0893ec2
was merged.
> ---
> Changes v1 -> v2:
> - Cast return value of intel_mid_pci_get_power_state() to
> (__force pci_power_t) to avoid "sparse -D__CHECK_ENDIAN__" warning.
>
> arch/x86/include/asm/intel-mid.h | 1 +
> arch/x86/platform/intel-mid/pwr.c | 19 +++++++++++++++++++
> drivers/pci/pci-mid.c | 6 ++++++
> 3 files changed, 26 insertions(+)
>
> diff --git a/arch/x86/include/asm/intel-mid.h b/arch/x86/include/asm/intel-mid.h
> index 9d6b097..4511c10 100644
> --- a/arch/x86/include/asm/intel-mid.h
> +++ b/arch/x86/include/asm/intel-mid.h
> @@ -17,6 +17,7 @@
>
> extern int intel_mid_pci_init(void);
> extern int intel_mid_pci_set_power_state(struct pci_dev *pdev, pci_power_t state);
> +extern pci_power_t intel_mid_pci_get_power_state(struct pci_dev *pdev);
>
> #define INTEL_MID_PWR_LSS_OFFSET 4
> #define INTEL_MID_PWR_LSS_TYPE (1 << 7)
> diff --git a/arch/x86/platform/intel-mid/pwr.c b/arch/x86/platform/intel-mid/pwr.c
> index c901a34..cae8d9b 100644
> --- a/arch/x86/platform/intel-mid/pwr.c
> +++ b/arch/x86/platform/intel-mid/pwr.c
> @@ -260,6 +260,25 @@ int intel_mid_pci_set_power_state(struct pci_dev *pdev, pci_power_t state)
> }
> EXPORT_SYMBOL_GPL(intel_mid_pci_set_power_state);
>
> +pci_power_t intel_mid_pci_get_power_state(struct pci_dev *pdev)
> +{
> + struct mid_pwr *pwr = midpwr;
> + int id, reg, bit;
> + u32 power;
> +
> + if (!pwr || !pwr->available)
> + return PCI_UNKNOWN;
> +
> + id = intel_mid_pwr_get_lss_id(pdev);
> + if (id < 0)
> + return PCI_UNKNOWN;
> +
> + reg = (id * LSS_PWS_BITS) / 32;
> + bit = (id * LSS_PWS_BITS) % 32;
> + power = mid_pwr_get_state(pwr, reg);
> + return (__force pci_power_t)((power >> bit) & 3);
> +}
> +
> int intel_mid_pwr_get_lss_id(struct pci_dev *pdev)
> {
> int vndr;
> diff --git a/drivers/pci/pci-mid.c b/drivers/pci/pci-mid.c
> index c878aa7..a8b52dc 100644
> --- a/drivers/pci/pci-mid.c
> +++ b/drivers/pci/pci-mid.c
> @@ -29,6 +29,11 @@ static int mid_pci_set_power_state(struct pci_dev *pdev, pci_power_t state)
> return intel_mid_pci_set_power_state(pdev, state);
> }
>
> +static pci_power_t mid_pci_get_power_state(struct pci_dev *pdev)
> +{
> + return intel_mid_pci_get_power_state(pdev);
> +}
> +
> static pci_power_t mid_pci_choose_state(struct pci_dev *pdev)
> {
> return PCI_D3hot;
> @@ -52,6 +57,7 @@ static bool mid_pci_need_resume(struct pci_dev *dev)
> static struct pci_platform_pm_ops mid_pci_platform_pm = {
> .is_manageable = mid_pci_power_manageable,
> .set_state = mid_pci_set_power_state,
> + .get_state = mid_pci_get_power_state,
> .choose_state = mid_pci_choose_state,
> .sleep_wake = mid_pci_sleep_wake,
> .run_wake = mid_pci_run_wake,
> --
> 2.9.3
>
> --
> 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
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] x86/platform/intel-mid: Retrofit pci_platform_pm_ops ->get_state hook
2016-10-19 15:10 ` Bjorn Helgaas
@ 2016-10-19 15:48 ` Andy Shevchenko
2016-10-19 18:04 ` Lukas Wunner
0 siblings, 1 reply; 8+ messages in thread
From: Andy Shevchenko @ 2016-10-19 15:48 UTC (permalink / raw)
To: Bjorn Helgaas, Lukas Wunner; +Cc: Bjorn Helgaas, linux-pci, x86
On Wed, 2016-10-19 at 10:10 -0500, Bjorn Helgaas wrote:
> On Sun, Oct 09, 2016 at 02:46:29PM +0200, Lukas Wunner wrote:
> >
> > Commit cc7cc02bada8 ("PCI: Query platform firmware for device power
> > state") augmented struct pci_platform_pm_ops with a ->get_state hook
> > and
> > implemented it for acpi_pci_platform_pm, the only
> > pci_platform_pm_ops
> > existing till v4.7.
> >
> > However v4.8 introduced another pci_platform_pm_ops for Intel Mobile
> > Internet Devices with commit 5823d0893ec2 ("x86/platform/intel-mid:
> > Add
> > Power Management Unit driver"). It is missing the ->get_state hook,
> > which is fatal since pci_set_platform_pm() enforces its presence.
>
> I assume Andy tested 5823d0893ec2, so apparently "fatal" here doesn't
> mean a panic on the MIDs? I'm wondering (1) exactly what the user-
> visible failure mode is,
Fatal means it crashes without even a character printed out on serial
console and reboot (since watchdog).
> and (2) whether there's anything we can do to
> avoid omissions like this in the future.
It happened because the feature was developed in PCI subsystem namespace
(mailing lists, etc.) without knowing anything about new coming users. I
have no idea how to avoid this except browsing / grepping linux-next on
regular basis when developing either "feature" or "user" of the API in
question.
>
> pci_set_platform_pm() does indeed return -EINVAL if it receives a
> pci_platform_pm_ops with a NULL ops->get_state pointer, but
> unfortunately neither of the callers checks that return code.
Yeah.
>
> >
> > Retrofit mid_pci_platform_pm with the missing callback to fix the
> > breakage.
> >
> > Cc: x86@kernel.org
> > Signed-off-by: Lukas Wunner <lukas@wunner.de>
> > Acked-and-tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.
> > com>
>
> Fixes: 5823d0893ec2 ("x86/platform/intel-mid: Add Power Management
> Unit driver")
> Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Thanks!
> Sounds like this should be marked for stable, since v4.8 contains
> 5823d0893ec2 and is apparently broken?
At that point there was no "feature" commit in the tree. Perhaps the
Fixes tag should point to the "feature" commit instead. Am I right,
Lukas?
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] x86/platform/intel-mid: Retrofit pci_platform_pm_ops ->get_state hook
2016-10-19 15:48 ` Andy Shevchenko
@ 2016-10-19 18:04 ` Lukas Wunner
2016-10-22 15:31 ` Andy Shevchenko
0 siblings, 1 reply; 8+ messages in thread
From: Lukas Wunner @ 2016-10-19 18:04 UTC (permalink / raw)
To: Andy Shevchenko; +Cc: Bjorn Helgaas, linux-pci, x86
On Wed, Oct 19, 2016 at 06:48:01PM +0300, Andy Shevchenko wrote:
> On Wed, 2016-10-19 at 10:10 -0500, Bjorn Helgaas wrote:
> > On Sun, Oct 09, 2016 at 02:46:29PM +0200, Lukas Wunner wrote:
> > > Commit cc7cc02bada8 ("PCI: Query platform firmware for device power
> > > state") augmented struct pci_platform_pm_ops with a ->get_state hook
> > > and
> > > implemented it for acpi_pci_platform_pm, the only
> > > pci_platform_pm_ops
> > > existing till v4.7.
> > >
> > > However v4.8 introduced another pci_platform_pm_ops for Intel Mobile
> > > Internet Devices with commit 5823d0893ec2 ("x86/platform/intel-mid:
> > > Add
> > > Power Management Unit driver"). It is missing the ->get_state hook,
> > > which is fatal since pci_set_platform_pm() enforces its presence.
> >
> > I assume Andy tested 5823d0893ec2, so apparently "fatal" here doesn't
> > mean a panic on the MIDs? I'm wondering (1) exactly what the user-
> > visible failure mode is,
>
> Fatal means it crashes without even a character printed out on serial
> console and reboot (since watchdog).
>
> > and (2) whether there's anything we can do to
> > avoid omissions like this in the future.
>
> It happened because the feature was developed in PCI subsystem namespace
> (mailing lists, etc.) without knowing anything about new coming users. I
> have no idea how to avoid this except browsing / grepping linux-next on
> regular basis when developing either "feature" or "user" of the API in
> question.
Basically it was my fault because my development tree lags behind
mainline for technical reasons. I use ZFS for my root partition
and every new kernel release requires adjustments to the out-of-tree
ZoL. So before I can upgrade I have to either wait until the ZoL
folks make those adjustments or I have to make them myself (usually
I'm too lazy).
In this case I didn't rebase my tree on 4.8 until the merge window
for 4.9 had already opened, so I noticed the breakage fairly late.
However so far only 4.9-rc1 is broken and we still have like 7 weeks
to get the fix in.
> >
> > pci_set_platform_pm() does indeed return -EINVAL if it receives a
> > pci_platform_pm_ops with a NULL ops->get_state pointer, but
> > unfortunately neither of the callers checks that return code.
At least in the case of intel-mid it wouldn't matter if the return code
would be checked and passed up the call chain because the ultimate
callee, do_initcall_level(), doesn't check the return value of
do_one_initcall().
Perhaps the solution would be to not return -EINVAL but to throw a WARN
and limp on. That way the user or developer at least gets an error
message and knows what's wrong.
> > Fixes: 5823d0893ec2 ("x86/platform/intel-mid: Add Power Management
> > Unit driver")
> > Acked-by: Bjorn Helgaas <bhelgaas@google.com>
> >
> > Sounds like this should be marked for stable, since v4.8 contains
> > 5823d0893ec2 and is apparently broken?
>
> At that point there was no "feature" commit in the tree. Perhaps the
> Fixes tag should point to the "feature" commit instead. Am I right,
> Lukas?
Right, the Fixes tag should be:
Fixes: cc7cc02bada8 ("PCI: Query platform firmware for device power state")
And this shouldn't get backported to 4.8, the issue is only present
in 4.9-rc1 so far.
@Ingo: Do you want me to repost with Bjorn's ack and the correct Fixes: tag?
Thanks!
Lukas
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] x86/platform/intel-mid: Retrofit pci_platform_pm_ops ->get_state hook
2016-10-19 18:04 ` Lukas Wunner
@ 2016-10-22 15:31 ` Andy Shevchenko
0 siblings, 0 replies; 8+ messages in thread
From: Andy Shevchenko @ 2016-10-22 15:31 UTC (permalink / raw)
To: Lukas Wunner; +Cc: Bjorn Helgaas, linux-pci, x86
On Wed, 2016-10-19 at 20:04 +0200, Lukas Wunner wrote:
> On Wed, Oct 19, 2016 at 06:48:01PM +0300, Andy Shevchenko wrote:
> > On Wed, 2016-10-19 at 10:10 -0500, Bjorn Helgaas wrote:
> > > On Sun, Oct 09, 2016 at 02:46:29PM +0200, Lukas Wunner wrote:
> However so far only 4.9-rc1 is broken and we still have like 7 weeks
> to get the fix in.
One week less. :-)
> > > Fixes: 5823d0893ec2 ("x86/platform/intel-mid: Add Power Management
> > > Unit driver")
> > > Acked-by: Bjorn Helgaas <bhelgaas@google.com>
> > >
> > > Sounds like this should be marked for stable, since v4.8 contains
> > > 5823d0893ec2 and is apparently broken?
> >
> > At that point there was no "feature" commit in the tree. Perhaps the
> > Fixes tag should point to the "feature" commit instead. Am I right,
> > Lukas?
>
> Right, the Fixes tag should be:
>
> Fixes: cc7cc02bada8 ("PCI: Query platform firmware for device power
> state")
>
> And this shouldn't get backported to 4.8, the issue is only present
> in 4.9-rc1 so far.
>
> @Ingo: Do you want me to repost with Bjorn's ack and the correct
> Fixes: tag?
I didn't noticed the patch in last urgent pull request, so, I assume you
need to send v3.
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2016-10-22 15:31 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-09 12:46 [PATCH v2] x86/platform/intel-mid: Retrofit pci_platform_pm_ops ->get_state hook Lukas Wunner
2016-10-09 15:01 ` Andy Shevchenko
2016-10-11 8:37 ` Ingo Molnar
2016-10-19 13:42 ` Andy Shevchenko
2016-10-19 15:10 ` Bjorn Helgaas
2016-10-19 15:48 ` Andy Shevchenko
2016-10-19 18:04 ` Lukas Wunner
2016-10-22 15:31 ` Andy Shevchenko
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.