mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	perf c2c: Fix remote HITM detection for Skylake
Skylake introduced new mem_remote bit in union perf_mem_data_src [1]. It applies to any other memory level to express Remote unknown level, as is reported by Skylake. Adding this extra check to c2c_decode_stats to properly decode remote HITMs on Skylake. [1] http://lkml.kernel.org/r/20170816222156.19953-4-andi@firstfloor.org Signed-off-by: Jiri Olsa <jolsa@kernel.org> Acked-by: Andi Kleen <ak@linux.intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Joe Mario <jmario@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/20170824085732.28481-1-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
		
							parent
							
								
									6bd76b8fab
								
							
						
					
					
						commit
						12c15302dd
					
				
					 1 changed files with 9 additions and 2 deletions
				
			
		|  | @ -316,6 +316,11 @@ int c2c_decode_stats(struct c2c_stats *stats, struct mem_info *mi) | |||
| 	u64 lvl    = data_src->mem_lvl; | ||||
| 	u64 snoop  = data_src->mem_snoop; | ||||
| 	u64 lock   = data_src->mem_lock; | ||||
| 	/*
 | ||||
| 	 * Skylake might report unknown remote level via this | ||||
| 	 * bit, consider it when evaluating remote HITMs. | ||||
| 	 */ | ||||
| 	bool mrem  = data_src->mem_remote; | ||||
| 	int err = 0; | ||||
| 
 | ||||
| #define HITM_INC(__f)		\ | ||||
|  | @ -361,7 +366,8 @@ do {				\ | |||
| 			} | ||||
| 
 | ||||
| 			if ((lvl & P(LVL, REM_RAM1)) || | ||||
| 			    (lvl & P(LVL, REM_RAM2))) { | ||||
| 			    (lvl & P(LVL, REM_RAM2)) || | ||||
| 			     mrem) { | ||||
| 				stats->rmt_dram++; | ||||
| 				if (snoop & P(SNOOP, HIT)) | ||||
| 					stats->ld_shared++; | ||||
|  | @ -371,7 +377,8 @@ do {				\ | |||
| 		} | ||||
| 
 | ||||
| 		if ((lvl & P(LVL, REM_CCE1)) || | ||||
| 		    (lvl & P(LVL, REM_CCE2))) { | ||||
| 		    (lvl & P(LVL, REM_CCE2)) || | ||||
| 		     mrem) { | ||||
| 			if (snoop & P(SNOOP, HIT)) | ||||
| 				stats->rmt_hit++; | ||||
| 			else if (snoop & P(SNOOP, HITM)) | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Jiri Olsa
						Jiri Olsa