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 3C815CE79D4 for ; Wed, 20 Sep 2023 14:20:26 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BC17410E02B; Wed, 20 Sep 2023 14:20:25 +0000 (UTC) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on20611.outbound.protection.outlook.com [IPv6:2a01:111:f400:7eb2::611]) by gabe.freedesktop.org (Postfix) with ESMTPS id D32D510E02B for ; Wed, 20 Sep 2023 14:20:23 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Fhr8mGFg1+TCyXn09sFSDRPziE4afy8qMO7q4LBy7oyZ/lwrOOEzw6BtEdXOCme4Q4ZpptHe+QZsn1VruKeX4B4R6oY336eC4ga8PV3E44ksnl+teMKO9YrvwWo+sWcp2MIVF+cqzBLZYXasBD1zTGd8dH4PmB/cufONJla06UdYNhYWlqjfzroz6UJj4EAbyAga58ob+8FuLY6uG6uWrOdLSQpQdLrhlH1wlwdYPfh4upHpBoKLh/JRs8uzkbR7mT/oW1hdTnoLbuRUt/egjUIDabiQISuL+45cU9IazXQGUCLY0FvXjemgTJNWhTxvkta1WTCZBJ6TpSE81f4b2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=C//pwKuqWD1HqtEcW+s+S+/udkaiQbDDZq0tdoFZNUw=; b=aWuLpdKOTLiyfoRihFOlzEo5R9MPq/eHx3n3TW8WYGgz+ffBGN+V8vCAj1lo+oHGv1M6Hh0ZYPJJMuhEGYUPtrFXj2mJj6M0IoXP4M39EzQh48gtX1Lkj67d8/5yTG8ghueqxhSOwMFZks4sq7aVuA6oUDcGt7Q/j+iRJujUSDi/d05MuIdq3qRZeSzlwA5IyVQrBtmzPSc43TdH/eGTooeU7lQSoA3Ol/xlUPKcLNiFkoqzXUer3xCR9oqI7MuTS8RSaDfx8bq1KsPzyiIFA2MdkZMQm1mJZQ4IkJQOUZhJ7ueoHA1xrTn+XWoXpuxXPCBF02dO2HvOJ4dmNdz0Kw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=C//pwKuqWD1HqtEcW+s+S+/udkaiQbDDZq0tdoFZNUw=; b=cpp1BS2lORwlCk3dJJP5KLe4HZ6ZZE3tHpFGqdiuuIpAjGXUtovm8xvCPzQpnBSzq+A2wbNUJijSdBf+DnhDm7Vnp/+7xM4lFancrxk+DEtZCQEq6qe9cwYB6NxG5ZAG2WkMIOWEGRyI2Z7eBB5H8nKOqwzJBdlto27mVVcCTSg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from DM4PR12MB5149.namprd12.prod.outlook.com (2603:10b6:5:390::14) by PH0PR12MB7469.namprd12.prod.outlook.com (2603:10b6:510:1e9::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.20; Wed, 20 Sep 2023 14:20:17 +0000 Received: from DM4PR12MB5149.namprd12.prod.outlook.com ([fe80::b69d:ce48:b96b:833b]) by DM4PR12MB5149.namprd12.prod.outlook.com ([fe80::b69d:ce48:b96b:833b%5]) with mapi id 15.20.6792.026; Wed, 20 Sep 2023 14:20:17 +0000 Message-ID: Date: Wed, 20 Sep 2023 10:20:14 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: [PATCH v3] drm/amdkfd: Handle errors from svm validate and map Content-Language: en-US To: Felix Kuehling , Philip Yang , amd-gfx@lists.freedesktop.org References: <20230913151617.18894-1-Philip.Yang@amd.com> <20230919142124.15092-1-Philip.Yang@amd.com> From: Philip Yang In-Reply-To: Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: YQBPR0101CA0256.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:68::23) To DM4PR12MB5149.namprd12.prod.outlook.com (2603:10b6:5:390::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB5149:EE_|PH0PR12MB7469:EE_ X-MS-Office365-Filtering-Correlation-Id: 04ce308e-8bb1-4708-2aa6-08dbb9e4b6c5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nACNhbaywNJxSBobs9XS5PAZAsjTZPb0WjWrnAxx2NOa1GDeUAMDnNE7rgpwjxCrd8uj+y8tevv/ZHcE0yfgVOsjALcHN/7LqsqKzFKcw4pRslTVrVTSm/uwI5A3FCpz24LS/6oPUUf3XgwVdHqiZnSsJBD/Fcy9LDcE3NG462UJ/ZkuKPzQH/UCVwkPziaJoQU0ghH/XStj59GKL12NmaxNOkT9C6s59uZqVnxU6ZkhYa6TYCRPI9xhvR2i/UMYV+yLRL2GYVbtOUoOdzfy+R6DihIohjDiLDvK35HV/F+3rnUCCDtRf9Ud3Md0eRWX0WU5Nzyt8xYgdBuxYpY7m9wsPTNqIv3JDy2Y90B9BjW/oZxCq9GTyDxT7O34ErOukBxXHgyVZg3RbMPZxSr/w3Yn3YxMo/FwhSa8o4i3iH3lye+5/u5IGi6HxEhF6s5MnIyO8zU5XOmYctW+mLrbsg8vCBzOuL9ClG+YGpPb8SS7cxvhAyq2wl8fJLA/y4WJm91fNuuOHkKgRSQtI5PhPBIfqWskadSMZdUfB2Gh7VoiSUMnCTORSklCHg82X2cf4qnuYENlp0+/HG5fmmRJ7UMJSKj3ysalO1Y/obTZtJvGoIHQwxz4DA2OWHPee4tCnh8VQCCq1cL8Ck9BOBOoVPhSr618SHdS43vNl58BKnr6M3TTvgZzmLrXLc9zC49e X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM4PR12MB5149.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(396003)(346002)(376002)(136003)(39860400002)(366004)(451199024)(1800799009)(186009)(5660300002)(2616005)(41300700001)(15650500001)(26005)(2906002)(31696002)(38100700002)(36756003)(4326008)(8936002)(8676002)(83380400001)(478600001)(53546011)(6506007)(6666004)(6486002)(6512007)(316002)(31686004)(110136005)(66946007)(66556008)(66476007)(45980500001)(43740500002)(309714004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QnRUakRWUFJYaHFGWlZSRG0zcGYwUjMwekdHc0c4MklBeWxwUmRZMlppdjFr?= =?utf-8?B?Y0x0dXlPL1h3LzBvNmRMSWd5T3NsZmY1bWlTUE9SSFgwUkR5cTRXdVkwQXFr?= =?utf-8?B?aEFYcWhRUUo1YXhNU2JvNlMydUw2aXpFbVJrME04T3lZeWRWZlF6K1pVc0pk?= =?utf-8?B?K2xpWnJIVlNPbmpHZlBUK0czc25MbHFaMmhOaVRKRklIbENwM0lmQlA0ay9Y?= =?utf-8?B?NXl6YVVpeTZNaFRDRWNIRlNlaVpIQXZtbUUzakVHcVErcTdkTndPc2dWMi9k?= =?utf-8?B?SkNmZ1UrNlA2N0Y2VFUzekxZd092SDJxNkJUQkxhdVROcHpXeGg5Q3loQ2Qx?= =?utf-8?B?TXBQVC8yRUFCTGdpbnl3V1h1U3NmSk1HM3VFMDJyRXpIVXZWK3ErMkVrRUcy?= =?utf-8?B?NXBhTXd6aGV1NUUzTXRlK0ZBYktGdzVDb295cmRCNFBaTGlPUHY2b0pwRldu?= =?utf-8?B?K3JFQzE1b2tkZ2VJRnpEZ1JiZUhORVpZdktnc3p6d0xTSWpJOW8wUHBsQjlj?= =?utf-8?B?cTdDeWdFR2FRQ2ltK0t6MUFiREVXSlR2QkJoUDRvWEFmbzdmemlmM3k5WHJy?= =?utf-8?B?MlVQVDl0N3MzcHl6Ly9KbHJWbUlubzAweTdkNnVsQVo1OUdTWjl5SHRVUnVh?= =?utf-8?B?bStLcDB3aC9nZytpOXA2dWxqMTVZQm5qclV6amxyM3VDWTVMZWIxNExvVDdk?= =?utf-8?B?MzI5RkVYZ2ZkNGhhK0RHZ0Y1Nnhnbll4YzJmdGMrMlVTN2Z5RXJnNGhMbUFt?= =?utf-8?B?NGQ1TnE4NmJkOGg3UTNFbmpRZG5zcUN3Vjg5c21taFQ1ZHlTNWU3SStvdVcy?= =?utf-8?B?ay94R3NpVnN6MHhPY25mR0xiSmlrWHRZdHlvOUlCcFpDNGZ6aVVHL1NhSUZ5?= =?utf-8?B?QWRLajV3SCtQN0JXbmU5WmIrejZQL3dQWng4RVJLQ09zN0EyMm1TT3E5b1Qv?= =?utf-8?B?Mm1uekt1OTVEKzAxMXR1SncwT0Fod0FHT0NuYW9Sd2xoRkRoTDhZRDhkS0lp?= =?utf-8?B?MTQ1b3NiRmJKSWM4SUJCTFBRRHNqYmZZS2VqQ21YSlgxVkZMem05WG1Gd3N0?= =?utf-8?B?WUwrdkluK3BEYmVPWmUrWU5DRVcrNkZ6NHdGeVRIZVl4TnRNTm9tNTk3SXVK?= =?utf-8?B?aGxGZkdSajdBa1ZCRVZYbHRaaWRFTDZ4RWowdGZSeFVXa1BUcWhoZUJhbnRr?= =?utf-8?B?NHBjdm10c0d5NUNjQTBqaHI1MHExSHdQYTdVVkxVL0ovNnkxV2trQUM1YUox?= =?utf-8?B?QTVmN3JpKzlXUDVLazZMSGtlNW12L0FhazhTVTN4eWM1Q2pGNk9Ka0h5Z3lm?= =?utf-8?B?U2Y5V1hMc0pESDh4T1ZoZDdVY0FNMDY2SzgwaHJFdm5iUGw2eXAydTlKQzVR?= =?utf-8?B?QWc5b2h5VUMrci94M0EzdEpXZUFMMiszWkFWcklXdDllWm1rbWkva3A0NGVz?= =?utf-8?B?K2NVdUo2bDRwc1QwWk1jdndWOXIwYS8vNThKZ0ZVK1gwQ2lrc05ITHdZbkRV?= =?utf-8?B?TlVLQnAxeEhEQWRVUXZGY3Znb0ZmRHJEU2ZXU0R3MllQUUV2aXhGS1RLSUpv?= =?utf-8?B?WXVTUjVKeW1hTHJQYWR5bk15NGY3K3JUOFJqcExQZmZPNCt6eFBKL3paYkhq?= =?utf-8?B?SmlSTE9yL1hCM1N0QTlabU02M3FhbnF6NEp2MTlVZ0tHMUdWY1R1aCtyTmFH?= =?utf-8?B?a2tKNnlMRlR5UVRmMUgzYzBheW1KNjlEMTJ2ZnRkMi9BNHN6M0Q0cnB6Tmdh?= =?utf-8?B?VC9uaHM1TUdhV21Gb0V3TVcydnMyZG11ODd1eXpGRzFDZzhRSHNhUS9BYm91?= =?utf-8?B?NjcybFltZVEyZVlRM3kyenN1ZnFmWnFRY3RTT25SZTNpOFVqaU1yVGt1VDla?= =?utf-8?B?b01mbW44cmFrQnAyTW44TnpIT3FtbUZuZUlVSi9BQmt4YXhham1YaFNFSXdk?= =?utf-8?B?dFQ0eVIyYmZwVS9xTnlaQk1GNUlTRnRJYm1jOFBLOXFpUEwvRGhkWWV3Vzdk?= =?utf-8?B?RWM4bm5zaUxlb2t0L25wRklYQ2ZqQlJPdmpERmRGRmZ3b3dYMjdrb3ladTdw?= =?utf-8?B?RXUwaDFvUllBN0p1SjBKYlozVWN2NlBBUi9rKzI1RmFHTlJnOSs1UVZVdmNJ?= =?utf-8?Q?e1vs=3D?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 04ce308e-8bb1-4708-2aa6-08dbb9e4b6c5 X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5149.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Sep 2023 14:20:17.4263 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: bIbdp3KhDZuPuTDItSC27tbl2wnYx07GGiABo0mY2o//6jC8XAkt5u2ewHMnTYX4 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7469 X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alex.sierra@amd.com, james.zhu@amd.com Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx"


