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 63B63C27C4F for ; Thu, 13 Jun 2024 04:14:30 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B29E910E048; Thu, 13 Jun 2024 04:14:29 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="ewR/Hn5y"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) by gabe.freedesktop.org (Postfix) with ESMTPS id 62E7F10E967 for ; Thu, 13 Jun 2024 04:13:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1718252032; x=1749788032; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=vqI6Q79Shgu6/RSabVHeZqEp/y4rnwuo0OIRDKsbWNA=; b=ewR/Hn5y9KSnKZi/Dduzg6TxZiKgupqLslX3B4CdQvYsXSiC4c2c2IPW MwbipBr19WJoIbjwgT2a1gocnkVA86vLBqTaw+KaeU7dN/IgG6RIIkIt6 CUt6AeaMjB/KnAcACDu+kjbSi90GQRDbgmuv0USwLobQzN4oP5YTyq18u Tlm8LCr0zAU/on05EUVOU7nXy6a6EeF3y2VflYVuQJtuuTyNpiUN3JO5K Jqfr22baVsWqY2yV3vAOkeJmI+y5rmb2H5DKPYl39IkAETaNnNu07msGz 6c8Q+RpoDx5ahj3Aqh+R5YRqSMGMQkmvwgFuv114lzR/xLVtGuvF2NmmO Q==; X-CSE-ConnectionGUID: fGEqYbB/RdaC+Ls2q2kpug== X-CSE-MsgGUID: hC22+x+BTnyJ2tY7jpVLgw== X-IronPort-AV: E=McAfee;i="6700,10204,11101"; a="14847988" X-IronPort-AV: E=Sophos;i="6.08,234,1712646000"; d="scan'208";a="14847988" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jun 2024 21:13:49 -0700 X-CSE-ConnectionGUID: iIMUow8lTCmBd1tDPMU8JA== X-CSE-MsgGUID: gSeiiLZNRBCU4aXcR9XhFg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,234,1712646000"; d="scan'208";a="40476361" Received: from szeng-desk.jf.intel.com ([10.165.21.149]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jun 2024 21:13:48 -0700 From: Oak Zeng To: intel-xe@lists.freedesktop.org Subject: [CI 36/42] drm/xe/svm: introduce svm migration function Date: Thu, 13 Jun 2024 00:24:23 -0400 Message-Id: <20240613042429.637281-36-oak.zeng@intel.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20240613042429.637281-1-oak.zeng@intel.com> References: <20240613042429.637281-1-oak.zeng@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" xe_svm_migrate is introduced to migrate b/t two migration vectors. This will be a callback function registered to drm layer for svm memory migration. Cc: Thomas Hellström Cc: Matthew Brost Cc: Brian Welty Cc: Himal Prasad Ghimiray Signed-off-by: Oak Zeng --- drivers/gpu/drm/xe/xe_svm.c | 46 +++++++++++++++++++++++++++++++++++++ drivers/gpu/drm/xe/xe_svm.h | 3 +++ 2 files changed, 49 insertions(+) diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c index d2838ce46eaf..014b70250abd 100644 --- a/drivers/gpu/drm/xe/xe_svm.c +++ b/drivers/gpu/drm/xe/xe_svm.c @@ -7,8 +7,10 @@ #include #include #include +#include #include "xe_ttm_vram_mgr_types.h" #include "xe_device_types.h" +#include "xe_migrate.h" #include "xe_device.h" #include "xe_tile.h" #include "xe_svm.h" @@ -154,3 +156,47 @@ void* xe_svm_mem_region_to_pagemap_owner(struct drm_mem_region *mr) return tile->xe; } + +/** + * xe_svm_migrate() - migrate b/t two migration vectors. + * @src_vec: source migration vector + * @dst_vec: dst migration vector + * + * For now this function only support migration b/t system memory + * and device memory. It can be extended to support migration b/t + * two device memory regions. + * + * FIXME: right now it requires vram dpa to be physically contiguous. + * This is guaranteed by the DRM_BUDDY_CONTIGUOUS_ALLOCATION in + * xe_svm_alloc_pages. In the future we can support migration with + * non-contiguous vram. This requires change to xe_migrate_vram + * to map non-contiguous vram to contiguous device virtual address + * space (aka not using identity vram migrate vm mapping) + */ +struct dma_fence* xe_svm_migrate(struct migrate_vec *src_vec, + struct migrate_vec *dst_vec) +{ + unsigned long npages = src_vec->npages; + struct xe_mem_region *xe_mr; + struct drm_mem_region *mr; + bool dst_vram = false; + struct xe_tile *tile; + dma_addr_t *sram_addr; + u64 vram_addr; + + if (dst_vec->mr) { + mr = dst_vec->mr; + dst_vram = true; + vram_addr = dst_vec->addr_vec[0].dpa; + sram_addr = &src_vec->addr_vec[0].dma_addr; + } else { + mr = src_vec->mr; + vram_addr = src_vec->addr_vec[0].dpa; + sram_addr = &dst_vec->addr_vec[0].dma_addr; + } + + xe_mr = container_of(mr, struct xe_mem_region, drm_mr); + tile = xe_mem_region_to_tile(xe_mr); + + return xe_migrate_vram(tile->migrate, npages, sram_addr, vram_addr, dst_vram); +} diff --git a/drivers/gpu/drm/xe/xe_svm.h b/drivers/gpu/drm/xe/xe_svm.h index b70551d12578..1b891b2a7587 100644 --- a/drivers/gpu/drm/xe/xe_svm.h +++ b/drivers/gpu/drm/xe/xe_svm.h @@ -8,10 +8,13 @@ struct drm_mem_region; struct page; +struct migrate_vec; int xe_svm_alloc_pages(struct drm_mem_region *mr, unsigned long npages, unsigned long *pfn); void xe_svm_free_page(struct page *page); void* xe_svm_mem_region_to_pagemap_owner(struct drm_mem_region *mr); +struct dma_fence* xe_svm_migrate(struct migrate_vec *src_vec, + struct migrate_vec *dst_vec); #endif -- 2.26.3