Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp1186037pxv; Fri, 16 Jul 2021 03:43:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwF18l+kwUst6PqHSQBXYydor2P6ZucVvlbCmkQwXzG9FyCHkO6GG6+P9Rh7T6sdkZf4BxW X-Received: by 2002:aa7:d991:: with SMTP id u17mr13607628eds.240.1626432218345; Fri, 16 Jul 2021 03:43:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626432218; cv=none; d=google.com; s=arc-20160816; b=aUFDpTefVksjNGC7h3KzF9HJITVbRtDWD23IR9eLxUH7iREhJtm+QXvaHMIj6PDfKh /qfCltGEgc/1dKYmWrcNa4tayg36SdAWAEH9KjAOuR4Sfjn1i2y7Dnw/2POsm33bVJVz xFNrqv/NKV7p+Eja1e44CxoY5gva86N8iId+2TsDZsekwkLKtkdsxONlMtWhaXW5VTqV +4UjsKonWOYY1DzvLWbWivLNQkHn1RtAS+DFzdB4sPEFxLW1OCGSgnN9yKYh3tFepSFq kPx3hxbTWUIh6++srJ7MDXBPq92lmcuv11OdTd0jNWmM/hP/RkDKsOkh14zequYoY2rW viSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from :dkim-signature; bh=w5xXaDBOfVSI80cqGOxUol6Qepjcs1Dts3X92bpb+2w=; b=rMwzDxazfuQ5uMbPWw0xZ0tyHzZUEj0QyZkS5R3d4aaISq1garACrtXnMVTfMOhXlT PQLQJSfYqApdJ8oyhQvHOfx6XClq8H8vPRg+ETxZMcml4PeZP83Bo83ZOZK3i2jXm7Qp tJyEZzjonOLZxZe7WTdQYthnE6HS39AWtXmQMMob5Oo37IVy7CE8QmvR/D4lE+s+Hfzg MFcaOjLS5HfnU3/WEc01nCSFsNZSaBeFCdn9JP1JxwdpPk8n+l0zAqLZstdE8LJpa8+Y /v4U8lzpwji60D4+J8PQNP1jBSdLHSduqCi03zocGTHEWhPn9CsTUnJeOPbkCjLx4Hkh d63Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@fudan.edu.cn header.s=dkim header.b=OmrzHJyX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=fudan.edu.cn Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a14si10721332eds.11.2021.07.16.03.43.14; Fri, 16 Jul 2021 03:43:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@fudan.edu.cn header.s=dkim header.b=OmrzHJyX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=fudan.edu.cn Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238646AbhGPKpI (ORCPT + 99 others); Fri, 16 Jul 2021 06:45:08 -0400 Received: from zg8tmty1ljiyny4xntqumjca.icoremail.net ([165.227.154.27]:60995 "HELO zg8tmty1ljiyny4xntqumjca.icoremail.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S237344AbhGPKpI (ORCPT ); Fri, 16 Jul 2021 06:45:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fudan.edu.cn; s=dkim; h=Received:From:To:Cc:Subject:Date: Message-Id; bh=w5xXaDBOfVSI80cqGOxUol6Qepjcs1Dts3X92bpb+2w=; b=O mrzHJyX9PLJKjMmUPnKju2lLoHQnRyq6BioyNjE8T5Iny1ZfZUsLdvrBH81v3+vT 3cEC4fPDctEUN5T8nzjaus0UO5c/cbu7RQQ+gXZuQcevnpnkaDSH27oBDrDJawC+ goDDtVsCSPIsv2HLQEqUmAnhU/CYNDVlPvI4kfm0Qw= Received: from localhost.localdomain (unknown [10.162.86.133]) by app2 (Coremail) with SMTP id XQUFCgCnriZoYvFgqS7QBA--.26894S3; Fri, 16 Jul 2021 18:41:45 +0800 (CST) From: Xiyu Yang To: Zhenyu Wang , Zhi Wang , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , David Airlie , Daniel Vetter , intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: yuanxzhang@fudan.edu.cn, Xiyu Yang , Xin Tan Subject: [PATCH] drm/i915/gvt: Convert from atomic_t to refcount_t on intel_vgpu_ppgtt_spt->refcount Date: Fri, 16 Jul 2021 18:41:38 +0800 Message-Id: <1626432098-27626-1-git-send-email-xiyuyang19@fudan.edu.cn> X-Mailer: git-send-email 2.7.4 X-CM-TRANSID: XQUFCgCnriZoYvFgqS7QBA--.26894S3 X-Coremail-Antispam: 1UD129KBjvJXoW7Wry3tF48Wr15Zr1xWr17Wrg_yoW8tFy5pF 4YvF9rAFs5Aa4IqrW7Aa48ZF1fJ3WfZa4rGrWkK3ZIqr9rt3W5t39YvFW5JryUXrZrJr1a 9r1UWrWakasrWaUanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUU9E14x267AKxVW8JVW5JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26w1j6s0DM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4U JVWxJr1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Gc CE3s1lnxkEFVAIw20F6cxK64vIFxWle2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xv F2IEw4CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_Jr0_Jr4lYx0Ex4A2jsIE14v26r1j6r 4UMcvjeVCFs4IE7xkEbVWUJVW8JwACjcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I 648v4I1lFIxGxcIEc7CjxVA2Y2ka0xkIwI1lc2xSY4AK6svPMxAIw28IcxkI7VAKI48JMx C20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7xvwVAF wI0_JrI_JrWlx4CE17CEb7AF67AKxVWUtVW8ZwCIc40Y0x0EwIxGrwCI42IY6xIIjxv20x vE14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x0267AKxVW8JVWxJwCI42IY6xAIw20EY4v2 0xvaj40_Wr1j6rW3Jr1lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267 AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7VUbHa0DUUUUU== X-CM-SenderInfo: irzsiiysuqikmy6i3vldqovvfxof0/ Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org refcount_t type and corresponding API can protect refcounters from accidental underflow and overflow and further use-after-free situations Signed-off-by: Xiyu Yang Signed-off-by: Xin Tan --- drivers/gpu/drm/i915/gvt/gtt.c | 11 ++++++----- drivers/gpu/drm/i915/gvt/gtt.h | 3 ++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index cc2c05e18206..62f3daff5a36 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -841,7 +841,7 @@ static struct intel_vgpu_ppgtt_spt *ppgtt_alloc_spt( } spt->vgpu = vgpu; - atomic_set(&spt->refcount, 1); + refcount_set(&spt->refcount, 1); INIT_LIST_HEAD(&spt->post_shadow_list); /* @@ -927,18 +927,19 @@ static struct intel_vgpu_ppgtt_spt *ppgtt_alloc_spt_gfn( static inline void ppgtt_get_spt(struct intel_vgpu_ppgtt_spt *spt) { - int v = atomic_read(&spt->refcount); + int v = refcount_read(&spt->refcount); trace_spt_refcount(spt->vgpu->id, "inc", spt, v, (v + 1)); - atomic_inc(&spt->refcount); + refcount_inc(&spt->refcount); } static inline int ppgtt_put_spt(struct intel_vgpu_ppgtt_spt *spt) { - int v = atomic_read(&spt->refcount); + int v = refcount_read(&spt->refcount); trace_spt_refcount(spt->vgpu->id, "dec", spt, v, (v - 1)); - return atomic_dec_return(&spt->refcount); + refcount_dec(&spt->refcount); + return refcount_read(&spt->refcount); } static int ppgtt_invalidate_spt(struct intel_vgpu_ppgtt_spt *spt); diff --git a/drivers/gpu/drm/i915/gvt/gtt.h b/drivers/gpu/drm/i915/gvt/gtt.h index 3bf45672ef98..944c2d0739df 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.h +++ b/drivers/gpu/drm/i915/gvt/gtt.h @@ -38,6 +38,7 @@ #include #include #include +#include #include "gt/intel_gtt.h" @@ -243,7 +244,7 @@ struct intel_vgpu_oos_page { /* Represent a vgpu shadow page table. */ struct intel_vgpu_ppgtt_spt { - atomic_t refcount; + refcount_t refcount; struct intel_vgpu *vgpu; struct { -- 2.7.4