On 2023-09-19 17:15, Felix Kuehling wrote:

On 2023-09-19 10:21, Philip Yang wrote:
If new range is splited to multiple pranges with max_svm_range_pages
alignment and added to update_list, svm validate and map should keep
going after error to make sure prange->mapped_to_gpu flag is up to date
for the whole range.

svm validate and map update set prange->mapped_to_gpu after mapping to
GPUs successfully, otherwise clear prange->mapped_to_gpu flag (for
update mapping case) instead of setting error flag, we can remove
the redundant error flag to simpliy code.

Refactor to remove goto and update prange->mapped_to_gpu flag inside
svm_range_lock, to guarant we always evict queues or unmap from GPUs if
there are invalid ranges.

After svm validate and map return error -EAGIN, the caller retry will
update the mapping for the whole range again.

Fixes: c22b04407097 ("drm/amdkfd: flag added to handle errors from svm validate and map")
Signed-off-by: Philip Yang <Philip.Yang@amd.com>
---
  drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 78 +++++++++++++---------------
  drivers/gpu/drm/amd/amdkfd/kfd_svm.h |  1 -
  2 files changed, 36 insertions(+), 43 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
index 50c29fd844fb..4812f4ac5579 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
@@ -818,7 +818,7 @@ svm_range_is_same_attrs(struct kfd_process *p, struct svm_range *prange,
          }
      }
  -    return !prange->is_error_flag;
