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 9B84BEDA687 for ; Tue, 3 Mar 2026 15:29:31 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4AC6410E83D; Tue, 3 Mar 2026 15:29:31 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="SyO7kml9"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.13]) by gabe.freedesktop.org (Postfix) with ESMTPS id 51AB010E83D for ; Tue, 3 Mar 2026 15:29:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1772551770; x=1804087770; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4l9Lib00LCMv2ygwldivAo3jANYl2ZvppNTerKgJv28=; b=SyO7kml9tC5MbYyP8wlli99+Vj/71tC9hwRnTVucG29VAHen5SOPAKhS QpVBieSRX5xLIFrdJSaNR1wwOfssyxBxYzlNr54py46xh7CU1+jT8G93M wAI+TrrjeWdnA20fQgiwWH/6gp/OoGrYd5jjsCsNtodpMStuoNyeT2W8U Iz43qpj8sFiicUp0+3RhKsjXE2BnUzwTztTNz7UBnMhcZ+0DDuiGvXgG6 iZPx/UYv9pLffWwuV4MrvHtah2lIcB51QOECousV2R0TLKV9TUyxnuPoE Abqt5vuRPhWsF4I45gxp2z6gALSacAgTVm6L1ENfcoO9QvF7YDClmfxqJ w==; X-CSE-ConnectionGUID: NOmo1GCjQvuBBJE/vh/QUw== X-CSE-MsgGUID: esbYLGcmThGakVK/tgWCew== X-IronPort-AV: E=McAfee;i="6800,10657,11718"; a="76193153" X-IronPort-AV: E=Sophos;i="6.21,322,1763452800"; d="scan'208";a="76193153" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2026 07:29:30 -0800 X-CSE-ConnectionGUID: pRrhlTB/Q2Kxj3jpParFJQ== X-CSE-MsgGUID: l9xwYlLKT1yxoNIQgnx7MQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,322,1763452800"; d="scan'208";a="215098702" Received: from varungup-desk.iind.intel.com ([10.190.238.71]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2026 07:29:28 -0800 From: Arvind Yadav To: igt-dev@lists.freedesktop.org Cc: matthew.brost@intel.com, himal.prasad.ghimiray@intel.com, thomas.hellstrom@linux.intel.com, nishit.sharma@intel.com, pravalika.gurram@intel.com Subject: [PATCH i-g-t v5 5/9] tests/intel/xe_madvise: Add dontneed-after-mmap subtest Date: Tue, 3 Mar 2026 20:58:58 +0530 Message-ID: <20260303152909.3503461-6-arvind.yadav@intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260303152909.3503461-1-arvind.yadav@intel.com> References: <20260303152909.3503461-1-arvind.yadav@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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" This test verifies that an existing mmap becomes invalid after the BO is marked as purgeable and purged. The test creates a BO, maps it, writes data, then marks it DONTNEED and triggers memory pressure. Accessing the previously valid mapping should now trigger SIGBUS or SIGSEGV, confirming that existing mappings are correctly invalidated when the backing store is purged. v4: - Added proper resource cleanup before calling igt_skip(). (Nishit) - Added assertion for xe_bo_map. (Nishit) Cc: Nishit Sharma Cc: Matthew Brost Cc: Thomas Hellström Cc: Himal Prasad Ghimiray Reviewed-by: Pravalika Gurram Signed-off-by: Arvind Yadav --- tests/intel/xe_madvise.c | 64 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/tests/intel/xe_madvise.c b/tests/intel/xe_madvise.c index 8dc568a92..378aa8be6 100644 --- a/tests/intel/xe_madvise.c +++ b/tests/intel/xe_madvise.c @@ -213,6 +213,64 @@ static void test_dontneed_before_mmap(int fd, struct drm_xe_engine_class_instanc xe_vm_destroy(fd, vm); } +/** + * SUBTEST: dontneed-after-mmap + * Description: Mark BO as DONTNEED after mmap, verify SIGBUS on accessing purged mapping + * Test category: functionality test + */ +static void test_dontneed_after_mmap(int fd, struct drm_xe_engine_class_instance *hwe) +{ + uint32_t bo, vm; + uint64_t addr = PURGEABLE_ADDR; + size_t bo_size = PURGEABLE_BO_SIZE; + void *map; + + purgeable_setup_simple_bo(fd, &vm, &bo, addr, bo_size, true); + + map = xe_bo_map(fd, bo, bo_size); + igt_assert(map != MAP_FAILED); + memset(map, 0xAB, bo_size); + + if (!purgeable_mark_and_verify_purged(fd, vm, addr, bo_size)) { + munmap(map, bo_size); + gem_close(fd, bo); + xe_vm_destroy(fd, vm); + igt_skip("Unable to induce purge on this platform/config"); + } + + /* Access purged mapping - should trigger SIGBUS/SIGSEGV */ + { + sighandler_t old_sigsegv, old_sigbus; + char *ptr = (char *)map; + int sig; + + old_sigsegv = signal(SIGSEGV, (__sighandler_t)sigtrap); + old_sigbus = signal(SIGBUS, (__sighandler_t)sigtrap); + + sig = sigsetjmp(jmp, SIGBUS | SIGSEGV); + switch (sig) { + case SIGBUS: + case SIGSEGV: + /* Expected - purged mapping access failed */ + break; + case 0: + *ptr = 0; + default: + igt_assert_f(false, + "Access to purged mapping should trigger SIGBUS, got sig=%d\n", + sig); + break; + } + + signal(SIGBUS, old_sigbus); + signal(SIGSEGV, old_sigsegv); + } + + munmap(map, bo_size); + gem_close(fd, bo); + xe_vm_destroy(fd, vm); +} + int igt_main() { struct drm_xe_engine_class_instance *hwe; @@ -237,6 +295,12 @@ int igt_main() break; } + igt_subtest("dontneed-after-mmap") + xe_for_each_engine(fd, hwe) { + test_dontneed_after_mmap(fd, hwe); + break; + } + igt_fixture() { xe_device_put(fd); drm_close_driver(fd); -- 2.43.0