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 X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 71151C2B9F7 for ; Wed, 26 May 2021 11:33:42 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 39B3B61402 for ; Wed, 26 May 2021 11:33:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 39B3B61402 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5A4676ECAF; Wed, 26 May 2021 11:33:37 +0000 (UTC) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id A7DF66EC9B; Wed, 26 May 2021 11:33:31 +0000 (UTC) IronPort-SDR: me3xY2NGZhcdqfSY/UwMmCzXMXtOaKblfLWPCha7yN7Wdf7OVLtYSXPbW2bzh5wye/sCAgE7EB bOuHBwq+iCdA== X-IronPort-AV: E=McAfee;i="6200,9189,9995"; a="223627305" X-IronPort-AV: E=Sophos;i="5.82,331,1613462400"; d="scan'208";a="223627305" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 May 2021 04:33:31 -0700 IronPort-SDR: E63wF2sQ3vvq1v0geLyblJXovdkPjVm4Wd2UA8zGwiniqWFE2i6IoIJ+ypr5340RnmL/Va26WP VgN8Kh+Qmtzw== X-IronPort-AV: E=Sophos;i="5.82,331,1613462400"; d="scan'208";a="633457911" Received: from pegilssx-mobl.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.205]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 May 2021 04:33:29 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Wed, 26 May 2021 13:32:53 +0200 Message-Id: <20210526113259.1661914-10-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210526113259.1661914-1-thomas.hellstrom@linux.intel.com> References: <20210526113259.1661914-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v4 09/15] drm/ttm: Document and optimize ttm_bo_pipeline_gutting() X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , =?UTF-8?q?Christian=20K=C3=B6nig?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" SWYgdGhlIGJvIGlzIGlkbGUgd2hlbiBjYWxsaW5nIHR0bV9ib19waXBlbGluZV9ndXR0aW5nKCks IHdlIHVubmVjZXNzYXJpbHkKY3JlYXRlIGEgZ2hvc3Qgb2JqZWN0IGFuZCBwdXNoIGl0IG91dCB0 byBkZWxheWVkIGRlc3Ryb3kuCkZpeCB0aGlzIGJ5IGFkZGluZyBhIHBhdGggZm9yIGlkbGUsIGFu ZCBkb2N1bWVudCB0aGUgZnVuY3Rpb24uCgpBbHNvIGF2b2lkIGhhdmluZyB0aGUgYm8gZW5kIHVw IGluIGEgYmFkIHN0YXRlIHZ1bG5lcmFibGUgdG8gdXNlci1zcGFjZQp0cmlnZ2VyZWQga2VybmVs IEJVR3MgaWYgdGhlIGNhbGwgdG8gdHRtX3R0X2NyZWF0ZSgpIGZhaWxzLgoKRmluYWxseSByZXVz ZSB0dG1fYm9fcGlwZWxpbmVfZ3V0dGluZygpIGluIHR0bV9ib19ldmljdCgpLgoKQ2M6IENocmlz dGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KU2lnbmVkLW9mZi1ieTogVGhv bWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ryb21AbGludXguaW50ZWwuY29tPgotLS0KdjQ6 Ci0gQ2xhcmlmeSB3aHkgd2UgbWFyayBibyBmb3IgY2xlYXJpbmcgYWZ0ZXIgdHRtX2JvX3BpcGVs aW5lX2d1dHRpbmcoKQogIChSZXBvcnRlZCBieSBNYXR0aGV3IEF1bGQpCi0tLQogZHJpdmVycy9n cHUvZHJtL3R0bS90dG1fYm8uYyAgICAgIHwgMjAgKysrKystLS0tLS0KIGRyaXZlcnMvZ3B1L2Ry bS90dG0vdHRtX2JvX3V0aWwuYyB8IDU1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0K IGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMgICAgICB8ICA1ICsrKwogaW5jbHVkZS9kcm0v dHRtL3R0bV90dC5oICAgICAgICAgIHwgMTAgKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDc2IGlu c2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS90dG0vdHRtX2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCmluZGV4IDUxYTk0 ZmQ2M2JkNy4uYmUwNDA2NDY2NDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0 bV9iby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKQEAgLTUwMSwxMCArNTAx LDE1IEBAIHN0YXRpYyBpbnQgdHRtX2JvX2V2aWN0KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAq Ym8sCiAJYmRldi0+ZnVuY3MtPmV2aWN0X2ZsYWdzKGJvLCAmcGxhY2VtZW50KTsKIAogCWlmICgh cGxhY2VtZW50Lm51bV9wbGFjZW1lbnQgJiYgIXBsYWNlbWVudC5udW1fYnVzeV9wbGFjZW1lbnQp IHsKLQkJdHRtX2JvX3dhaXQoYm8sIGZhbHNlLCBmYWxzZSk7CisJCXJldCA9IHR0bV9ib193YWl0 KGJvLCB0cnVlLCBmYWxzZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCi0JCXR0bV9i b19jbGVhbnVwX21lbXR5cGVfdXNlKGJvKTsKLQkJcmV0dXJuIHR0bV90dF9jcmVhdGUoYm8sIGZh bHNlKTsKKwkJLyoKKwkJICogU2luY2Ugd2UndmUgYWxyZWFkeSBzeW5jZWQsIHRoaXMgZnJlZXMg YmFja2luZyBzdG9yZQorCQkgKiBpbW1lZGlhdGVseS4KKwkJICovCisJCXJldHVybiB0dG1fYm9f cGlwZWxpbmVfZ3V0dGluZyhibyk7CiAJfQogCiAJcmV0ID0gdHRtX2JvX21lbV9zcGFjZShibywg JnBsYWNlbWVudCwgJmV2aWN0X21lbSwgY3R4KTsKQEAgLTk3NiwxMyArOTgxLDggQEAgaW50IHR0 bV9ib192YWxpZGF0ZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogCS8qCiAJICogUmVt b3ZlIHRoZSBiYWNraW5nIHN0b3JlIGlmIG5vIHBsYWNlbWVudCBpcyBnaXZlbi4KIAkgKi8KLQlp ZiAoIXBsYWNlbWVudC0+bnVtX3BsYWNlbWVudCAmJiAhcGxhY2VtZW50LT5udW1fYnVzeV9wbGFj ZW1lbnQpIHsKLQkJcmV0ID0gdHRtX2JvX3BpcGVsaW5lX2d1dHRpbmcoYm8pOwotCQlpZiAocmV0 KQotCQkJcmV0dXJuIHJldDsKLQotCQlyZXR1cm4gdHRtX3R0X2NyZWF0ZShibywgZmFsc2UpOwot CX0KKwlpZiAoIXBsYWNlbWVudC0+bnVtX3BsYWNlbWVudCAmJiAhcGxhY2VtZW50LT5udW1fYnVz eV9wbGFjZW1lbnQpCisJCXJldHVybiB0dG1fYm9fcGlwZWxpbmVfZ3V0dGluZyhibyk7CiAKIAkv KgogCSAqIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBtb3ZlIGJ1ZmZlci4KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0v dHRtX2JvX3V0aWwuYwppbmRleCBlYmZmNjAzYTk3ZjQuLjRjY2E5MzJmMWMwZSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS90dG0vdHRtX2JvX3V0aWwuYwpAQCAtNTkwLDI2ICs1OTAsNzMgQEAgaW50IHR0bV9ib19tb3Zl X2FjY2VsX2NsZWFudXAoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKIH0KIEVYUE9SVF9T WU1CT0wodHRtX2JvX21vdmVfYWNjZWxfY2xlYW51cCk7CiAKKy8qKgorICogdHRtX2JvX3BpcGVs aW5lX2d1dHRpbmcgLSBwdXJnZSB0aGUgY29udGVudHMgb2YgYSBibworICogQGJvOiBUaGUgYnVm ZmVyIG9iamVjdAorICoKKyAqIFB1cmdlIHRoZSBjb250ZW50cyBvZiBhIGJvLCBhc3luYyBpZiB0 aGUgYm8gaXMgbm90IGlkbGUuCisgKiBBZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCwgdGhlIGJvIGlz IGxlZnQgdW5wb3B1bGF0ZWQgaW4KKyAqIHN5c3RlbSBwbGFjZW1lbnQuIFRoZSBmdW5jdGlvbiBt YXkgd2FpdCB1bmludGVycnVwdGlibGUKKyAqIGZvciBpZGxlIG9uIE9PTS4KKyAqCisgKiBSZXR1 cm46IDAgaWYgc3VjY2Vzc2Z1bCwgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICov CiBpbnQgdHRtX2JvX3BpcGVsaW5lX2d1dHRpbmcoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpi bykKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHR0bV9wbGFjZSBzeXNfbWVtID0geyAubWVtX3R5 cGUgPSBUVE1fUExfU1lTVEVNIH07CiAJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpnaG9zdDsK KwlzdHJ1Y3QgdHRtX3R0ICp0dG07CiAJaW50IHJldDsKIAotCXJldCA9IHR0bV9idWZmZXJfb2Jq ZWN0X3RyYW5zZmVyKGJvLCAmZ2hvc3QpOworCS8qIElmIGFscmVhZHkgaWRsZSwgbm8gbmVlZCBm b3IgZ2hvc3Qgb2JqZWN0IGRhbmNlLiAqLworCXJldCA9IHR0bV9ib193YWl0KGJvLCBmYWxzZSwg dHJ1ZSk7CisJaWYgKHJldCAhPSAtRUJVU1kpIHsKKwkJaWYgKCFiby0+dHRtKSB7CisJCQkvKiBT ZWUgY29tbWVudCBiZWxvdyBhYm91dCBjbGVhcmluZy4gKi8KKwkJCXJldCA9IHR0bV90dF9jcmVh dGUoYm8sIHRydWUpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9IGVsc2Ugewor CQkJdHRtX3R0X3VucG9wdWxhdGUoYm8tPmJkZXYsIGJvLT50dG0pOworCQkJaWYgKGJvLT50eXBl ID09IHR0bV9ib190eXBlX2RldmljZSkKKwkJCQl0dG1fdHRfbWFya19mb3JfY2xlYXIoYm8tPnR0 bSk7CisJCX0KKwkJdHRtX3Jlc291cmNlX2ZyZWUoYm8sICZiby0+bWVtKTsKKwkJdHRtX3Jlc291 cmNlX2FsbG9jKGJvLCAmc3lzX21lbSwgJmJvLT5tZW0pOworCisJCXJldHVybiAwOworCX0KKwor CS8qCisJICogV2UgbmVlZCBhbiB1bnBvcHVsYXRlZCB0dG1fdHQgYWZ0ZXIgZ2l2aW5nIG91ciBj dXJyZW50IG9uZSwKKwkgKiBpZiBhbnksIHRvIHRoZSBnaG9zdCBvYmplY3QuIEFuZCB3ZSBjYW4n dCBhZmZvcmQgdG8gZmFpbAorCSAqIGNyZWF0aW5nIG9uZSAqYWZ0ZXIqIHRoZSBvcGVyYXRpb24u IElmIHRoZSBibyBzdWJzZXF1ZW50bHkgZ2V0cworCSAqIHJlc3VycmVjdGVkLCBtYWtlIHN1cmUg aXQncyBjbGVhcmVkIChpZiB0dG1fYm9fdHlwZV9kZXZpY2UpCisJICogdG8gYXZvaWQgbGVha2lu ZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdG8gdXNlci1zcGFjZS4KKwkgKi8KKworCXR0bSA9IGJv LT50dG07CisJYm8tPnR0bSA9IE5VTEw7CisJcmV0ID0gdHRtX3R0X2NyZWF0ZShibywgdHJ1ZSk7 CisJc3dhcChiby0+dHRtLCB0dG0pOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlyZXQg PSB0dG1fYnVmZmVyX29iamVjdF90cmFuc2ZlcihibywgJmdob3N0KTsKKwlpZiAocmV0KSB7CisJ CXR0bV90dF9kZXN0cm95KGJvLT5iZGV2LCB0dG0pOworCQlyZXR1cm4gcmV0OworCX0KKwogCXJl dCA9IGRtYV9yZXN2X2NvcHlfZmVuY2VzKCZnaG9zdC0+YmFzZS5fcmVzdiwgYm8tPmJhc2UucmVz dik7CiAJLyogTGFzdCByZXNvcnQsIHdhaXQgZm9yIHRoZSBCTyB0byBiZSBpZGxlIHdoZW4gd2Ug YXJlIE9PTSAqLwogCWlmIChyZXQpCiAJCXR0bV9ib193YWl0KGJvLCBmYWxzZSwgZmFsc2UpOwog Ci0JdHRtX3Jlc291cmNlX2FsbG9jKGJvLCAmc3lzX21lbSwgJmJvLT5tZW0pOwotCWJvLT50dG0g PSBOVUxMOwotCiAJZG1hX3Jlc3ZfdW5sb2NrKCZnaG9zdC0+YmFzZS5fcmVzdik7CiAJdHRtX2Jv X3B1dChnaG9zdCk7CisJYm8tPnR0bSA9IHR0bTsKKwl0dG1fcmVzb3VyY2VfYWxsb2MoYm8sICZz eXNfbWVtLCAmYm8tPm1lbSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS90dG0vdHRtX3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCmluZGV4 IDBlNDEyMjcxMTZiMS4uOTEzYjMzMGEyMzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v dHRtL3R0bV90dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKQEAgLTEzNCw2 ICsxMzQsMTEgQEAgdm9pZCB0dG1fdHRfZGVzdHJveV9jb21tb24oc3RydWN0IHR0bV9kZXZpY2Ug KmJkZXYsIHN0cnVjdCB0dG1fdHQgKnR0bSkKIH0KIEVYUE9SVF9TWU1CT0wodHRtX3R0X2Rlc3Ry b3lfY29tbW9uKTsKIAordm9pZCB0dG1fdHRfbWFya19mb3JfY2xlYXIoc3RydWN0IHR0bV90dCAq dHRtKQoreworCXR0bS0+cGFnZV9mbGFncyB8PSBUVE1fUEFHRV9GTEFHX1pFUk9fQUxMT0M7Cit9 CisKIHZvaWQgdHRtX3R0X2Rlc3Ryb3koc3RydWN0IHR0bV9kZXZpY2UgKmJkZXYsIHN0cnVjdCB0 dG1fdHQgKnR0bSkKIHsKIAliZGV2LT5mdW5jcy0+dHRtX3R0X2Rlc3Ryb3koYmRldiwgdHRtKTsK ZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fdHQuaCBiL2luY2x1ZGUvZHJtL3R0bS90 dG1fdHQuaAppbmRleCAzMTAyMDU5ZGI3MjYuLmRhYTljNGNmNDhiYiAxMDA2NDQKLS0tIGEvaW5j bHVkZS9kcm0vdHRtL3R0bV90dC5oCisrKyBiL2luY2x1ZGUvZHJtL3R0bS90dG1fdHQuaApAQCAt MTcwLDYgKzE3MCwxNiBAQCBpbnQgdHRtX3R0X3BvcHVsYXRlKHN0cnVjdCB0dG1fZGV2aWNlICpi ZGV2LCBzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCB0dG1fb3BlcgogICovCiB2b2lkIHR0bV90 dF91bnBvcHVsYXRlKHN0cnVjdCB0dG1fZGV2aWNlICpiZGV2LCBzdHJ1Y3QgdHRtX3R0ICp0dG0p OwogCisvKioKKyAqIHR0bV90dF9tYXJrX2Zvcl9jbGVhciAtIE1hcmsgcGFnZXMgZm9yIGNsZWFy aW5nIG9uIHBvcHVsYXRlLgorICoKKyAqIEB0dG06IFBvaW50ZXIgdG8gdGhlIHR0bV90dCBzdHJ1 Y3R1cmUKKyAqCisgKiBNYXJrcyBwYWdlcyBmb3IgY2xlYXJpbmcgc28gdGhhdCB0aGUgbmV4dCB0 aW1lIHRoZSBwYWdlIHZlY3RvciBpcworICogcG9wdWxhdGVkLCB0aGUgcGFnZXMgd2lsbCBiZSBj bGVhcmVkLgorICovCit2b2lkIHR0bV90dF9tYXJrX2Zvcl9jbGVhcihzdHJ1Y3QgdHRtX3R0ICp0 dG0pOworCiB2b2lkIHR0bV90dF9tZ3JfaW5pdCh1bnNpZ25lZCBsb25nIG51bV9wYWdlcywgdW5z aWduZWQgbG9uZyBudW1fZG1hMzJfcGFnZXMpOwogCiBzdHJ1Y3QgdHRtX2ttYXBfaXRlciAqdHRt X2ttYXBfaXRlcl90dF9pbml0KHN0cnVjdCB0dG1fa21hcF9pdGVyX3R0ICppdGVyX3R0LAotLSAK Mi4zMS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK 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 X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B3E01C2B9F7 for ; Wed, 26 May 2021 11:33:47 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 82C506113D for ; Wed, 26 May 2021 11:33:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 82C506113D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 153B66ECAC; Wed, 26 May 2021 11:33:43 +0000 (UTC) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id A7DF66EC9B; Wed, 26 May 2021 11:33:31 +0000 (UTC) IronPort-SDR: me3xY2NGZhcdqfSY/UwMmCzXMXtOaKblfLWPCha7yN7Wdf7OVLtYSXPbW2bzh5wye/sCAgE7EB bOuHBwq+iCdA== X-IronPort-AV: E=McAfee;i="6200,9189,9995"; a="223627305" X-IronPort-AV: E=Sophos;i="5.82,331,1613462400"; d="scan'208";a="223627305" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 May 2021 04:33:31 -0700 IronPort-SDR: E63wF2sQ3vvq1v0geLyblJXovdkPjVm4Wd2UA8zGwiniqWFE2i6IoIJ+ypr5340RnmL/Va26WP VgN8Kh+Qmtzw== X-IronPort-AV: E=Sophos;i="5.82,331,1613462400"; d="scan'208";a="633457911" Received: from pegilssx-mobl.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.205]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 May 2021 04:33:29 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH v4 09/15] drm/ttm: Document and optimize ttm_bo_pipeline_gutting() Date: Wed, 26 May 2021 13:32:53 +0200 Message-Id: <20210526113259.1661914-10-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210526113259.1661914-1-thomas.hellstrom@linux.intel.com> References: <20210526113259.1661914-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , =?UTF-8?q?Christian=20K=C3=B6nig?= Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" If the bo is idle when calling ttm_bo_pipeline_gutting(), we unnecessarily create a ghost object and push it out to delayed destroy. Fix this by adding a path for idle, and document the function. Also avoid having the bo end up in a bad state vulnerable to user-space triggered kernel BUGs if the call to ttm_tt_create() fails. Finally reuse ttm_bo_pipeline_gutting() in ttm_bo_evict(). Cc: Christian König Signed-off-by: Thomas Hellström --- v4: - Clarify why we mark bo for clearing after ttm_bo_pipeline_gutting() (Reported by Matthew Auld) --- drivers/gpu/drm/ttm/ttm_bo.c | 20 +++++------ drivers/gpu/drm/ttm/ttm_bo_util.c | 55 ++++++++++++++++++++++++++++--- drivers/gpu/drm/ttm/ttm_tt.c | 5 +++ include/drm/ttm/ttm_tt.h | 10 ++++++ 4 files changed, 76 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 51a94fd63bd7..be0406466460 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -501,10 +501,15 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo, bdev->funcs->evict_flags(bo, &placement); if (!placement.num_placement && !placement.num_busy_placement) { - ttm_bo_wait(bo, false, false); + ret = ttm_bo_wait(bo, true, false); + if (ret) + return ret; - ttm_bo_cleanup_memtype_use(bo); - return ttm_tt_create(bo, false); + /* + * Since we've already synced, this frees backing store + * immediately. + */ + return ttm_bo_pipeline_gutting(bo); } ret = ttm_bo_mem_space(bo, &placement, &evict_mem, ctx); @@ -976,13 +981,8 @@ int ttm_bo_validate(struct ttm_buffer_object *bo, /* * Remove the backing store if no placement is given. */ - if (!placement->num_placement && !placement->num_busy_placement) { - ret = ttm_bo_pipeline_gutting(bo); - if (ret) - return ret; - - return ttm_tt_create(bo, false); - } + if (!placement->num_placement && !placement->num_busy_placement) + return ttm_bo_pipeline_gutting(bo); /* * Check whether we need to move buffer. diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c index ebff603a97f4..4cca932f1c0e 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_util.c +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c @@ -590,26 +590,73 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo, } EXPORT_SYMBOL(ttm_bo_move_accel_cleanup); +/** + * ttm_bo_pipeline_gutting - purge the contents of a bo + * @bo: The buffer object + * + * Purge the contents of a bo, async if the bo is not idle. + * After a successful call, the bo is left unpopulated in + * system placement. The function may wait uninterruptible + * for idle on OOM. + * + * Return: 0 if successful, negative error code on failure. + */ int ttm_bo_pipeline_gutting(struct ttm_buffer_object *bo) { static const struct ttm_place sys_mem = { .mem_type = TTM_PL_SYSTEM }; struct ttm_buffer_object *ghost; + struct ttm_tt *ttm; int ret; - ret = ttm_buffer_object_transfer(bo, &ghost); + /* If already idle, no need for ghost object dance. */ + ret = ttm_bo_wait(bo, false, true); + if (ret != -EBUSY) { + if (!bo->ttm) { + /* See comment below about clearing. */ + ret = ttm_tt_create(bo, true); + if (ret) + return ret; + } else { + ttm_tt_unpopulate(bo->bdev, bo->ttm); + if (bo->type == ttm_bo_type_device) + ttm_tt_mark_for_clear(bo->ttm); + } + ttm_resource_free(bo, &bo->mem); + ttm_resource_alloc(bo, &sys_mem, &bo->mem); + + return 0; + } + + /* + * We need an unpopulated ttm_tt after giving our current one, + * if any, to the ghost object. And we can't afford to fail + * creating one *after* the operation. If the bo subsequently gets + * resurrected, make sure it's cleared (if ttm_bo_type_device) + * to avoid leaking sensitive information to user-space. + */ + + ttm = bo->ttm; + bo->ttm = NULL; + ret = ttm_tt_create(bo, true); + swap(bo->ttm, ttm); if (ret) return ret; + ret = ttm_buffer_object_transfer(bo, &ghost); + if (ret) { + ttm_tt_destroy(bo->bdev, ttm); + return ret; + } + ret = dma_resv_copy_fences(&ghost->base._resv, bo->base.resv); /* Last resort, wait for the BO to be idle when we are OOM */ if (ret) ttm_bo_wait(bo, false, false); - ttm_resource_alloc(bo, &sys_mem, &bo->mem); - bo->ttm = NULL; - dma_resv_unlock(&ghost->base._resv); ttm_bo_put(ghost); + bo->ttm = ttm; + ttm_resource_alloc(bo, &sys_mem, &bo->mem); return 0; } diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c index 0e41227116b1..913b330a234b 100644 --- a/drivers/gpu/drm/ttm/ttm_tt.c +++ b/drivers/gpu/drm/ttm/ttm_tt.c @@ -134,6 +134,11 @@ void ttm_tt_destroy_common(struct ttm_device *bdev, struct ttm_tt *ttm) } EXPORT_SYMBOL(ttm_tt_destroy_common); +void ttm_tt_mark_for_clear(struct ttm_tt *ttm) +{ + ttm->page_flags |= TTM_PAGE_FLAG_ZERO_ALLOC; +} + void ttm_tt_destroy(struct ttm_device *bdev, struct ttm_tt *ttm) { bdev->funcs->ttm_tt_destroy(bdev, ttm); diff --git a/include/drm/ttm/ttm_tt.h b/include/drm/ttm/ttm_tt.h index 3102059db726..daa9c4cf48bb 100644 --- a/include/drm/ttm/ttm_tt.h +++ b/include/drm/ttm/ttm_tt.h @@ -170,6 +170,16 @@ int ttm_tt_populate(struct ttm_device *bdev, struct ttm_tt *ttm, struct ttm_oper */ void ttm_tt_unpopulate(struct ttm_device *bdev, struct ttm_tt *ttm); +/** + * ttm_tt_mark_for_clear - Mark pages for clearing on populate. + * + * @ttm: Pointer to the ttm_tt structure + * + * Marks pages for clearing so that the next time the page vector is + * populated, the pages will be cleared. + */ +void ttm_tt_mark_for_clear(struct ttm_tt *ttm); + void ttm_tt_mgr_init(unsigned long num_pages, unsigned long num_dma32_pages); struct ttm_kmap_iter *ttm_kmap_iter_tt_init(struct ttm_kmap_iter_tt *iter_tt, -- 2.31.1