2018-09-03 22:47:11

by Tomas Winkler

[permalink] [raw]
Subject: [stable v4.4.y 1/2] mei: me: allow runtime pm for platform with D0i3

commit cc365dcf0e56271bedf3de95f88922abe248e951 upstream.

>From the pci power documentation:
"The driver itself should not call pm_runtime_allow(), though. Instead,
it should let user space or some platform-specific code do that (user space
can do it via sysfs as stated above)..."

However, the S0ix residency cannot be reached without MEI device getting
into low power state. Hence, for mei devices that support D0i3, it's better
to make runtime power management mandatory and not rely on the system
integration such as udev rules.
This policy cannot be applied globally as some older platforms
were found to have broken power management.

Cc: <[email protected]> # 4.4
Cc: Rafael J. Wysocki <[email protected]>
Signed-off-by: Tomas Winkler <[email protected]>
Reviewed-by: Alexander Usyskin <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
drivers/misc/mei/pci-me.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c
index adab5bbb642a..d5b84d68f988 100644
--- a/drivers/misc/mei/pci-me.c
+++ b/drivers/misc/mei/pci-me.c
@@ -230,8 +230,11 @@ static int mei_me_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
if (!pci_dev_run_wake(pdev))
mei_me_set_pm_domain(dev);

- if (mei_pg_is_enabled(dev))
+ if (mei_pg_is_enabled(dev)) {
pm_runtime_put_noidle(&pdev->dev);
+ if (hw->d0i3_supported)
+ pm_runtime_allow(&pdev->dev);
+ }

dev_dbg(&pdev->dev, "initialization successful.\n");

--
2.14.4



2018-09-03 22:47:11

by Tomas Winkler

[permalink] [raw]
Subject: [char-misc v4.4.y 2/2] mei: bus: type promotion bug in mei_nfc_if_version()

From: Dan Carpenter <[email protected]>

commit b40b3e9358fbafff6a4ba0f4b9658f6617146f9c upstream

We accidentally removed the check for negative returns
without considering the issue of type promotion.
The "if_version_length" variable is type size_t so if __mei_cl_recv()
returns a negative then "bytes_recv" is type promoted
to a high positive value and treated as success.

Cc: <[email protected]> # 4.4
Fixes: 582ab27a063a ("mei: bus: fix received data size check in NFC fixup")
Signed-off-by: Dan Carpenter <[email protected]>
Signed-off-by: Tomas Winkler <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
drivers/misc/mei/bus-fixup.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/misc/mei/bus-fixup.c b/drivers/misc/mei/bus-fixup.c
index bdc7fcd80eca..9dcdc6f41ceb 100644
--- a/drivers/misc/mei/bus-fixup.c
+++ b/drivers/misc/mei/bus-fixup.c
@@ -151,7 +151,7 @@ static int mei_nfc_if_version(struct mei_cl *cl,

ret = 0;
bytes_recv = __mei_cl_recv(cl, (u8 *)reply, if_version_length);
- if (bytes_recv < if_version_length) {
+ if (bytes_recv < 0 || bytes_recv < if_version_length) {
dev_err(bus->dev, "Could not read IF version\n");
ret = -EIO;
goto err;
--
2.14.4


2018-09-13 12:37:53

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [char-misc v4.4.y 2/2] mei: bus: type promotion bug in mei_nfc_if_version()

On Tue, Sep 04, 2018 at 01:43:04AM +0300, Tomas Winkler wrote:
> From: Dan Carpenter <[email protected]>
>
> commit b40b3e9358fbafff6a4ba0f4b9658f6617146f9c upstream
>
> We accidentally removed the check for negative returns
> without considering the issue of type promotion.
> The "if_version_length" variable is type size_t so if __mei_cl_recv()
> returns a negative then "bytes_recv" is type promoted
> to a high positive value and treated as success.
>
> Cc: <[email protected]> # 4.4

I also need a version of this patch for 4.18.y, 4.14.y, and 4.9.y before
I will consider adding it to 4.4.y, as we do not want anyone to ever get
a regression moving to a new kernel.

thanks,

greg k-h

2018-09-23 05:50:49

by Tomas Winkler

[permalink] [raw]
Subject: RE: [char-misc v4.4.y 2/2] mei: bus: type promotion bug in mei_nfc_if_version()

>
> On Tue, Sep 04, 2018 at 01:43:04AM +0300, Tomas Winkler wrote:
> > From: Dan Carpenter <[email protected]>
> >
> > commit b40b3e9358fbafff6a4ba0f4b9658f6617146f9c upstream
> >
> > We accidentally removed the check for negative returns without
> > considering the issue of type promotion.
> > The "if_version_length" variable is type size_t so if __mei_cl_recv()
> > returns a negative then "bytes_recv" is type promoted to a high
> > positive value and treated as success.
> >
> > Cc: <[email protected]> # 4.4
>
> I also need a version of this patch for 4.18.y, 4.14.y, and 4.9.y before I will
> consider adding it to 4.4.y, as we do not want anyone to ever get a
> regression moving to a new kernel.

Right, I've started from the wrong end.
Now I've posted the patches for the rest of the required long running versions.

Thanks
Tomas


2018-09-24 10:54:26

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [char-misc v4.4.y 2/2] mei: bus: type promotion bug in mei_nfc_if_version()

On Sun, Sep 23, 2018 at 05:49:02AM +0000, Winkler, Tomas wrote:
> >
> > On Tue, Sep 04, 2018 at 01:43:04AM +0300, Tomas Winkler wrote:
> > > From: Dan Carpenter <[email protected]>
> > >
> > > commit b40b3e9358fbafff6a4ba0f4b9658f6617146f9c upstream
> > >
> > > We accidentally removed the check for negative returns without
> > > considering the issue of type promotion.
> > > The "if_version_length" variable is type size_t so if __mei_cl_recv()
> > > returns a negative then "bytes_recv" is type promoted to a high
> > > positive value and treated as success.
> > >
> > > Cc: <[email protected]> # 4.4
> >
> > I also need a version of this patch for 4.18.y, 4.14.y, and 4.9.y before I will
> > consider adding it to 4.4.y, as we do not want anyone to ever get a
> > regression moving to a new kernel.
>
> Right, I've started from the wrong end.
> Now I've posted the patches for the rest of the required long running versions.

Thanks for all of these, now queued up.

greg k-h