From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751344AbdGQARI (ORCPT ); Sun, 16 Jul 2017 20:17:08 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41138 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751283AbdGQAQi (ORCPT ); Sun, 16 Jul 2017 20:16:38 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 55E3140755 Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=swood@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 55E3140755 From: Scott Wood To: Steven Rostedt Cc: linux-kernel@vger.kernel.org, Scott Wood Subject: [PATCH 7/8] ktest: Add simple config-bisect frontend Date: Sun, 16 Jul 2017 19:16:29 -0500 Message-Id: <20170717001630.10518-7-swood@redhat.com> In-Reply-To: <20170717001630.10518-1-swood@redhat.com> References: <20170717001630.10518-1-swood@redhat.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Mon, 17 Jul 2017 00:16:38 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Scott Wood Add a friendly, git-bisect-like frontend to config-bisect.pl. Unlike ktest.pl, this frontend requires no configuration beyond specifying the kernel output directory and (if cross-compiling) $ARCH, and does not need to run continuously for the entire bisection (and thus can be used to bisect on the machine testing the kernels). Signed-off-by: Scott Wood --- Is the ktest directory the right place for this, or should it (along with config-bisect.pl) go elsewhere since it no longer depends on the ktest infrastructure? If so, where? tools/testing/ktest/config-bisect.sh | 120 +++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100755 tools/testing/ktest/config-bisect.sh diff --git a/tools/testing/ktest/config-bisect.sh b/tools/testing/ktest/config-bisect.sh new file mode 100755 index 000000000000..6032e6736109 --- /dev/null +++ b/tools/testing/ktest/config-bisect.sh @@ -0,0 +1,120 @@ +#!/bin/bash + +BACKEND=$(dirname $BASH_SOURCE)/config-bisect.pl + +usage() { + echo Usage: + echo "$0 command [args]" + echo commands: + echo reset + echo init + echo diff + echo bad [conf] + echo good [conf] + echo skip + echo If conf is unspecified, \".config\" is used. + echo If cross-compiling, pass the ARCH environment variable. +} + +reset() { + rm -rf $STATE +} + +init() { + reset + mkdir -p $STATE/bad + mkdir -p $STATE/good + echo 0 > $STATE/good/idx + echo 0 > $STATE/bad/idx +} + +next() { + if ! [ -d $STATE ]; then + echo $0: No config-bisect in progress -- initializing + init + fi + + IDX=$(cat $STATE/$1/idx) + IDX=$(expr $IDX + 1) + + CONF=$2 + if [ -z "$CONF" ]; then + CONF=$O/.config + fi + + cp $CONF $STATE/$1/$IDX + echo $IDX > $STATE/$1/idx +} + +show_diff() { + GI=$(cat $STATE/good/idx) + BI=$(cat $STATE/bad/idx) + + if [ $GI != 0 ] && [ $BI != 0 ]; then + diff -u $STATE/good/$GI $STATE/bad/$BI + else + echo $0: cannot diff without at least one good and one bad + fi +} + +genconf() { + GI=$(cat $STATE/good/idx) + BI=$(cat $STATE/bad/idx) + + echo good index $GI, bad index $BI + + if [ $GI != 0 ] && [ $BI != 0 ]; then + $BACKEND $O $STATE/good/$GI $STATE/bad/$BI + + case $? in + 0) + ;; + 2) + echo Failing config diff: + show_diff + ;; + *) + echo $0: error in backend + exit 1; + ;; + esac + fi +} + +if [ -z "$1" -o -z "$2" ]; then + usage + exit 1 +fi + +O=$1 +STATE=$O/.config-bisect + +case $2 in +init) + init + ;; +reset) + reset + ;; +diff) + show_diff + ;; +bad) + next bad $3 + genconf + ;; +good) + next good $3 + genconf + ;; +skip) + # The options chosen are randomized, so we'll get a different + # config just by re-running the config bisect backend with the + # same inputs. + genconf + ;; +*) + usage + exit 1 + ;; +esac -- 2.9.4