+    return true;
  }
    /**
@@ -1671,7 +1671,7 @@ static int svm_range_validate_and_map(struct mm_struct *mm,
        start = prange->start << PAGE_SHIFT;
      end = (prange->last + 1) << PAGE_SHIFT;
-    for (addr = start; addr < end && !r; ) {
+    for (addr = start; !r && addr < end; ) {
          struct hmm_range *hmm_range;
          struct vm_area_struct *vma;
          unsigned long next;
@@ -1680,62 +1680,55 @@ static int svm_range_validate_and_map(struct mm_struct *mm,
          bool readonly;
            vma = vma_lookup(mm, addr);
-        if (!vma) {
+        if (vma) {
+            readonly = !(vma->vm_flags & VM_WRITE);
+
+            next = min(vma->vm_end, end);
+            npages = (next - addr) >> PAGE_SHIFT;
+            WRITE_ONCE(p->svms.faulting_task, current);
+            r = amdgpu_hmm_range_get_pages(&prange->notifier, addr, npages,
+                               readonly, owner, NULL,
+                               &hmm_range);
+            WRITE_ONCE(p->svms.faulting_task, NULL);
+            if (r) {
+                pr_debug("failed %d to get svm range pages\n", r);
+                if (r == -EBUSY)
+                    r = -EAGAIN;
+            }
+        } else {
              r = -EFAULT;
-            goto unreserve_out;
-        }
-        readonly = !(vma->vm_flags & VM_WRITE);
-
-        next = min(vma->vm_end, end);
-        npages = (next - addr) >> PAGE_SHIFT;
-        WRITE_ONCE(p->svms.faulting_task, current);
-        r = amdgpu_hmm_range_get_pages(&prange->notifier, addr, npages,
-                           readonly, owner, NULL,
-                           &hmm_range);
-        WRITE_ONCE(p->svms.faulting_task, NULL);
-        if (r) {
-            pr_debug("failed %d to get svm range pages\n", r);
-            if (r == -EBUSY)
-                r = -EAGAIN;
-            goto unreserve_out;
          }
  -        offset = (addr - start) >> PAGE_SHIFT;
-        r = svm_range_dma_map(prange, ctx->bitmap, offset, npages,
-                      hmm_range->hmm_pfns);
-        if (r) {
-            pr_debug("failed %d to dma map range\n", r);
-            goto unreserve_out;
+        if (!r) {
+            offset = (addr - start) >> PAGE_SHIFT;
+            r = svm_range_dma_map(prange, ctx->bitmap, offset, npages,
+                          hmm_range->hmm_pfns);
+            if (r)
+                pr_debug("failed %d to dma map range\n", r);
          }
            svm_range_lock(prange);
-        if (amdgpu_hmm_range_get_pages_done(hmm_range)) {
+        if (!r && amdgpu_hmm_range_get_pages_done(hmm_range)) {
              pr_debug("hmm update the range, need validate again\n");
              r = -EAGAIN;
-            goto unlock_out;
          }
-        if (!list_empty(&prange->child_list)) {
+
+        if (!r && !list_empty(&prange->child_list)) {
              pr_debug("range split by unmap in parallel, validate again\n");
              r = -EAGAIN;
-            goto unlock_out;
          }
  -        r = svm_range_map_to_gpus(prange, offset, npages, readonly,
-                      ctx->bitmap, wait, flush_tlb);
+        if (!r)
+            r = svm_range_map_to_gpus(prange, offset, npages, readonly,
+                          ctx->bitmap, wait, flush_tlb);
  -unlock_out:
+        prange->mapped_to_gpu = !r;

I'm still concerned that this can update prange->mapped_to_gpu to "true" before the entire range has been successfully mapped. This could cause race conditions if someone looks at this variable while a validate_and_map is in progress. This would avoid such race conditions:

        if (!r && next == end)
            prange->mapped_to_gpu = true;

thanks, will also add else path for error handling, to exit the loop with correct flag.

          else if (r)

             prange->mapped_to_gpu = false;

Regards,

Philip

Regards,
  Felix


          svm_range_unlock(prange);
            addr = next;
      }
  -    if (addr == end)
-        prange->mapped_to_gpu = true;
-
-unreserve_out:
      svm_range_unreserve_bos(ctx);
-
-    prange->is_error_flag = !!r;
      if (!r)
          prange->validate_timestamp = ktime_get_boottime();
  @@ -2104,7 +2097,8 @@ svm_range_add(struct kfd_process *p, uint64_t start, uint64_t size,
          next = interval_tree_iter_next(node, start, last);
          next_start = min(node->last, last) + 1;
  -        if (svm_range_is_same_attrs(p, prange, nattr, attrs)) {
+        if (svm_range_is_same_attrs(p, prange, nattr, attrs) &&
+            prange->mapped_to_gpu) {
              /* nothing to do */
          } else if (node->start < start || node->last > last) {
              /* node intersects the update range and its attributes
@@ -3517,7 +3511,7 @@ svm_range_set_attr(struct kfd_process *p, struct mm_struct *mm,
      struct svm_range *next;
      bool update_mapping = false;
      bool flush_tlb;
-    int r = 0;
+    int r, ret = 0;
        pr_debug("pasid 0x%x svms 0x%p [0x%llx 0x%llx] pages 0x%llx\n",
           p->pasid, &p->svms, start, start + size - 1, size);
@@ -3605,7 +3599,7 @@ svm_range_set_attr(struct kfd_process *p, struct mm_struct *mm,
  out_unlock_range:
          mutex_unlock(&prange->migrate_mutex);
          if (r)
-            break;
+            ret = r;
      }
        dynamic_svm_range_dump(svms);
@@ -3618,7 +3612,7 @@ svm_range_set_attr(struct kfd_process *p, struct mm_struct *mm,
      pr_debug("pasid 0x%x svms 0x%p [0x%llx 0x%llx] done, r=%d\n", p->pasid,
           &p->svms, start, start + size - 1, r);
  -    return r;
+    return ret ? ret : r;
  }
    static int
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.h b/drivers/gpu/drm/amd/amdkfd/kfd_svm.h
index c216c8dd13c6..25f711905738 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.h
@@ -133,7 +133,6 @@ struct svm_range {
      DECLARE_BITMAP(bitmap_access, MAX_GPU_INSTANCE);
      DECLARE_BITMAP(bitmap_aip, MAX_GPU_INSTANCE);
      bool                mapped_to_gpu;
-    bool                is_error_flag;
  };
    static inline void svm_range_lock(struct svm_range *prange)