Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3698359pxv; Mon, 26 Jul 2021 09:39:41 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwqi8n+XHWlyWlRyMyEKUfZlneba72jmKVZ6LYXWXs+EjtgQelNfFUVT2MXeHrEIAzte8bK X-Received: by 2002:a17:907:987c:: with SMTP id ko28mr395763ejc.200.1627317581193; Mon, 26 Jul 2021 09:39:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627317581; cv=none; d=google.com; s=arc-20160816; b=KydKHhjLpcz3cm/T79gJ5f4ixYuNYGVCO422cq4ncs0J1kO+lSqAtQwYXyvBpEj31k ePDolTwaGt/1RdEOH0d8LMGcUgMsl6WFhj64cD5xIpgNOEgG/gtZaDJk+3C33EGNBYIJ QV3vN7bvU+zjfAvQzyY4lLOsRDJlgpc0bb7mD3F1+NT7iJLh7z675mN7swyJq8M/+ZG8 bs7KXaG8bLbhjIGASF9/wq2XyEDQpOfMuntS7SSmlKASGM4zh/lsxLIYkOuwq4KlFrVe gvzW9wkcsabAEAxb7RvDo/j+W7+cdjRfVUemsvikHCqKO/b3eURcQNa5bsr1LKI9hqyt 2eWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=rGx6BbgL9+AWLgcd1u37iQzVo79KvAOKrFIK6vCJ3G0=; b=m8CIy1VEsBHijqIZUt8a3excZdYPyboEL7GJErIhN6WjKYdkP5rAGfpel6sv2o5AYB UQAOerAfNoS+ZRf2Zpb5dI8mfyG5gAB3qLLTdz+a2ca/tPWzvmoCTp5ZrTPPv+YiWWyh FPAWYPLerv+hyp8IT9IlHcGI2FkkXoydmdU8BlTr9YXB6cjtFHHy4FdtF1vIeMGI9r+4 VgUv4oZGCWuuobHZW97n9zpgB12GVk2XUYSV7Jj7mZ+1EkmR/Y2BZdwUSiLJJqeDsE03 YuuSelPGPEQl48Ir/G685PhnfrT1mgyAioZqWyHwT6EfAffzJZHkBBtodf7KXoN3wJNg fCWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=xWRThEza; 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=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o13si351417eje.67.2021.07.26.09.39.18; Mon, 26 Jul 2021 09:39:41 -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=@linuxfoundation.org header.s=korg header.b=xWRThEza; 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=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233473AbhGZP5a (ORCPT + 99 others); Mon, 26 Jul 2021 11:57:30 -0400 Received: from mail.kernel.org ([198.145.29.99]:54512 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234138AbhGZPgN (ORCPT ); Mon, 26 Jul 2021 11:36:13 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id EF72360F5B; Mon, 26 Jul 2021 16:16:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1627316201; bh=5wdlEF6rCgr23EGjUgsMjp/gncIToHvNq7/xXYZhwu8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=xWRThEza9Cx/RNJNngaQprolJ4pYL0UEp+YT0fgEPsffRsasnee0ocQLAx7DvYN+L w184QSzPGCUpF2wnu4ArQV9vIQVgaQXFAnn9bLFvF4Vjj/9hkKE6bl7u56TOohJMKU s9R4kpHcOfZapAFcVl84EVC1JkZK7i58IHE20T64= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Zhenyu Wang , Colin Xu Subject: [PATCH 5.13 221/223] drm/i915/gvt: Clear d3_entered on elsp cmd submission. Date: Mon, 26 Jul 2021 17:40:13 +0200 Message-Id: <20210726153853.411098907@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210726153846.245305071@linuxfoundation.org> References: <20210726153846.245305071@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Colin Xu commit c90b4503ccf42d9d367e843c223df44aa550e82a upstream. d3_entered flag is used to mark for vgpu_reset a previous power transition from D3->D0, typically for VM resume from S3, so that gvt could skip PPGTT invalidation in current vgpu_reset during resuming. In case S0ix exit, although there is D3->D0, guest driver continue to use vgpu as normal, with d3_entered set, until next shutdown/reboot or power transition. If a reboot follows a S0ix exit, device power state transite as: D0->D3->D0->D0(reboot), while system power state transites as: S0->S0 (reboot). There is no vgpu_reset until D0(reboot), thus d3_entered won't be cleared, the vgpu_reset will skip PPGTT invalidation however those PPGTT entries are no longer valid. Err appears like: gvt: vgpu 2: vfio_pin_pages failed for gfn 0xxxxx, ret -22 gvt: vgpu 2: fail: spt xxxx guest entry 0xxxxx type 2 gvt: vgpu 2: fail: shadow page xxxx guest entry 0xxxxx type 2. Give gvt a chance to clear d3_entered on elsp cmd submission so that the states before & after S0ix enter/exit are consistent. Fixes: ba25d977571e ("drm/i915/gvt: Do not destroy ppgtt_mm during vGPU D3->D0.") Reviewed-by: Zhenyu Wang Signed-off-by: Colin Xu Signed-off-by: Zhenyu Wang Link: http://patchwork.freedesktop.org/patch/msgid/20210707004531.4873-1-colin.xu@intel.com Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/i915/gvt/handlers.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) --- a/drivers/gpu/drm/i915/gvt/handlers.c +++ b/drivers/gpu/drm/i915/gvt/handlers.c @@ -1977,6 +1977,21 @@ static int elsp_mmio_write(struct intel_ if (drm_WARN_ON(&i915->drm, !engine)) return -EINVAL; + /* + * Due to d3_entered is used to indicate skipping PPGTT invalidation on + * vGPU reset, it's set on D0->D3 on PCI config write, and cleared after + * vGPU reset if in resuming. + * In S0ix exit, the device power state also transite from D3 to D0 as + * S3 resume, but no vGPU reset (triggered by QEMU devic model). After + * S0ix exit, all engines continue to work. However the d3_entered + * remains set which will break next vGPU reset logic (miss the expected + * PPGTT invalidation). + * Engines can only work in D0. Thus the 1st elsp write gives GVT a + * chance to clear d3_entered. + */ + if (vgpu->d3_entered) + vgpu->d3_entered = false; + execlist = &vgpu->submission.execlist[engine->id]; execlist->elsp_dwords.data[3 - execlist->elsp_dwords.index] = data;