Patchwork [RFC] UBUNTU: fix perf kernel version detection for multiple-flavour strings

login
register
mail settings
Submitter Andy Whitcroft
Date April 21, 2010, 1:27 p.m.
Message ID <20100421132734.GF3045@shadowen.org>
Download mbox | patch
Permalink /patch/50657/
State Accepted
Delegated to: Andy Whitcroft
Headers show

Comments

Andy Whitcroft - April 21, 2010, 1:27 p.m.
On Wed, Apr 21, 2010 at 08:42:59PM +0800, Jeremy Kerr wrote:
> Currently, the perf tool doesn't work for the generic-pae flavour:
> 
>  $ bash -x /usr/bin/perf
>  ++ uname -r
>  + version=2.6.32-21-generic-pae
>  + version=2.6.32-21-generic
>  + exec perf_2.6.32-21-generic
>  /usr/bin/perf: line 4: exec: perf_2.6.32-21-generic: not found
> 
> - the PAE flavour has a version string ending in -generic-pae, but the
> version cleaning in the perf script doesn't handle the multiple flavour
> strings correctly. The perf tool is named perf_2.6.32-21, not
> perf_2.6.32-21-generic.
> 
> This change fixes the perf wrapper script to throw away version data
> after a 'dash, non-digit' sequence instead of just the last dash. This
> fixes the problem on the PAE kernel. We need to do a special pass for
> the -386 flavour, as it's virtually indisinguishable from a normal
> version number. Testing this parsing against the possible flavours
> gives:
> 
>         2.6.32-21-generic -> 2.6.32-21
>          2.6.32-21-server -> 2.6.32-21
>         2.6.32-21-preempt -> 2.6.32-21
>       2.6.32-21-versatile -> 2.6.32-21
>         2.6.32-21-generic -> 2.6.32-21
>     2.6.32-21-generic-pae -> 2.6.32-21
>             2.6.32-21-386 -> 2.6.32-21
>            2.6.32-21-ia64 -> 2.6.32-21
>            2.6.32-21-lpia -> 2.6.32-21
>         2.6.32-21-powerpc -> 2.6.32-21
>     2.6.32-21-powerpc-smp -> 2.6.32-21
>   2.6.32-21-powerpc64-smp -> 2.6.32-21
>         2.6.32-21-sparc64 -> 2.6.32-21
>     2.6.32-21-sparc64-smp -> 2.6.32-21
> 
> Signed-off-by: Jeremy Kerr <jeremy.kerr@canonical.com>
> 
> ---
>  debian/tools/perf |    3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/debian/tools/perf b/debian/tools/perf
> index 1a9915f..33df59d 100644
> --- a/debian/tools/perf
> +++ b/debian/tools/perf
> @@ -1,4 +1,5 @@
>  #!/bin/bash
>  version=`uname -r`
> -version=${version%-*}
> +version=${version/-[^0-9]*}
> +version=${version%-386}
>  exec "perf_$version" "$@"

Yep, there is clearly an issue here.  I don't like the fact we have to know
the form of some of the flavours here.  I think we can more generically do
this by stripping the version-abi from the front which has a known form
(two lots of *-) and stripping the result from the original version.
Something like the patch below.  Testing this gives:

    2.6.32-21-generic -> 2.6.32-21
    2.6.32-21-server -> 2.6.32-21
    2.6.32-21-preempt -> 2.6.32-21
    2.6.32-21-versatile -> 2.6.32-21
    2.6.32-21-generic -> 2.6.32-21
    2.6.32-21-generic-pae -> 2.6.32-21
    2.6.32-21-386 -> 2.6.32-21
    2.6.32-21-ia64 -> 2.6.32-21
    2.6.32-21-lpia -> 2.6.32-21
    2.6.32-21-powerpc -> 2.6.32-21
    2.6.32-21-powerpc-smp -> 2.6.32-21
    2.6.32-21-powerpc64-smp -> 2.6.32-21
    2.6.32-21-sparc64 -> 2.6.32-21
    2.6.32-21-sparc64-smp -> 2.6.32-21

-apw

From 753b853b11e201905f7f0a183637b2951068993b Mon Sep 17 00:00:00 2001
From: Andy Whitcroft <apw@canonical.com>
Date: Wed, 21 Apr 2010 14:19:55 +0100
Subject: [PATCH] UBUNTU: tools -- fix perf version extraction for multi-part flavours

Currently, the perf tool doesn't work for the generic-pae flavour:

 $ bash -x /usr/bin/perf
 ++ uname -r
 + version=2.6.32-21-generic-pae
 + version=2.6.32-21-generic
 + exec perf_2.6.32-21-generic
 /usr/bin/perf: line 4: exec: perf_2.6.32-21-generic: not found

We can work out the flavour by removing the known shaped version-abi
combination from the start of the version string (which is two lots of
*-), and then remove this flavour suffix from the original version to
leave us with the version-abi we need.

Based on a patch by Jeremy Kerr <jeremy.kerr@canonical.com>.

Signed-off-by: Andy Whitcroft <apw@canonical.com>
---
 debian/tools/perf |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
Jeremy Kerr - April 22, 2010, 1:02 a.m.
Hi Andy,

> +flavour=${version#*-}
> +flavour=${flavour#*-}
> +version=${version%-$flavour}

Looks good.

Acked-By: Jeremy Kerr <jeremy.kerr@canonical.com>

Cheers,


Jeremy
Andy Whitcroft - April 22, 2010, 5:50 p.m.
Applied to Lucid.

-apw

Patch

diff --git a/debian/tools/perf b/debian/tools/perf
index 1a9915f..79253d2 100644
--- a/debian/tools/perf
+++ b/debian/tools/perf
@@ -1,4 +1,7 @@ 
 #!/bin/bash
 version=`uname -r`
-version=${version%-*}
+flavour=${version#*-}
+flavour=${flavour#*-}
+version=${version%-$flavour}
+
 exec "perf_$version" "$@"