From patchwork Mon Dec 11 12:18:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ilpo_J=C3=A4rvinen?= X-Patchwork-Id: 176670 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7003644vqy; Mon, 11 Dec 2023 04:22:44 -0800 (PST) X-Google-Smtp-Source: AGHT+IG7TfQcr8raPfv8dXt9NpQhgzjkdsGUv1bn0ynnjEuTLoohWbmmdSc22uKTyhocSQ6IypAY X-Received: by 2002:a17:902:dac1:b0:1d0:8383:742c with SMTP id q1-20020a170902dac100b001d08383742cmr2384799plx.39.1702297363935; Mon, 11 Dec 2023 04:22:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702297363; cv=none; d=google.com; s=arc-20160816; b=zgP/I7kRxngbojc6o6GAaUcGEe64GyjM28Ur+SIVDIoWQzHm35H5+ky2+JmgUIiS7z UM7gK7M7g07AxWlMOLSStXKcZadVA2ANAu86smjzuMAmoeM7IsWi/zZ957VqIikELE0F h2e7jndIbEfdGpM9JnWqVJLpMiC2gt6wWkmRt2DWlvhdC59osS1Y5ZAOk/GxKwX5hZbF hT26MmysVnsHbx37bBbyLIcRpN6a00nyi1QmvhaYRxRkKHBK3cRZPkfCQvh7rt573rIK oyh2hGU7fE8Y/G9YTfnG1dsIJAuwH6MJGdvOF/GuK5EYCGtqQVxecPg9aT6eYl1soZvg Mj8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=yDuSXAU5w93MhedOD0ZV9Q4YKSr5XDZeDleLa735cAQ=; fh=gPQ6jqLSfsDb5bE3yrtO+AlT5R4d75RXkjC5xckz7Dk=; b=bPdFq7d0E3XJRFC4cUyuJTaf6ba5Jixq4/JYjibbXOIWnv8G2r4d0QqEAr+RzAo2BS 9qzTuKCtZoooQMuDoIm9NbY8lLU86bZOQ1g1QjRvxPNzLCt0t5hrczc4rGNG53gRUB92 2e71G+nW3F3LfBOaIG6MJAOZnhm6sagdnp6aI41VRaeXjdDKGzUM5YVQ6tGyS9cJBHnh 9qjZgw1OrIPQi3RmrNslKr2vCKYc6481cThjuONVkF8MyVVGY4zc1QPVh+w25EgN3kvK tQE2dFsuoBcj41NuW4VnOvBW7ydZ20LeGcdHtcoPQVfuh9YxUkj4Jgv0oqER9/fmDMp7 f/9w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=BVbrTqLt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from groat.vger.email (groat.vger.email. [2620:137:e000::3:5]) by mx.google.com with ESMTPS id z6-20020a1709028f8600b001d2ed152b4fsi5624794plo.364.2023.12.11.04.22.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Dec 2023 04:22:43 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) client-ip=2620:137:e000::3:5; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=BVbrTqLt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 4650F806897A; Mon, 11 Dec 2023 04:22:35 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234948AbjLKMWG (ORCPT + 99 others); Mon, 11 Dec 2023 07:22:06 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56778 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234965AbjLKMVt (ORCPT ); Mon, 11 Dec 2023 07:21:49 -0500 Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DEC861B1; Mon, 11 Dec 2023 04:21:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1702297291; x=1733833291; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VSvjnPLu7Fih72ExaXTPlbEBBkfKQMvNugkoOWLF/vw=; b=BVbrTqLttjxtOEcrneEFMSlyP5zHAOwk8ih/HKnAtFbu8irc9SmBJmWX UpsuGOBVsl+ss2m5Yp41hOJ9PiqKCUPwYkEKACjOVl6MP6wCqIWCTtWG+ F6v0/7B+1HvF4o7WcoMi3FgC8i73G8G7wkEF1XswHUiaSTxH5IV+qF192 /ikAN9VP0FiihY9qeS3U4rGWoEukQ3evrYWR9VqOeI3LJ2DofIIsKRpSl euGQuCv/qDST6GNn388WNGcK8LZ28Vmk6WFtctUTma23N/kX4Egn1ewqS EAGYux5yZkPa6NZklxV9EBgqQmJ+H3c7t5Wnwj+urSPV0g8cht2j1NS2V Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10920"; a="393509728" X-IronPort-AV: E=Sophos;i="6.04,267,1695711600"; d="scan'208";a="393509728" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Dec 2023 04:21:31 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10920"; a="863755924" X-IronPort-AV: E=Sophos;i="6.04,267,1695711600"; d="scan'208";a="863755924" Received: from ijarvine-desk1.ger.corp.intel.com (HELO localhost) ([10.246.50.188]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Dec 2023 04:21:27 -0800 From: =?utf-8?q?Ilpo_J=C3=A4rvinen?= To: linux-kselftest@vger.kernel.org, Reinette Chatre , Shuah Khan , Shaopeng Tan , =?utf-8?q?Maciej_Wiecz=C3=B3r-R?= =?utf-8?q?etman?= , Fenghua Yu Cc: linux-kernel@vger.kernel.org, =?utf-8?q?Ilpo_J=C3=A4rvinen?= Subject: [PATCH v3 19/29] selftests/resctrl: Open perf fd before start & add error handling Date: Mon, 11 Dec 2023 14:18:16 +0200 Message-Id: <20231211121826.14392-20-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20231211121826.14392-1-ilpo.jarvinen@linux.intel.com> References: <20231211121826.14392-1-ilpo.jarvinen@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Mon, 11 Dec 2023 04:22:35 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784988160535771671 X-GMAIL-MSGID: 1784988160535771671 Perf fd (pe_fd) is opened, reset, and enabled during every test the CAT selftest runs. Also, ioctl(pe_fd, ...) calls are not error checked even if ioctl() could return an error. Open perf fd only once before the tests and only reset and enable the counter within the test loop. Add error checking to pe_fd ioctl() calls. Signed-off-by: Ilpo Järvinen Reviewed-by: Reinette Chatre --- tools/testing/selftests/resctrl/cache.c | 19 +++++++++++++++---- tools/testing/selftests/resctrl/cat_test.c | 14 +++++++------- tools/testing/selftests/resctrl/resctrl.h | 1 + 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/tools/testing/selftests/resctrl/cache.c b/tools/testing/selftests/resctrl/cache.c index 319d0cdd7225..1b339d6bbff1 100644 --- a/tools/testing/selftests/resctrl/cache.c +++ b/tools/testing/selftests/resctrl/cache.c @@ -22,10 +22,19 @@ void perf_event_attr_initialize(struct perf_event_attr *pea, __u64 config) } /* Start counters to log values */ -static void perf_event_reset_enable(int pe_fd) +int perf_event_reset_enable(int pe_fd) { - ioctl(pe_fd, PERF_EVENT_IOC_RESET, 0); - ioctl(pe_fd, PERF_EVENT_IOC_ENABLE, 0); + int ret; + + ret = ioctl(pe_fd, PERF_EVENT_IOC_RESET, 0); + if (ret < 0) + return ret; + + ret = ioctl(pe_fd, PERF_EVENT_IOC_ENABLE, 0); + if (ret < 0) + return ret; + + return 0; } void perf_event_initialize_read_format(struct perf_event_read *pe_read) @@ -129,7 +138,9 @@ int perf_event_measure(int pe_fd, struct perf_event_read *pe_read, int ret; /* Stop counters after one span to get miss rate */ - ioctl(pe_fd, PERF_EVENT_IOC_DISABLE, 0); + ret = ioctl(pe_fd, PERF_EVENT_IOC_DISABLE, 0); + if (ret < 0) + return ret; ret = read(pe_fd, pe_read, sizeof(*pe_read)); if (ret == -1) { diff --git a/tools/testing/selftests/resctrl/cat_test.c b/tools/testing/selftests/resctrl/cat_test.c index bfb607b13491..36e62baebf4f 100644 --- a/tools/testing/selftests/resctrl/cat_test.c +++ b/tools/testing/selftests/resctrl/cat_test.c @@ -145,6 +145,9 @@ static int cat_test(struct resctrl_val_param *param, size_t span) perf_event_attr_initialize(&pea, PERF_COUNT_HW_CACHE_MISSES); perf_event_initialize_read_format(&pe_read); + pe_fd = perf_open(&pea, bm_pid, param->cpu_no); + if (pe_fd < 0) + return pe_fd; /* Test runs until the callback setup() tells the test to stop. */ while (1) { @@ -155,11 +158,10 @@ static int cat_test(struct resctrl_val_param *param, size_t span) } if (ret < 0) break; - pe_fd = perf_open(&pea, bm_pid, param->cpu_no); - if (pe_fd < 0) { - ret = -1; - break; - } + + ret = perf_event_reset_enable(pe_fd); + if (ret) + goto pe_close; if (run_fill_buf(span, memflush, operation, true)) { fprintf(stderr, "Error-running fill buffer\n"); @@ -171,8 +173,6 @@ static int cat_test(struct resctrl_val_param *param, size_t span) ret = perf_event_measure(pe_fd, &pe_read, param->filename, bm_pid); if (ret) goto pe_close; - - close(pe_fd); } return ret; diff --git a/tools/testing/selftests/resctrl/resctrl.h b/tools/testing/selftests/resctrl/resctrl.h index 6635d5c1908a..419669502959 100644 --- a/tools/testing/selftests/resctrl/resctrl.h +++ b/tools/testing/selftests/resctrl/resctrl.h @@ -122,6 +122,7 @@ int get_core_sibling(int cpu_no); void perf_event_attr_initialize(struct perf_event_attr *pea, __u64 config); void perf_event_initialize_read_format(struct perf_event_read *pe_read); int perf_open(struct perf_event_attr *pea, pid_t pid, int cpu_no); +int perf_event_reset_enable(int pe_fd); int perf_event_measure(int pe_fd, struct perf_event_read *pe_read, const char *filename, int bm_pid); int measure_llc_resctrl(const char *filename, int bm_pid);