From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87ED93E3D9C for ; Fri, 10 Jul 2026 21:55:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783720509; cv=none; b=nr5neJvfBWAF7GTenVZyODfL0YJ+FJ9CZFp6HWzjg3135Q0crohGiBv39pRe6fjXHKIzqTV7BwQJy2s9ia8ESPsVMnst8hhQZdpQ2sPWqvlLUUWUfqLJvA+5nnJECjZ3m+28Fdn6nY+PsLKW5t3Rq9GsJzBRF2ESu9MLRLCdtts= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783720509; c=relaxed/simple; bh=+ebALSA4pf2aaDygPoTJSPN9THZBjAOq3G5H6muLK0U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=KN5m9qINr0k4MHZHuGOMckKtmaS/91kavEES4xIYsId4eeiCOVQfdQFQZHs7xiiQm9q2ob9y8/VYW8u5ziVufA/eugsPeXK1oMFC1RIveWn3XNkKEQfr0oQykpDFseCZM2K9v+InxR4IZbWc4xFiiocntXP0sbZ8cRyYq1UVP+Y= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=C415P0Ad; arc=none smtp.client-ip=192.198.163.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="C415P0Ad" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1783720507; x=1815256507; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=+ebALSA4pf2aaDygPoTJSPN9THZBjAOq3G5H6muLK0U=; b=C415P0AdgMXL+x/miwJUewrntNq8VeRWX/eGSZWKZj2UGZE2jfA4gXMX EmPnIXO2tc7BxVfSdoj5AvBbc9DLN+eOBXzXl9G2ftga4b7nHXMyp2ukK qVK/9icEGHFn3t8y9eGKMhmZm2alWfF8OGWO2GbyL6pknF6OiARsthzbW v2FE9ZwmnEx+3md89JQhl6DA9DDZkD+dM5LsGsC0FYCdnR35X09edTeHs yaAN7I6+pzDsayWsFY4RMkgPHxM0FmpOX88B7n6DYXbSDWLzLcwMDDDK/ s5mihZr3R+/EhHQyYAwzz0dsHkoZuUremXKVXslS0EKiqh9qTsg6XtSIN w==; X-CSE-ConnectionGUID: 0Zhr2fnXS6Gh0HiQiOH7/A== X-CSE-MsgGUID: SCDx7pXLQQeWRgenSpOLLA== X-IronPort-AV: E=McAfee;i="6800,10657,11841"; a="83543225" X-IronPort-AV: E=Sophos;i="6.25,154,1779174000"; d="scan'208";a="83543225" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2026 14:54:56 -0700 X-CSE-ConnectionGUID: l2lZK7JjT8uEedZM6c3Xng== X-CSE-MsgGUID: JXo3T49mQ7W6ts5vhXvtXw== X-ExtLoop1: 1 Received: from gsse-cloud1.jf.intel.com ([10.54.39.91]) by fmviesa003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2026 14:54:55 -0700 From: Matthew Brost To: intel-xe@lists.freedesktop.org, dri-devel@lists.freedesktop.org Cc: Carlos Santa , Ryan Neph , Christian Koenig , Huang Rui , Matthew Auld , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org, =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Subject: [PATCH v2 26/33] drm/xe: Add tracepoint for xe_gem_create_ioctl Date: Fri, 10 Jul 2026 14:54:35 -0700 Message-Id: <20260710215442.2444235-27-matthew.brost@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260710215442.2444235-1-matthew.brost@intel.com> References: <20260710215442.2444235-1-matthew.brost@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a xe_gem_create_ioctl tracepoint to help profile GEM creation, in particular the cost of populating a BO while holding the dma-resv lock versus the total IOCTL cost. This is useful for evaluating the out-of-lock preallocation path, which aims to shrink the time spent under the lock. The tracepoint records the BO size, the requested placement mask, the CPU caching mode, the VM asid (0 when no VM is bound), the total time spent in the IOCTL, and the time spent under the dma-resv lock (the xe_validation_guard region where the lock is held). The asid is captured at VM lookup time rather than at trace emission, since the VM reference is dropped before the tracepoint fires. Cc: Carlos Santa Cc: Ryan Neph Cc: Christian Koenig Cc: Huang Rui Cc: Matthew Auld Cc: Maarten Lankhorst Cc: Maxime Ripard Cc: Thomas Zimmermann Cc: David Airlie Cc: Simona Vetter Cc: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org Cc: Thomas Hellström Assisted-by: GitHub_Copilot:claude-opus-4.8 Signed-off-by: Matthew Brost --- drivers/gpu/drm/xe/xe_bo.c | 16 ++++++++++++++++ drivers/gpu/drm/xe/xe_trace_bo.h | 31 +++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c index d9226a3995fe..c096f3dbd528 100644 --- a/drivers/gpu/drm/xe/xe_bo.c +++ b/drivers/gpu/drm/xe/xe_bo.c @@ -3929,6 +3929,10 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data, bool have_prealloc = false; unsigned int bo_flags; u32 handle; + ktime_t ioctl_start = ktime_get(); + ktime_t lock_start = ktime_set(0, 0); + u64 lock_ns = 0; + u32 asid = 0; int err; if (XE_IOCTL_DBG(xe, args->pad[0] || args->pad[1] || args->pad[2]) || @@ -4007,6 +4011,7 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data, vm = xe_vm_lookup(xef, args->vm_id); if (XE_IOCTL_DBG(xe, !vm)) return -ENOENT; + asid = vm->usm.asid; } /* @@ -4057,6 +4062,10 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data, if (err) break; } + + if (lock_start == ktime_set(0, 0)) + lock_start = ktime_get(); + bo = xe_bo_create_user(xe, vm, args->size, args->cpu_caching, bo_flags, have_prealloc ? &prealloc : NULL, &exec); @@ -4067,6 +4076,7 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data, break; } } + lock_ns = ktime_to_ns(ktime_sub(ktime_get(), lock_start)); if (have_prealloc) ttm_pool_prealloc_fini(&xe->ttm.pool, &prealloc); if (err) @@ -4097,6 +4107,12 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data, if (vm) xe_vm_put(vm); + trace_xe_gem_create_ioctl(xe, args->size, args->placement, + args->cpu_caching, asid, + ktime_to_ns(ktime_sub(ktime_get(), + ioctl_start)) / 1000, + lock_ns / 1000); + return err; } diff --git a/drivers/gpu/drm/xe/xe_trace_bo.h b/drivers/gpu/drm/xe/xe_trace_bo.h index a169a322464b..b2dacb5fa3f7 100644 --- a/drivers/gpu/drm/xe/xe_trace_bo.h +++ b/drivers/gpu/drm/xe/xe_trace_bo.h @@ -144,6 +144,37 @@ TRACE_EVENT(xe_bo_defrag_one, __entry->ret) ); +TRACE_EVENT(xe_gem_create_ioctl, + TP_PROTO(struct xe_device *xe, u64 size, u32 placement, + u16 caching, u32 asid, u64 ioctl_us, u64 lock_us), + TP_ARGS(xe, size, placement, caching, asid, ioctl_us, lock_us), + + TP_STRUCT__entry( + __string(dev, dev_name(xe->drm.dev)) + __field(u64, size) + __field(u32, placement) + __field(u16, caching) + __field(u32, asid) + __field(u64, ioctl_us) + __field(u64, lock_us) + ), + + TP_fast_assign( + __assign_str(dev); + __entry->size = size; + __entry->placement = placement; + __entry->caching = caching; + __entry->asid = asid; + __entry->ioctl_us = ioctl_us; + __entry->lock_us = lock_us; + ), + + TP_printk("dev=%s, size=%llu, placement=0x%x, caching=%u, asid=%u, ioctl_us=%llu, lock_us=%llu", + __get_str(dev), __entry->size, __entry->placement, + __entry->caching, __entry->asid, __entry->ioctl_us, + __entry->lock_us) +); + DECLARE_EVENT_CLASS(xe_vma, TP_PROTO(struct xe_vma *vma), TP_ARGS(vma), -- 2.34.1