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> | ||||
| 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 | ||||
| for cryptographic verification. | ||||
| @ -15,12 +15,12 @@ Signed-off-by: David Howells <dhowells@redhat.com> | ||||
|  1 file changed, 20 insertions(+) | ||||
| 
 | ||||
| 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
 | ||||
| +++ b/include/linux/efi.h
 | ||||
| @@ -599,6 +599,12 @@ void efi_native_runtime_setup(void);
 | ||||
|  #define EFI_PROPERTIES_TABLE_GUID \ | ||||
|      EFI_GUID(  0x880aaca3, 0x4adc, 0x4a04, 0x90, 0x79, 0xb7, 0x47, 0x34, 0x08, 0x25, 0xe5 ) | ||||
| @@ -603,6 +603,12 @@ void efi_native_runtime_setup(void);
 | ||||
|  	EFI_GUID(0x3152bca5, 0xeade, 0x433d, \ | ||||
|  		 0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44) | ||||
|   | ||||
| +#define EFI_CERT_SHA256_GUID \
 | ||||
| +    EFI_GUID(  0xc1c41626, 0x504c, 0x4092, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28 )
 | ||||
| @ -31,7 +31,7 @@ index 4dc970e..82d6218 100644 | ||||
|  typedef struct { | ||||
|  	efi_guid_t guid; | ||||
|  	u64 table; | ||||
| @@ -823,6 +829,20 @@ typedef struct {
 | ||||
| @@ -827,6 +833,20 @@ typedef struct {
 | ||||
|   | ||||
|  #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> | ||||
| Date: Wed, 25 Mar 2015 14:17:50 -0400 | ||||
| Subject: [PATCH] arm64: avoid needing console= to enable serial console | ||||
| @ -11,17 +11,17 @@ firmware. | ||||
| 
 | ||||
| Signed-off-by: Mark Salter <msalter@redhat.com> | ||||
| ---
 | ||||
|  arch/arm64/kernel/setup.c | 19 +++++++++++++++++++ | ||||
|  1 file changed, 19 insertions(+) | ||||
|  arch/arm64/kernel/setup.c | 20 ++++++++++++++++++++ | ||||
|  1 file changed, 20 insertions(+) | ||||
| 
 | ||||
| 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
 | ||||
| +++ 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; | ||||
|  } | ||||
|  subsys_initcall(topology_init); | ||||
|  __initcall(register_kernel_offset_dumper); | ||||
| +
 | ||||
| +/*
 | ||||
| + * 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_CAVIUM_ERRATUM_22375=y | ||||
| CONFIG_CAVIUM_ERRATUM_23154=y | ||||
| CONFIG_CAVIUM_ERRATUM_27456=y | ||||
| 
 | ||||
| # AMBA / VExpress | ||||
| # CONFIG_RTC_DRV_PL030 is not set | ||||
| @ -51,6 +52,13 @@ CONFIG_ARM64_HW_AFDBM=y | ||||
| CONFIG_ARM64_PAN=y | ||||
| CONFIG_ARM64_LSE_ATOMICS=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_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||||
|  | ||||
| @ -2542,6 +2542,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m | ||||
| # CONFIG_TOUCHSCREEN_FT6236 is not set | ||||
| # CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set | ||||
| # CONFIG_TOUCHSCREEN_TSC2004 is not set | ||||
| # CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set | ||||
| 
 | ||||
| CONFIG_INPUT_MISC=y | ||||
| CONFIG_INPUT_E3X0_BUTTON=m | ||||
| @ -2566,6 +2567,13 @@ CONFIG_INPUT_MPU3050=m | ||||
| CONFIG_INPUT_KXTJ9=m | ||||
| # 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 | ||||
| # | ||||
| @ -4083,6 +4091,7 @@ CONFIG_HID_APPLEIR=m | ||||
| CONFIG_HID_LENOVO=m | ||||
| CONFIG_HID_CORSAIR=m | ||||
| CONFIG_HID_GFRM=m | ||||
| CONFIG_HID_CMEDIA=m | ||||
| 
 | ||||
| # | ||||
| # USB Imaging devices | ||||
| @ -4432,6 +4441,8 @@ CONFIG_MFD_VIPERBOARD=m | ||||
| # CONFIG_MFD_CROS_EC is not set | ||||
| # CONFIG_MFD_SI476X_CORE 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_DA9063 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_WM831X_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_DA9052_SPI 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_104_IDIO_16 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? | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										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 | ||||
| %define rcrev 0 | ||||
| # The git snapshot level | ||||
| %define gitrev 8 | ||||
| %define gitrev 9 | ||||
| # Set rpm version accordingly | ||||
| %define rpmversion 4.%{upstream_sublevel}.0 | ||||
| %endif | ||||
| @ -604,9 +604,6 @@ Patch621: drm-udl-Use-unlocked-gem-unreferencing.patch | ||||
| #Required for some persistent memory options | ||||
| 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 | ||||
| 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 | ||||
| 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 | ||||
| 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 | ||||
| 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 | ||||
| Patch674: USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch | ||||
| 
 | ||||
| @ -2172,6 +2166,10 @@ fi | ||||
| # | ||||
| #  | ||||
| %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> | ||||
| - ims-pcu: sanity checking on missing interfaces | ||||
| - CVE-2016-3140 digi_acceleport: oops on invalid USB descriptors (rhbz 1317010 1316995) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user