From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9D4CEC282D0 for ; Tue, 4 Mar 2025 00:06:03 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 51D3510E4EF; Tue, 4 Mar 2025 00:06:03 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="TvgWUxxd"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) by gabe.freedesktop.org (Postfix) with ESMTPS id B7A9210E4EF for ; Tue, 4 Mar 2025 00:06:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741046761; x=1772582761; h=date:message-id:from:to:cc:subject:in-reply-to: references:mime-version; bh=VLxTzGZZnNvNjgYI4hPuAu4+qTccZ8qdxzLg7dgxius=; b=TvgWUxxdDvEg3rfK6ZKO1NCg6jonvmC2K+7ZvdLCyIhBLOc9FaGmCz0q AgrOn6viTo7copUCPUyz9Z+5e0NcXOFwvzeKDrcptCeppzhsWA/25D5wx dklcyXWIIFtQRiEpgm5OPegF0ujWYq2oeA6xZGkREfz40jaPGiR6GpAc7 WWktkADilMIsCyeLn5pZeUnl2icJeL91BhfSZSCtmUUxqklhst5GwTs7+ m3MBR4jj6VToWWGnGnnIxTY1jxSlg7W5w0h8gf1vb2dYTitutN3QY/FE0 Vc1f+1+KW8rkHkqwSE3D1QkKQt0jLFQgIwBu016uQHOJwhRZfMbL+nP9g Q==; X-CSE-ConnectionGUID: bpBXvYwWSpSlHAM8DjwRQg== X-CSE-MsgGUID: rfKemsSaTASs/IXJ9tgsBg== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41189685" X-IronPort-AV: E=Sophos;i="6.13,331,1732608000"; d="scan'208";a="41189685" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 16:05:57 -0800 X-CSE-ConnectionGUID: aZoYcmmpTGSEdBoRbJ9mJg== X-CSE-MsgGUID: M0MzLVxJQM2lr3800m42uQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,331,1732608000"; d="scan'208";a="149008023" Received: from orsosgc001.jf.intel.com (HELO orsosgc001.intel.com) ([10.165.21.142]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 16:05:57 -0800 Date: Mon, 03 Mar 2025 16:05:56 -0800 Message-ID: <85cyex64nv.wl-ashutosh.dixit@intel.com> From: "Dixit, Ashutosh" To: Umesh Nerlige Ramappa Cc: Subject: Re: [PATCH i-g-t v2 07/14] tests/intel/xe_oa: Rewrite the polling small buf test In-Reply-To: <20250303231502.135720-8-umesh.nerlige.ramappa@intel.com> References: <20250303231502.135720-1-umesh.nerlige.ramappa@intel.com> <20250303231502.135720-8-umesh.nerlige.ramappa@intel.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?ISO-8859-4?Q?Goj=F2?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/28.2 (x86_64-redhat-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-BeenThere: igt-dev@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development mailing list for IGT GPU Tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" On Mon, 03 Mar 2025 15:14:55 -0800, Umesh Nerlige Ramappa wrote: > > The polling-small-buf test is specifically testing that POLLIN is still > set after an ENOSPC error. In the buggy code, POLLIN was cleared on > the ENOSPC error even though there was data to be read. The test was > putting an upper bound on the number of bytes read in a fixed duration > of time. While this worked, we had occassional failures that were due to > scheduling and other dependencies outside the scope of this test. > > In an attempt to make the test more robust, > - use a more definitive method to wait for few reports > - force an ENOSPC error using a small buffer > - Ensure POLLIN is still set in the subsequent poll() call > > v2: > - Add "why" in commit message (Ashutosh) > - Use uapi to wait for N reports Reviewed-by: Ashutosh Dixit > > Signed-off-by: Umesh Nerlige Ramappa > --- > tests/intel/xe_oa.c | 53 ++++++++++++++++++++------------------------- > 1 file changed, 23 insertions(+), 30 deletions(-) > > diff --git a/tests/intel/xe_oa.c b/tests/intel/xe_oa.c > index 08406ca5c..dd16b39a9 100644 > --- a/tests/intel/xe_oa.c > +++ b/tests/intel/xe_oa.c > @@ -2216,7 +2216,6 @@ static void test_polling(uint64_t requested_oa_period, > */ > static void test_polling_small_buf(void) > { > - int oa_exponent = max_oa_exponent_for_period_lte(40 * 1000); /* 40us */ > uint64_t properties[] = { > DRM_XE_OA_PROPERTY_OA_UNIT_ID, 0, > > @@ -2226,50 +2225,44 @@ static void test_polling_small_buf(void) > /* OA unit configuration */ > DRM_XE_OA_PROPERTY_OA_METRIC_SET, default_test_set->perf_oa_metrics_set, > DRM_XE_OA_PROPERTY_OA_FORMAT, __ff(default_test_set->perf_oa_format), > - DRM_XE_OA_PROPERTY_OA_PERIOD_EXPONENT, oa_exponent, > + DRM_XE_OA_PROPERTY_OA_PERIOD_EXPONENT, oa_exponent_default, > + DRM_XE_OA_PROPERTY_WAIT_NUM_REPORTS, 5, > DRM_XE_OA_PROPERTY_OA_DISABLED, true, > }; > struct intel_xe_oa_open_prop param = { > .num_properties = ARRAY_SIZE(properties) / 2, > .properties_ptr = to_user_pointer(properties), > }; > - uint32_t test_duration = 80 * 1000 * 1000; > - int sample_size = get_oa_format(default_test_set->perf_oa_format).size; > - int n_expected_reports = test_duration / oa_exponent_to_ns(oa_exponent); > - int n_expect_read_bytes = n_expected_reports * sample_size; > - struct timespec ts = {}; > - int n_bytes_read = 0; > - uint32_t n_polls = 0; > + struct pollfd pollfd; > + uint8_t buf[10]; > + int ret; > > stream_fd = __perf_open(drm_fd, ¶m, true /* prevent_pm */); > set_fd_flags(stream_fd, O_CLOEXEC | O_NONBLOCK); > - do_ioctl(stream_fd, DRM_XE_OBSERVATION_IOCTL_ENABLE, 0); > > - while (igt_nsec_elapsed(&ts) < test_duration) { > - struct pollfd pollfd = { .fd = stream_fd, .events = POLLIN }; > - > - ppoll(&pollfd, 1, NULL, NULL); > - if (pollfd.revents & POLLIN) { > - uint8_t buf[1024]; > - int ret; > + /* Kickstart the capture */ > + do_ioctl(stream_fd, DRM_XE_OBSERVATION_IOCTL_ENABLE, 0); > > - ret = read(stream_fd, buf, sizeof(buf)); > - if (ret >= 0) > - n_bytes_read += ret; > - } > + /* > + * Wait for number of reports specified in > + * DRM_XE_OA_PROPERTY_WAIT_NUM_REPORTS > + */ > + pollfd.fd = stream_fd; > + pollfd.events = POLLIN; > + poll(&pollfd, 1, -1); > + igt_assert(pollfd.revents & POLLIN); > > - n_polls++; > - } > + /* Just read one report and expect ENOSPC */ > + errno = 0; > + ret = read(stream_fd, buf, sizeof(buf)); > + igt_assert_eq(ret, -1); > + igt_assert_eq(errno, ENOSPC); > > - igt_info("Read %d expected %d (%.2f%% of the expected number), polls=%u\n", > - n_bytes_read, n_expect_read_bytes, > - n_bytes_read * 100.0f / n_expect_read_bytes, > - n_polls); > + /* Poll with 0 timeout and expect POLLIN flag to be set */ > + poll(&pollfd, 1, 0); > + igt_assert(pollfd.revents & POLLIN); > > __perf_close(stream_fd); > - > - igt_assert(abs(n_expect_read_bytes - n_bytes_read) < > - 0.20 * n_expect_read_bytes); > } > > static int > -- > 2.34.1 >