Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp3928298rdb; Mon, 11 Dec 2023 04:22:46 -0800 (PST) X-Google-Smtp-Source: AGHT+IEkpy9M/mFqCSwdoKBCAWXWBDXUHabeeZfIL40RCgYrM0L4zhvKXM3TgqKVo2n6OAbcc/d0 X-Received: by 2002:a05:6a21:19e:b0:18c:93e9:9293 with SMTP id le30-20020a056a21019e00b0018c93e99293mr2682168pzb.18.1702297366567; Mon, 11 Dec 2023 04:22:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702297366; cv=none; d=google.com; s=arc-20160816; b=xlS6wH0RmxQJ7jRvEZsLcMAZVaIfzvYDHAbTrqMBby9cOrhHzUc2Ho9cGckRzqkVbF J3FT0o3oG7jSOOWWGtwyGascuzhjpcZ1Fj63J2yKDIbLKPY+pQqKcXIKzSydHsk4NMta 7xD45lUfR8JdD5akExHGHuUK6LlYQgaifY0nI4A6L+jQ7c4HEuTO6XywJ/E6O3yWGRjW 4ds2jpJwtSm4MPvUJ2FfntWYmYYf8jIlJCEpNBq0lFN9DizjGZNLpHQDb4Wcu7eyuclm 7SeR9Ejv4ganFIPBaknp2xyq1D/A2rrNG83pFsIlDBM5rWiXjFq+rF+mCZlJvIZdhqq+ gYoA== 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 Return-Path: Received: from groat.vger.email (groat.vger.email. [2620:137:e000::3:5]) by mx.google.com with ESMTPS id fa1-20020a056a002d0100b006be55174f3fsi6068464pfb.28.2023.12.11.04.22.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Dec 2023 04:22:46 -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 C5E018065EC1; Mon, 11 Dec 2023 04:22:39 -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=20J=C3=A4rvinen?= To: linux-kselftest@vger.kernel.org, Reinette Chatre , Shuah Khan , Shaopeng Tan , =?UTF-8?q?Maciej=20Wiecz=C3=B3r-Retman?= , Fenghua Yu Cc: linux-kernel@vger.kernel.org, =?UTF-8?q?Ilpo=20J=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 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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:40 -0800 (PST) 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); -- 2.30.2