Re: FAILED: patch "[PATCH] perf intel-pt: Fix last_ip usage" failed to apply to 4.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



It seems to be dependent on:

	commit e1717e0485af4f47fc4da1e979ac817f9ad61b0f
	Author: Adrian Hunter <adrian.hunter@xxxxxxxxx>
	Date:   Wed Jul 20 12:00:06 2016 +0300

	    perf intel-pt: Fix ip compression

Please take that and then this and the other 2 failures:
	perf intel-pt: Use FUP always when scanning for an IP
	perf intel-pt: Ensure never to set 'last_ip' when packet
should also apply.

On 22/07/17 16:06, gregkh@xxxxxxxxxxxxxxxxxxx wrote:
> 
> The patch below does not apply to the 4.4-stable tree.
> If someone wants it applied there, or to any other stable or longterm
> tree, then please email the backport, including the original git commit
> id to <stable@xxxxxxxxxxxxxxx>.
> 
> thanks,
> 
> greg k-h
> 
> ------------------ original commit in Linus's tree ------------------
> 
>>From ee14ac0ef6827cd6f9a572cc83dd0191ea17812c Mon Sep 17 00:00:00 2001
> From: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> Date: Fri, 26 May 2017 11:17:06 +0300
> Subject: [PATCH] perf intel-pt: Fix last_ip usage
> 
> Intel PT uses IP compression based on the last IP. For decoding
> purposes, 'last IP' is considered to be reset to zero whenever there is
> a synchronization packet (PSB). The decoder wasn't doing that, and was
> treating the zero value to mean that there was no last IP, whereas
> compression can be done against the zero value. Fix by setting last_ip
> to zero when a PSB is received and keep track of have_last_ip.
> 
> Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> Cc: Andi Kleen <ak@xxxxxxxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> Link: http://lkml.kernel.org/r/1495786658-18063-6-git-send-email-adrian.hunter@xxxxxxxxx
> Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
> 
> diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
> index f9cd3aaef488..62e2c2ad3f1d 100644
> --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
> +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
> @@ -111,6 +111,7 @@ struct intel_pt_decoder {
>  	bool have_tma;
>  	bool have_cyc;
>  	bool fixup_last_mtc;
> +	bool have_last_ip;
>  	uint64_t pos;
>  	uint64_t last_ip;
>  	uint64_t ip;
> @@ -419,6 +420,7 @@ static uint64_t intel_pt_calc_ip(const struct intel_pt_pkt *packet,
>  static inline void intel_pt_set_last_ip(struct intel_pt_decoder *decoder)
>  {
>  	decoder->last_ip = intel_pt_calc_ip(&decoder->packet, decoder->last_ip);
> +	decoder->have_last_ip = true;
>  }
>  
>  static inline void intel_pt_set_ip(struct intel_pt_decoder *decoder)
> @@ -1672,6 +1674,8 @@ static int intel_pt_walk_trace(struct intel_pt_decoder *decoder)
>  			break;
>  
>  		case INTEL_PT_PSB:
> +			decoder->last_ip = 0;
> +			decoder->have_last_ip = true;
>  			intel_pt_clear_stack(&decoder->stack);
>  			err = intel_pt_walk_psbend(decoder);
>  			if (err == -EAGAIN)
> @@ -1752,7 +1756,7 @@ static int intel_pt_walk_trace(struct intel_pt_decoder *decoder)
>  
>  static inline bool intel_pt_have_ip(struct intel_pt_decoder *decoder)
>  {
> -	return decoder->last_ip || decoder->packet.count == 0 ||
> +	return decoder->have_last_ip || decoder->packet.count == 0 ||
>  	       decoder->packet.count == 3 || decoder->packet.count == 6;
>  }
>  
> @@ -1882,7 +1886,7 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
>  				if (decoder->ip)
>  					return 0;
>  			}
> -			if (decoder->packet.count)
> +			if (decoder->packet.count && decoder->have_last_ip)
>  				intel_pt_set_last_ip(decoder);
>  			break;
>  
> @@ -1932,6 +1936,8 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
>  			break;
>  
>  		case INTEL_PT_PSB:
> +			decoder->last_ip = 0;
> +			decoder->have_last_ip = true;
>  			intel_pt_clear_stack(&decoder->stack);
>  			err = intel_pt_walk_psb(decoder);
>  			if (err)
> @@ -2066,6 +2072,7 @@ static int intel_pt_sync(struct intel_pt_decoder *decoder)
>  
>  	decoder->pge = false;
>  	decoder->continuous_period = false;
> +	decoder->have_last_ip = false;
>  	decoder->last_ip = 0;
>  	decoder->ip = 0;
>  	intel_pt_clear_stack(&decoder->stack);
> @@ -2074,6 +2081,7 @@ static int intel_pt_sync(struct intel_pt_decoder *decoder)
>  	if (err)
>  		return err;
>  
> +	decoder->have_last_ip = true;
>  	decoder->pkt_state = INTEL_PT_STATE_NO_IP;
>  
>  	err = intel_pt_walk_psb(decoder);
> @@ -2116,6 +2124,7 @@ const struct intel_pt_state *intel_pt_decode(struct intel_pt_decoder *decoder)
>  			err = intel_pt_sync(decoder);
>  			break;
>  		case INTEL_PT_STATE_NO_IP:
> +			decoder->have_last_ip = false;
>  			decoder->last_ip = 0;
>  			decoder->ip = 0;
>  			/* Fall through */
> 
> 




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]