ACK: [SRU][B][D][E][Patch 1/1] s390/cpumsf: Check for CPU Measurement sampling

Khaled Elmously khalid.elmously at canonical.com
Wed Oct 16 17:29:31 UTC 2019


On 2019-10-15 21:06:08 , frank.heimes at canonical.com wrote:
> From: Thomas Richter <tmricht at linux.ibm.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1847590
> 
> s390 IBM z15 introduces a check if the CPU Mesurement Facility
> sampling is temporarily unavailable. If this is the case return -EBUSY
> and abort the setup of CPU Measuement facility sampling.
> 
> Signed-off-by: Thomas Richter <tmricht at linux.ibm.com>
> Reviewed-by: Christian Borntraeger <borntraeger at de.ibm.com>
> Signed-off-by: Vasily Gorbik <gor at linux.ibm.com>
> (cherry picked from commit 932bfc5aae08f3cb20c1c9f051542f5933710151)
> Signed-off-by: Frank Heimes <frank.heimes at canonical.com>
> ---
>  arch/s390/include/asm/cpu_mf.h  | 7 +++++--
>  arch/s390/kernel/perf_cpum_sf.c | 6 ++++++
>  2 files changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/s390/include/asm/cpu_mf.h b/arch/s390/include/asm/cpu_mf.h
> index 4082542..55f9e92 100644
> --- a/arch/s390/include/asm/cpu_mf.h
> +++ b/arch/s390/include/asm/cpu_mf.h
> @@ -26,6 +26,8 @@
>  				 CPU_MF_INT_SF_PRA|CPU_MF_INT_SF_SACA|	\
>  				 CPU_MF_INT_SF_LSDA)
>  
> +#define CPU_MF_SF_RIBM_NOTAV	0x1		/* Sampling unavailable */
> +
>  /* CPU measurement facility support */
>  static inline int cpum_cf_avail(void)
>  {
> @@ -67,8 +69,9 @@ struct hws_qsi_info_block {	    /* Bit(s) */
>  	unsigned long max_sampl_rate; /* 16-23: maximum sampling interval*/
>  	unsigned long tear;	    /* 24-31: TEAR contents		 */
>  	unsigned long dear;	    /* 32-39: DEAR contents		 */
> -	unsigned int rsvrd0;	    /* 40-43: reserved			 */
> -	unsigned int cpu_speed;     /* 44-47: CPU speed 		 */
> +	unsigned int rsvrd0:24;	    /* 40-42: reserved			 */
> +	unsigned int ribm:8;	    /* 43: Reserved by IBM		 */
> +	unsigned int cpu_speed;     /* 44-47: CPU speed			 */
>  	unsigned long long rsvrd1;  /* 48-55: reserved			 */
>  	unsigned long long rsvrd2;  /* 56-63: reserved			 */
>  } __packed;
> diff --git a/arch/s390/kernel/perf_cpum_sf.c b/arch/s390/kernel/perf_cpum_sf.c
> index 2d55fc2..9cde67e 100644
> --- a/arch/s390/kernel/perf_cpum_sf.c
> +++ b/arch/s390/kernel/perf_cpum_sf.c
> @@ -728,6 +728,12 @@ static int __hw_perf_event_init(struct perf_event *event)
>  		goto out;
>  	}
>  
> +	if (si.ribm & CPU_MF_SF_RIBM_NOTAV) {
> +		pr_warn("CPU Measurement Facility sampling is temporarily not available\n");
> +		err = -EBUSY;
> +		goto out;
> +	}
> +
>  	/* Always enable basic sampling */
>  	SAMPL_FLAGS(hwc) = PERF_CPUM_SF_BASIC_MODE;
>  
> -- 
> 2.7.4
> 
> 

Acked-by: Khalid Elmously <khalid.elmously at canonical.com>




More information about the kernel-team mailing list