-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
x86/intel_rdt: Change file names to accommodate RDT monitor code
Because the "perf cqm" and resctrl code were separately added and indivdually configurable, there seem to be separate context switch code and also things on global .h which are not really needed. Move only the scheduling specific code and definitions to <asm/intel_rdt_sched.h> and the put all the other declarations to a local intel_rdt.h. h/t to Reinette Chatre for pointing out that we should separate the public interfaces used by other parts of the kernel from private objects shared between the various files comprising RDT. No functional change. Signed-off-by: Vikas Shivappa <vikas.shivappa@linux.intel.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: ravi.v.shankar@intel.com Cc: tony.luck@intel.com Cc: fenghua.yu@intel.com Cc: peterz@infradead.org Cc: eranian@google.com Cc: vikas.shivappa@intel.com Cc: ak@linux.intel.com Cc: davidcc@google.com Cc: reinette.chatre@intel.com Link: http://lkml.kernel.org/r/1501017287-28083-5-git-send-email-vikas.shivappa@linux.intel.com
- Loading branch information
Vikas Shivappa
authored and
Thomas Gleixner
committed
Aug 1, 2017
1 parent
f01d7d5
commit 0583020
Showing
9 changed files
with
81 additions
and
76 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
#ifndef _ASM_X86_INTEL_RDT_SCHED_H | ||
#define _ASM_X86_INTEL_RDT_SCHED_H | ||
|
||
#ifdef CONFIG_INTEL_RDT | ||
|
||
#include <linux/sched.h> | ||
#include <linux/jump_label.h> | ||
|
||
#define IA32_PQR_ASSOC 0x0c8f | ||
|
||
/** | ||
* struct intel_pqr_state - State cache for the PQR MSR | ||
* @rmid: The cached Resource Monitoring ID | ||
* @closid: The cached Class Of Service ID | ||
* | ||
* The upper 32 bits of IA32_PQR_ASSOC contain closid and the | ||
* lower 10 bits rmid. The update to IA32_PQR_ASSOC always | ||
* contains both parts, so we need to cache them. | ||
* | ||
* The cache also helps to avoid pointless updates if the value does | ||
* not change. | ||
*/ | ||
struct intel_pqr_state { | ||
u32 rmid; | ||
u32 closid; | ||
}; | ||
|
||
DECLARE_PER_CPU(struct intel_pqr_state, pqr_state); | ||
DECLARE_PER_CPU_READ_MOSTLY(int, cpu_closid); | ||
DECLARE_STATIC_KEY_FALSE(rdt_enable_key); | ||
|
||
/* | ||
* intel_rdt_sched_in() - Writes the task's CLOSid to IA32_PQR_MSR | ||
* | ||
* Following considerations are made so that this has minimal impact | ||
* on scheduler hot path: | ||
* - This will stay as no-op unless we are running on an Intel SKU | ||
* which supports resource control and we enable by mounting the | ||
* resctrl file system. | ||
* - Caches the per cpu CLOSid values and does the MSR write only | ||
* when a task with a different CLOSid is scheduled in. | ||
* | ||
* Must be called with preemption disabled. | ||
*/ | ||
static inline void intel_rdt_sched_in(void) | ||
{ | ||
if (static_branch_likely(&rdt_enable_key)) { | ||
struct intel_pqr_state *state = this_cpu_ptr(&pqr_state); | ||
int closid; | ||
|
||
/* | ||
* If this task has a closid assigned, use it. | ||
* Else use the closid assigned to this cpu. | ||
*/ | ||
closid = current->closid; | ||
if (closid == 0) | ||
closid = this_cpu_read(cpu_closid); | ||
|
||
if (closid != state->closid) { | ||
state->closid = closid; | ||
wrmsr(IA32_PQR_ASSOC, state->rmid, closid); | ||
} | ||
} | ||
} | ||
|
||
#else | ||
|
||
static inline void intel_rdt_sched_in(void) {} | ||
|
||
#endif /* CONFIG_INTEL_RDT */ | ||
|
||
#endif /* _ASM_X86_INTEL_RDT_SCHED_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters