Linux v4.5-4071-g10fdfee7f7fd
- input, livepatching, trivial, hid, gpio, m68knommu, arm64, selftest merges
This commit is contained in:
parent
8b7fda18c9
commit
1dea4eb579
@ -1,52 +0,0 @@
|
|||||||
From e2fea58e57993ab2ed011eb35a034507347336ed Mon Sep 17 00:00:00 2001
|
|
||||||
From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
|
|
||||||
Date: Thu, 17 Mar 2016 15:07:16 +0100
|
|
||||||
Subject: [PATCH] Temp fix for intel_pstate oopses and lockdep report with
|
|
||||||
Linux v4.5-1822-g63e30271b04c
|
|
||||||
|
|
||||||
On Thursday, March 17, 2016 09:02:29 AM Josh Boyer wrote:
|
|
||||||
> Hello,
|
|
||||||
|
|
||||||
Hi,
|
|
||||||
|
|
||||||
> I have an Intel Atom based NUC that is producing the following
|
|
||||||
> backtraces on boot of Linus' tree as of last evening. This does not
|
|
||||||
> happen with a tree with top level commit 271ecc5253e2, but does happen
|
|
||||||
> when using the tree mentioned in the subject with top level commit
|
|
||||||
> 63e30271b04c.
|
|
||||||
>
|
|
||||||
> The first backtrace appears to be a warning because the intel_pstate
|
|
||||||
> driver is calling wrmsrl_on_cpu when interrupts are disabled? Not
|
|
||||||
> sure on that one.
|
|
||||||
>
|
|
||||||
> The second backtrace is a lockdep report. Both are from the same boot.
|
|
||||||
|
|
||||||
OK, thanks for the report.
|
|
||||||
|
|
||||||
Can you please try the patch below?
|
|
||||||
|
|
||||||
I'm actually unsure if we can do that safely in general for Atom because
|
|
||||||
of the initialization, but that's what Core does anyway.
|
|
||||||
|
|
||||||
Srinivas, Philippe, why exactly do we need the wrmsrl_on_cpu() in
|
|
||||||
atom_set_pstate()? core_set_pstate() uses wrmsrl() and seems to be doing fine.
|
|
||||||
---
|
|
||||||
drivers/cpufreq/intel_pstate.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
|
|
||||||
index cb5607495816..32d5d6456290 100644
|
|
||||||
--- a/drivers/cpufreq/intel_pstate.c
|
|
||||||
+++ b/drivers/cpufreq/intel_pstate.c
|
|
||||||
@@ -587,7 +587,7 @@ static void atom_set_pstate(struct cpudata *cpudata, int pstate)
|
|
||||||
|
|
||||||
val |= vid;
|
|
||||||
|
|
||||||
- wrmsrl_on_cpu(cpudata->cpu, MSR_IA32_PERF_CTL, val);
|
|
||||||
+ wrmsrl(MSR_IA32_PERF_CTL, val);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int silvermont_get_scaling(void)
|
|
||||||
--
|
|
||||||
2.5.0
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
From 47f6b5c281137394d627e275cb80980492d00d84 Mon Sep 17 00:00:00 2001
|
From 24ceffbbe2764a31328e1146a2cf4bdcf85664e7 Mon Sep 17 00:00:00 2001
|
||||||
From: Dave Howells <dhowells@redhat.com>
|
From: Dave Howells <dhowells@redhat.com>
|
||||||
Date: Tue, 23 Oct 2012 09:30:54 -0400
|
Date: Tue, 23 Oct 2012 09:30:54 -0400
|
||||||
Subject: [PATCH 15/20] Add EFI signature data types
|
Subject: [PATCH] Add EFI signature data types
|
||||||
|
|
||||||
Add the data types that are used for containing hashes, keys and certificates
|
Add the data types that are used for containing hashes, keys and certificates
|
||||||
for cryptographic verification.
|
for cryptographic verification.
|
||||||
@ -15,12 +15,12 @@ Signed-off-by: David Howells <dhowells@redhat.com>
|
|||||||
1 file changed, 20 insertions(+)
|
1 file changed, 20 insertions(+)
|
||||||
|
|
||||||
diff --git a/include/linux/efi.h b/include/linux/efi.h
|
diff --git a/include/linux/efi.h b/include/linux/efi.h
|
||||||
index 4dc970e..82d6218 100644
|
index 333d0ca6940f..b3efb6d06344 100644
|
||||||
--- a/include/linux/efi.h
|
--- a/include/linux/efi.h
|
||||||
+++ b/include/linux/efi.h
|
+++ b/include/linux/efi.h
|
||||||
@@ -599,6 +599,12 @@ void efi_native_runtime_setup(void);
|
@@ -603,6 +603,12 @@ void efi_native_runtime_setup(void);
|
||||||
#define EFI_PROPERTIES_TABLE_GUID \
|
EFI_GUID(0x3152bca5, 0xeade, 0x433d, \
|
||||||
EFI_GUID( 0x880aaca3, 0x4adc, 0x4a04, 0x90, 0x79, 0xb7, 0x47, 0x34, 0x08, 0x25, 0xe5 )
|
0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44)
|
||||||
|
|
||||||
+#define EFI_CERT_SHA256_GUID \
|
+#define EFI_CERT_SHA256_GUID \
|
||||||
+ EFI_GUID( 0xc1c41626, 0x504c, 0x4092, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28 )
|
+ EFI_GUID( 0xc1c41626, 0x504c, 0x4092, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28 )
|
||||||
@ -31,7 +31,7 @@ index 4dc970e..82d6218 100644
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
efi_guid_t guid;
|
efi_guid_t guid;
|
||||||
u64 table;
|
u64 table;
|
||||||
@@ -823,6 +829,20 @@ typedef struct {
|
@@ -827,6 +833,20 @@ typedef struct {
|
||||||
|
|
||||||
#define EFI_INVALID_TABLE_ADDR (~0UL)
|
#define EFI_INVALID_TABLE_ADDR (~0UL)
|
||||||
|
|
||||||
|
@ -1,49 +0,0 @@
|
|||||||
From 954d6154959c8c196fa4b89fc98a4fb377c6a38d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
|
||||||
Date: Fri, 8 Jan 2016 17:58:49 +0100
|
|
||||||
Subject: [PATCH] HID: sony: do not bail out when the sixaxis refuses the
|
|
||||||
output report
|
|
||||||
|
|
||||||
When setting the operational mode, some third party (Speedlink Strike-FX)
|
|
||||||
gamepads refuse the output report. Failing here means we refuse to
|
|
||||||
initialize the gamepad while this should be harmless.
|
|
||||||
|
|
||||||
The weird part is that the initial commit that added this: a7de9b8
|
|
||||||
("HID: sony: Enable Gasia third-party PS3 controllers") mentions this
|
|
||||||
very same controller as one requiring this output report.
|
|
||||||
Anyway, it's broken for one user at least, so let's change it.
|
|
||||||
We will report an error, but at least the controller should work.
|
|
||||||
|
|
||||||
And no, these devices present themselves as legacy Sony controllers
|
|
||||||
(VID:PID of 054C:0268, as in the official ones) so there are no ways
|
|
||||||
of discriminating them from the official ones.
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1255325
|
|
||||||
|
|
||||||
Reported-and-tested-by: Max Fedotov <thesourcehim@gmail.com>
|
|
||||||
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
|
||||||
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
|
||||||
---
|
|
||||||
drivers/hid/hid-sony.c | 6 ++++--
|
|
||||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
|
|
||||||
index 661f94f8ab8b..11f91c0c2458 100644
|
|
||||||
--- a/drivers/hid/hid-sony.c
|
|
||||||
+++ b/drivers/hid/hid-sony.c
|
|
||||||
@@ -1411,8 +1411,10 @@ static int sixaxis_set_operational_usb(struct hid_device *hdev)
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = hid_hw_output_report(hdev, buf, 1);
|
|
||||||
- if (ret < 0)
|
|
||||||
- hid_err(hdev, "can't set operational mode: step 3\n");
|
|
||||||
+ if (ret < 0) {
|
|
||||||
+ hid_info(hdev, "can't set operational mode: step 3, ignoring\n");
|
|
||||||
+ ret = 0;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
out:
|
|
||||||
kfree(buf);
|
|
||||||
--
|
|
||||||
2.5.0
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
|||||||
From 0383ff3ba89d3e6c604138e3ba46685621d71f98 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Josh Boyer <jwboyer@fedoraproject.org>
|
|
||||||
Date: Mon, 14 Mar 2016 10:02:51 -0400
|
|
||||||
Subject: [PATCH] USB: input: powermate: fix oops with malicious USB
|
|
||||||
descriptors
|
|
||||||
|
|
||||||
The powermate driver expects at least one valid USB endpoint in its
|
|
||||||
probe function. If given malicious descriptors that specify 0 for
|
|
||||||
the number of endpoints, it will crash. Validate the number of
|
|
||||||
endpoints on the interface before using them.
|
|
||||||
|
|
||||||
The full report for this issue can be found here:
|
|
||||||
http://seclists.org/bugtraq/2016/Mar/85
|
|
||||||
|
|
||||||
Reported-by: Ralf Spenneberg <ralf@spenneberg.net>
|
|
||||||
Cc: stable <stable@vger.kernel.org>
|
|
||||||
Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
|
|
||||||
---
|
|
||||||
drivers/input/misc/powermate.c | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/drivers/input/misc/powermate.c b/drivers/input/misc/powermate.c
|
|
||||||
index 63b539d3daba..84909a12ff36 100644
|
|
||||||
--- a/drivers/input/misc/powermate.c
|
|
||||||
+++ b/drivers/input/misc/powermate.c
|
|
||||||
@@ -307,6 +307,9 @@ static int powermate_probe(struct usb_interface *intf, const struct usb_device_i
|
|
||||||
int error = -ENOMEM;
|
|
||||||
|
|
||||||
interface = intf->cur_altsetting;
|
|
||||||
+ if (interface->desc.bNumEndpoints < 1)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
endpoint = &interface->endpoint[0].desc;
|
|
||||||
if (!usb_endpoint_is_int_in(endpoint))
|
|
||||||
return -EIO;
|
|
||||||
--
|
|
||||||
2.5.0
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
From ede02df9a481ba07348e6fd4393ba2e273ef16d8 Mon Sep 17 00:00:00 2001
|
From ce7a9e482dcf66d155e74b39ada1708cf6d9cb25 Mon Sep 17 00:00:00 2001
|
||||||
From: Mark Salter <msalter@redhat.com>
|
From: Mark Salter <msalter@redhat.com>
|
||||||
Date: Wed, 25 Mar 2015 14:17:50 -0400
|
Date: Wed, 25 Mar 2015 14:17:50 -0400
|
||||||
Subject: [PATCH] arm64: avoid needing console= to enable serial console
|
Subject: [PATCH] arm64: avoid needing console= to enable serial console
|
||||||
@ -11,17 +11,17 @@ firmware.
|
|||||||
|
|
||||||
Signed-off-by: Mark Salter <msalter@redhat.com>
|
Signed-off-by: Mark Salter <msalter@redhat.com>
|
||||||
---
|
---
|
||||||
arch/arm64/kernel/setup.c | 19 +++++++++++++++++++
|
arch/arm64/kernel/setup.c | 20 ++++++++++++++++++++
|
||||||
1 file changed, 19 insertions(+)
|
1 file changed, 20 insertions(+)
|
||||||
|
|
||||||
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
|
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
|
||||||
index 8119479..ea9ff80 100644
|
index 9dc67769b6a4..dfac33b47423 100644
|
||||||
--- a/arch/arm64/kernel/setup.c
|
--- a/arch/arm64/kernel/setup.c
|
||||||
+++ b/arch/arm64/kernel/setup.c
|
+++ b/arch/arm64/kernel/setup.c
|
||||||
@@ -381,3 +381,22 @@ static int __init topology_init(void)
|
@@ -417,3 +417,22 @@ static int __init register_kernel_offset_dumper(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
subsys_initcall(topology_init);
|
__initcall(register_kernel_offset_dumper);
|
||||||
+
|
+
|
||||||
+/*
|
+/*
|
||||||
+ * Temporary hack to avoid need for console= on command line
|
+ * Temporary hack to avoid need for console= on command line
|
||||||
|
@ -36,6 +36,7 @@ CONFIG_ARM64_ERRATUM_843419=y
|
|||||||
CONFIG_ARM64_ERRATUM_834220=y
|
CONFIG_ARM64_ERRATUM_834220=y
|
||||||
CONFIG_CAVIUM_ERRATUM_22375=y
|
CONFIG_CAVIUM_ERRATUM_22375=y
|
||||||
CONFIG_CAVIUM_ERRATUM_23154=y
|
CONFIG_CAVIUM_ERRATUM_23154=y
|
||||||
|
CONFIG_CAVIUM_ERRATUM_27456=y
|
||||||
|
|
||||||
# AMBA / VExpress
|
# AMBA / VExpress
|
||||||
# CONFIG_RTC_DRV_PL030 is not set
|
# CONFIG_RTC_DRV_PL030 is not set
|
||||||
@ -51,6 +52,13 @@ CONFIG_ARM64_HW_AFDBM=y
|
|||||||
CONFIG_ARM64_PAN=y
|
CONFIG_ARM64_PAN=y
|
||||||
CONFIG_ARM64_LSE_ATOMICS=y
|
CONFIG_ARM64_LSE_ATOMICS=y
|
||||||
CONFIG_ARM64_VHE=y
|
CONFIG_ARM64_VHE=y
|
||||||
|
CONFIG_ARM64_UAO=y
|
||||||
|
|
||||||
|
# Have ARM team revisit
|
||||||
|
# CONFIG_RELOCATABLE is not set
|
||||||
|
# CONFIG_RANDOMIZE_BASE is not set
|
||||||
|
|
||||||
|
CONFIG_ARM64_ACPI_PARKING_PROTOCOL=y
|
||||||
|
|
||||||
CONFIG_BCMA_POSSIBLE=y
|
CONFIG_BCMA_POSSIBLE=y
|
||||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
|
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
|
||||||
|
@ -2542,6 +2542,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
|
|||||||
# CONFIG_TOUCHSCREEN_FT6236 is not set
|
# CONFIG_TOUCHSCREEN_FT6236 is not set
|
||||||
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
|
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
|
||||||
# CONFIG_TOUCHSCREEN_TSC2004 is not set
|
# CONFIG_TOUCHSCREEN_TSC2004 is not set
|
||||||
|
# CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set
|
||||||
|
|
||||||
CONFIG_INPUT_MISC=y
|
CONFIG_INPUT_MISC=y
|
||||||
CONFIG_INPUT_E3X0_BUTTON=m
|
CONFIG_INPUT_E3X0_BUTTON=m
|
||||||
@ -2566,6 +2567,13 @@ CONFIG_INPUT_MPU3050=m
|
|||||||
CONFIG_INPUT_KXTJ9=m
|
CONFIG_INPUT_KXTJ9=m
|
||||||
# CONFIG_INPUT_KXTJ9_POLLED_MODE is not set
|
# CONFIG_INPUT_KXTJ9_POLLED_MODE is not set
|
||||||
|
|
||||||
|
CONFIG_RMI4_CORE=m
|
||||||
|
CONFIG_RMI4_I2C=m
|
||||||
|
CONFIG_RMI4_F11=y
|
||||||
|
CONFIG_RMI4_F12=y
|
||||||
|
CONFIG_RMI4_F30=y
|
||||||
|
CONFIG_RMI4_SPI=m
|
||||||
|
|
||||||
#
|
#
|
||||||
# Character devices
|
# Character devices
|
||||||
#
|
#
|
||||||
@ -4083,6 +4091,7 @@ CONFIG_HID_APPLEIR=m
|
|||||||
CONFIG_HID_LENOVO=m
|
CONFIG_HID_LENOVO=m
|
||||||
CONFIG_HID_CORSAIR=m
|
CONFIG_HID_CORSAIR=m
|
||||||
CONFIG_HID_GFRM=m
|
CONFIG_HID_GFRM=m
|
||||||
|
CONFIG_HID_CMEDIA=m
|
||||||
|
|
||||||
#
|
#
|
||||||
# USB Imaging devices
|
# USB Imaging devices
|
||||||
@ -4432,6 +4441,8 @@ CONFIG_MFD_VIPERBOARD=m
|
|||||||
# CONFIG_MFD_CROS_EC is not set
|
# CONFIG_MFD_CROS_EC is not set
|
||||||
# CONFIG_MFD_SI476X_CORE is not set
|
# CONFIG_MFD_SI476X_CORE is not set
|
||||||
# CONFIG_MFD_TPS65912 is not set
|
# CONFIG_MFD_TPS65912 is not set
|
||||||
|
# CONFIG_MFD_TPS65912_SPI is not set
|
||||||
|
# CONFIG_MFD_TPS65912_I2C is not set
|
||||||
# CONFIG_MFD_SYSCON is not set
|
# CONFIG_MFD_SYSCON is not set
|
||||||
# CONFIG_MFD_DA9063 is not set
|
# CONFIG_MFD_DA9063 is not set
|
||||||
# CONFIG_MFD_DLN2 is not set
|
# CONFIG_MFD_DLN2 is not set
|
||||||
@ -4441,7 +4452,6 @@ CONFIG_MFD_VIPERBOARD=m
|
|||||||
# CONFIG_MFD_TPS65218 is not set
|
# CONFIG_MFD_TPS65218 is not set
|
||||||
# CONFIG_MFD_WM831X_SPI is not set
|
# CONFIG_MFD_WM831X_SPI is not set
|
||||||
# CONFIG_MFD_ARIZONA_SPI is not set
|
# CONFIG_MFD_ARIZONA_SPI is not set
|
||||||
# CONFIG_MFD_TPS65912_SPI is not set
|
|
||||||
# CONFIG_MFD_MC13XXX_SPI is not set
|
# CONFIG_MFD_MC13XXX_SPI is not set
|
||||||
# CONFIG_MFD_DA9052_SPI is not set
|
# CONFIG_MFD_DA9052_SPI is not set
|
||||||
# CONFIG_MFD_MENF21BMC is not set
|
# CONFIG_MFD_MENF21BMC is not set
|
||||||
@ -5768,6 +5778,13 @@ CONFIG_GPIO_VIPERBOARD=m
|
|||||||
# CONFIG_GPIO_AMDPT is not set
|
# CONFIG_GPIO_AMDPT is not set
|
||||||
# CONFIG_GPIO_104_IDIO_16 is not set
|
# CONFIG_GPIO_104_IDIO_16 is not set
|
||||||
# CONFIG_GPIO_IT87 is not set
|
# CONFIG_GPIO_IT87 is not set
|
||||||
|
# CONFIG_GPIO_TPIC2810 is not set
|
||||||
|
# CONFIG_GPIO_MPC8XXX is not set
|
||||||
|
# CONFIG_GPIO_PISOSR is not set
|
||||||
|
# CONFIG_GPIO_TS4800 is not set
|
||||||
|
# CONFIG_GPIO_TPS65218 is not set
|
||||||
|
# CONFIG_GPIO_104_DIO_48E is not set
|
||||||
|
# CONFIG_GPIO_WS16C48 is not set
|
||||||
|
|
||||||
# FIXME: Why?
|
# FIXME: Why?
|
||||||
|
|
||||||
|
2
gitrev
2
gitrev
@ -1 +1 @@
|
|||||||
5cd0911a9e0e408f28079a5e36a981217bf47520
|
10fdfee7f7fd8d4a6a8455ac4c9fbbc51d79b9f7
|
||||||
|
241
intel_pstate-Do-not-call-wrmsrl_on_cpu-with-disabled.patch
Normal file
241
intel_pstate-Do-not-call-wrmsrl_on_cpu-with-disabled.patch
Normal file
@ -0,0 +1,241 @@
|
|||||||
|
From c517e903c4dbc9271b3cfb43b27d303dd6f03cd7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
|
||||||
|
Date: Fri, 18 Mar 2016 15:36:25 +0100
|
||||||
|
Subject: [PATCH] intel_pstate: Do not call wrmsrl_on_cpu() with disabled
|
||||||
|
interrupts
|
||||||
|
|
||||||
|
After commit a4675fbc4a7a (cpufreq: intel_pstate: Replace timers with
|
||||||
|
utilization update callbacks) wrmsrl_on_cpu() cannot be called in the
|
||||||
|
intel_pstate_adjust_busy_pstate() path as that is executed with
|
||||||
|
disabled interrupts. However, atom_set_pstate() called from there
|
||||||
|
via intel_pstate_set_pstate() uses wrmsrl_on_cpu() to update the
|
||||||
|
IA32_PERF_CTL MSR which triggers the WARN_ON_ONCE() in
|
||||||
|
smp_call_function_single().
|
||||||
|
|
||||||
|
The reason why wrmsrl_on_cpu() is used by atom_set_pstate() is
|
||||||
|
because intel_pstate_set_pstate() calling it is also invoked during
|
||||||
|
the initialization and cleanup of the driver and in those cases it is
|
||||||
|
not guaranteed to be run on the CPU that is being updated. However,
|
||||||
|
in the case when intel_pstate_set_pstate() is called by
|
||||||
|
intel_pstate_adjust_busy_pstate(), wrmsrl() can be used to update
|
||||||
|
the register safely. Moreover, intel_pstate_set_pstate() already
|
||||||
|
contains code that only is executed if the function is called by
|
||||||
|
intel_pstate_adjust_busy_pstate() and there is a special argument
|
||||||
|
passed to it because of that.
|
||||||
|
|
||||||
|
To fix the problem at hand, rearrange the code taking the above
|
||||||
|
observations into account.
|
||||||
|
|
||||||
|
First, replace the ->set() callback in struct pstate_funcs with a
|
||||||
|
->get_val() one that will return the value to be written to the
|
||||||
|
IA32_PERF_CTL MSR without updating the register.
|
||||||
|
|
||||||
|
Second, split intel_pstate_set_pstate() into two functions,
|
||||||
|
intel_pstate_update_pstate() to be called by
|
||||||
|
intel_pstate_adjust_busy_pstate() that will contain all of the
|
||||||
|
intel_pstate_set_pstate() code which only needs to be executed in
|
||||||
|
that case and will use wrmsrl() to update the MSR (after obtaining
|
||||||
|
the value to write to it from the ->get_val() callback), and
|
||||||
|
intel_pstate_set_min_pstate() to be invoked during the
|
||||||
|
initialization and cleanup that will set the P-state to the
|
||||||
|
minimum one and will update the MSR using wrmsrl_on_cpu().
|
||||||
|
|
||||||
|
Finally, move the code shared between intel_pstate_update_pstate()
|
||||||
|
and intel_pstate_set_min_pstate() to a new static inline function
|
||||||
|
intel_pstate_record_pstate() and make them both call it.
|
||||||
|
|
||||||
|
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||||
|
Fixes: a4675fbc4a7a (cpufreq: intel_pstate: Replace timers with utilization update callbacks)
|
||||||
|
---
|
||||||
|
drivers/cpufreq/intel_pstate.c | 73 +++++++++++++++++++++++++-----------------
|
||||||
|
1 file changed, 43 insertions(+), 30 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
|
||||||
|
index cb5607495816..4b644526fd59 100644
|
||||||
|
--- a/drivers/cpufreq/intel_pstate.c
|
||||||
|
+++ b/drivers/cpufreq/intel_pstate.c
|
||||||
|
@@ -134,7 +134,7 @@ struct pstate_funcs {
|
||||||
|
int (*get_min)(void);
|
||||||
|
int (*get_turbo)(void);
|
||||||
|
int (*get_scaling)(void);
|
||||||
|
- void (*set)(struct cpudata*, int pstate);
|
||||||
|
+ u64 (*get_val)(struct cpudata*, int pstate);
|
||||||
|
void (*get_vid)(struct cpudata *);
|
||||||
|
int32_t (*get_target_pstate)(struct cpudata *);
|
||||||
|
};
|
||||||
|
@@ -565,7 +565,7 @@ static int atom_get_turbo_pstate(void)
|
||||||
|
return value & 0x7F;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void atom_set_pstate(struct cpudata *cpudata, int pstate)
|
||||||
|
+static u64 atom_get_val(struct cpudata *cpudata, int pstate)
|
||||||
|
{
|
||||||
|
u64 val;
|
||||||
|
int32_t vid_fp;
|
||||||
|
@@ -585,9 +585,7 @@ static void atom_set_pstate(struct cpudata *cpudata, int pstate)
|
||||||
|
if (pstate > cpudata->pstate.max_pstate)
|
||||||
|
vid = cpudata->vid.turbo;
|
||||||
|
|
||||||
|
- val |= vid;
|
||||||
|
-
|
||||||
|
- wrmsrl_on_cpu(cpudata->cpu, MSR_IA32_PERF_CTL, val);
|
||||||
|
+ return val | vid;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int silvermont_get_scaling(void)
|
||||||
|
@@ -711,7 +709,7 @@ static inline int core_get_scaling(void)
|
||||||
|
return 100000;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void core_set_pstate(struct cpudata *cpudata, int pstate)
|
||||||
|
+static u64 core_get_val(struct cpudata *cpudata, int pstate)
|
||||||
|
{
|
||||||
|
u64 val;
|
||||||
|
|
||||||
|
@@ -719,7 +717,7 @@ static void core_set_pstate(struct cpudata *cpudata, int pstate)
|
||||||
|
if (limits->no_turbo && !limits->turbo_disabled)
|
||||||
|
val |= (u64)1 << 32;
|
||||||
|
|
||||||
|
- wrmsrl(MSR_IA32_PERF_CTL, val);
|
||||||
|
+ return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int knl_get_turbo_pstate(void)
|
||||||
|
@@ -750,7 +748,7 @@ static struct cpu_defaults core_params = {
|
||||||
|
.get_min = core_get_min_pstate,
|
||||||
|
.get_turbo = core_get_turbo_pstate,
|
||||||
|
.get_scaling = core_get_scaling,
|
||||||
|
- .set = core_set_pstate,
|
||||||
|
+ .get_val = core_get_val,
|
||||||
|
.get_target_pstate = get_target_pstate_use_performance,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
@@ -769,7 +767,7 @@ static struct cpu_defaults silvermont_params = {
|
||||||
|
.get_max_physical = atom_get_max_pstate,
|
||||||
|
.get_min = atom_get_min_pstate,
|
||||||
|
.get_turbo = atom_get_turbo_pstate,
|
||||||
|
- .set = atom_set_pstate,
|
||||||
|
+ .get_val = atom_get_val,
|
||||||
|
.get_scaling = silvermont_get_scaling,
|
||||||
|
.get_vid = atom_get_vid,
|
||||||
|
.get_target_pstate = get_target_pstate_use_cpu_load,
|
||||||
|
@@ -790,7 +788,7 @@ static struct cpu_defaults airmont_params = {
|
||||||
|
.get_max_physical = atom_get_max_pstate,
|
||||||
|
.get_min = atom_get_min_pstate,
|
||||||
|
.get_turbo = atom_get_turbo_pstate,
|
||||||
|
- .set = atom_set_pstate,
|
||||||
|
+ .get_val = atom_get_val,
|
||||||
|
.get_scaling = airmont_get_scaling,
|
||||||
|
.get_vid = atom_get_vid,
|
||||||
|
.get_target_pstate = get_target_pstate_use_cpu_load,
|
||||||
|
@@ -812,7 +810,7 @@ static struct cpu_defaults knl_params = {
|
||||||
|
.get_min = core_get_min_pstate,
|
||||||
|
.get_turbo = knl_get_turbo_pstate,
|
||||||
|
.get_scaling = core_get_scaling,
|
||||||
|
- .set = core_set_pstate,
|
||||||
|
+ .get_val = core_get_val,
|
||||||
|
.get_target_pstate = get_target_pstate_use_performance,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
@@ -839,25 +837,24 @@ static void intel_pstate_get_min_max(struct cpudata *cpu, int *min, int *max)
|
||||||
|
*min = clamp_t(int, min_perf, cpu->pstate.min_pstate, max_perf);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate, bool force)
|
||||||
|
+static inline void intel_pstate_record_pstate(struct cpudata *cpu, int pstate)
|
||||||
|
{
|
||||||
|
- int max_perf, min_perf;
|
||||||
|
-
|
||||||
|
- if (force) {
|
||||||
|
- update_turbo_state();
|
||||||
|
-
|
||||||
|
- intel_pstate_get_min_max(cpu, &min_perf, &max_perf);
|
||||||
|
-
|
||||||
|
- pstate = clamp_t(int, pstate, min_perf, max_perf);
|
||||||
|
-
|
||||||
|
- if (pstate == cpu->pstate.current_pstate)
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
trace_cpu_frequency(pstate * cpu->pstate.scaling, cpu->cpu);
|
||||||
|
-
|
||||||
|
cpu->pstate.current_pstate = pstate;
|
||||||
|
+}
|
||||||
|
|
||||||
|
- pstate_funcs.set(cpu, pstate);
|
||||||
|
+static void intel_pstate_set_min_pstate(struct cpudata *cpu)
|
||||||
|
+{
|
||||||
|
+ int pstate = cpu->pstate.min_pstate;
|
||||||
|
+
|
||||||
|
+ intel_pstate_record_pstate(cpu, pstate);
|
||||||
|
+ /*
|
||||||
|
+ * Generally, there is no guarantee that this code will always run on
|
||||||
|
+ * the CPU being updated, so force the register update to run on the
|
||||||
|
+ * right CPU.
|
||||||
|
+ */
|
||||||
|
+ wrmsrl_on_cpu(cpu->cpu, MSR_IA32_PERF_CTL,
|
||||||
|
+ pstate_funcs.get_val(cpu, pstate));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)
|
||||||
|
@@ -870,7 +867,8 @@ static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)
|
||||||
|
|
||||||
|
if (pstate_funcs.get_vid)
|
||||||
|
pstate_funcs.get_vid(cpu);
|
||||||
|
- intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate, false);
|
||||||
|
+
|
||||||
|
+ intel_pstate_set_min_pstate(cpu);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void intel_pstate_calc_busy(struct cpudata *cpu)
|
||||||
|
@@ -997,6 +995,21 @@ static inline int32_t get_target_pstate_use_performance(struct cpudata *cpu)
|
||||||
|
return cpu->pstate.current_pstate - pid_calc(&cpu->pid, core_busy);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static inline void intel_pstate_update_pstate(struct cpudata *cpu, int pstate)
|
||||||
|
+{
|
||||||
|
+ int max_perf, min_perf;
|
||||||
|
+
|
||||||
|
+ update_turbo_state();
|
||||||
|
+
|
||||||
|
+ intel_pstate_get_min_max(cpu, &min_perf, &max_perf);
|
||||||
|
+ pstate = clamp_t(int, pstate, min_perf, max_perf);
|
||||||
|
+ if (pstate == cpu->pstate.current_pstate)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ intel_pstate_record_pstate(cpu, pstate);
|
||||||
|
+ wrmsrl(MSR_IA32_PERF_CTL, pstate_funcs.get_val(cpu, pstate));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static inline void intel_pstate_adjust_busy_pstate(struct cpudata *cpu)
|
||||||
|
{
|
||||||
|
int from, target_pstate;
|
||||||
|
@@ -1006,7 +1019,7 @@ static inline void intel_pstate_adjust_busy_pstate(struct cpudata *cpu)
|
||||||
|
|
||||||
|
target_pstate = pstate_funcs.get_target_pstate(cpu);
|
||||||
|
|
||||||
|
- intel_pstate_set_pstate(cpu, target_pstate, true);
|
||||||
|
+ intel_pstate_update_pstate(cpu, target_pstate);
|
||||||
|
|
||||||
|
sample = &cpu->sample;
|
||||||
|
trace_pstate_sample(fp_toint(sample->core_pct_busy),
|
||||||
|
@@ -1180,7 +1193,7 @@ static void intel_pstate_stop_cpu(struct cpufreq_policy *policy)
|
||||||
|
if (hwp_active)
|
||||||
|
return;
|
||||||
|
|
||||||
|
- intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate, false);
|
||||||
|
+ intel_pstate_set_min_pstate(cpu);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int intel_pstate_cpu_init(struct cpufreq_policy *policy)
|
||||||
|
@@ -1255,7 +1268,7 @@ static void copy_cpu_funcs(struct pstate_funcs *funcs)
|
||||||
|
pstate_funcs.get_min = funcs->get_min;
|
||||||
|
pstate_funcs.get_turbo = funcs->get_turbo;
|
||||||
|
pstate_funcs.get_scaling = funcs->get_scaling;
|
||||||
|
- pstate_funcs.set = funcs->set;
|
||||||
|
+ pstate_funcs.get_val = funcs->get_val;
|
||||||
|
pstate_funcs.get_vid = funcs->get_vid;
|
||||||
|
pstate_funcs.get_target_pstate = funcs->get_target_pstate;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.5.0
|
||||||
|
|
14
kernel.spec
14
kernel.spec
@ -69,7 +69,7 @@ Summary: The Linux kernel
|
|||||||
# The rc snapshot level
|
# The rc snapshot level
|
||||||
%define rcrev 0
|
%define rcrev 0
|
||||||
# The git snapshot level
|
# The git snapshot level
|
||||||
%define gitrev 8
|
%define gitrev 9
|
||||||
# Set rpm version accordingly
|
# Set rpm version accordingly
|
||||||
%define rpmversion 4.%{upstream_sublevel}.0
|
%define rpmversion 4.%{upstream_sublevel}.0
|
||||||
%endif
|
%endif
|
||||||
@ -604,9 +604,6 @@ Patch621: drm-udl-Use-unlocked-gem-unreferencing.patch
|
|||||||
#Required for some persistent memory options
|
#Required for some persistent memory options
|
||||||
Patch641: disable-CONFIG_EXPERT-for-ZONE_DMA.patch
|
Patch641: disable-CONFIG_EXPERT-for-ZONE_DMA.patch
|
||||||
|
|
||||||
#rhbz 1255325
|
|
||||||
Patch646: HID-sony-do-not-bail-out-when-the-sixaxis-refuses-th.patch
|
|
||||||
|
|
||||||
#rhbz 1309658
|
#rhbz 1309658
|
||||||
Patch648: 0001-mm-CONFIG_NR_ZONES_EXTENDED.patch
|
Patch648: 0001-mm-CONFIG_NR_ZONES_EXTENDED.patch
|
||||||
|
|
||||||
@ -622,7 +619,7 @@ Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch
|
|||||||
#CVE-2016-3135 rhbz 1318172 1318270
|
#CVE-2016-3135 rhbz 1318172 1318270
|
||||||
Patch666: ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch
|
Patch666: ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch
|
||||||
|
|
||||||
Patch667: 0001-Temp-fix-for-intel_pstate-oopses-and-lockdep-report-.patch
|
Patch667: intel_pstate-Do-not-call-wrmsrl_on_cpu-with-disabled.patch
|
||||||
|
|
||||||
#rhbz 1318596
|
#rhbz 1318596
|
||||||
Patch668: x86-tsc-Prevent-NULL-pointer-deref-in-calibrate_dela.patch
|
Patch668: x86-tsc-Prevent-NULL-pointer-deref-in-calibrate_dela.patch
|
||||||
@ -634,9 +631,6 @@ Patch671: ALSA-usb-audio-Add-sanity-checks-for-endpoint-access.patch
|
|||||||
#CVE-2016-3137 rhbz 1317010 1316996
|
#CVE-2016-3137 rhbz 1317010 1316996
|
||||||
Patch672: cypress_m8-add-sanity-checking.patch
|
Patch672: cypress_m8-add-sanity-checking.patch
|
||||||
|
|
||||||
#CVE-2016-2186 rhbz 1317015 1317464
|
|
||||||
Patch673: USB-input-powermate-fix-oops-with-malicious-USB-desc.patch
|
|
||||||
|
|
||||||
#CVE-2016-2188 rhbz 1317018 1317467
|
#CVE-2016-2188 rhbz 1317018 1317467
|
||||||
Patch674: USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch
|
Patch674: USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch
|
||||||
|
|
||||||
@ -2172,6 +2166,10 @@ fi
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Mar 18 2016 Josh Boyer <jwboyer@fedoraproject.org> - 4.6.0-0.rc0.git9.1
|
||||||
|
- Linux v4.5-4071-g10fdfee7f7fd
|
||||||
|
- input, livepatching, trivial, hid, gpio, m68knommu, arm64, selftest merges
|
||||||
|
|
||||||
* Fri Mar 18 2016 Josh Boyer <jwboyer@fedoraproject.org>
|
* Fri Mar 18 2016 Josh Boyer <jwboyer@fedoraproject.org>
|
||||||
- ims-pcu: sanity checking on missing interfaces
|
- ims-pcu: sanity checking on missing interfaces
|
||||||
- CVE-2016-3140 digi_acceleport: oops on invalid USB descriptors (rhbz 1317010 1316995)
|
- CVE-2016-3140 digi_acceleport: oops on invalid USB descriptors (rhbz 1317010 1316995)
|
||||||
|
2
sources
2
sources
@ -1,3 +1,3 @@
|
|||||||
a60d48eee08ec0536d5efb17ca819aef linux-4.5.tar.xz
|
a60d48eee08ec0536d5efb17ca819aef linux-4.5.tar.xz
|
||||||
6f557fe90b800b615c85c2ca04da6154 perf-man-4.5.tar.gz
|
6f557fe90b800b615c85c2ca04da6154 perf-man-4.5.tar.gz
|
||||||
2ec8a12d2908ee34366bc3314df03a04 patch-4.5-git8.xz
|
dba9097c028e0f4baf12f05d19f563c7 patch-4.5-git9.xz
|
||||||
|
Loading…
Reference in New Issue
Block a user