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=-6.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,UNWANTED_LANGUAGE_BODY,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 CD2ECC11D0F for ; Thu, 20 Feb 2020 12:27:52 +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 9D3DF24656 for ; Thu, 20 Feb 2020 12:27:52 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=shipmail.org header.i=@shipmail.org header.b="Iu4ligxm" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9D3DF24656 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=shipmail.org 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 230B46ED53; Thu, 20 Feb 2020 12:27:45 +0000 (UTC) Received: from pio-pvt-msa3.bahnhof.se (pio-pvt-msa3.bahnhof.se [79.136.2.42]) by gabe.freedesktop.org (Postfix) with ESMTPS id 83D976E200 for ; Thu, 20 Feb 2020 12:27:43 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by pio-pvt-msa3.bahnhof.se (Postfix) with ESMTP id D8CE03F32A; Thu, 20 Feb 2020 13:27:41 +0100 (CET) Authentication-Results: pio-pvt-msa3.bahnhof.se; dkim=pass (1024-bit key; unprotected) header.d=shipmail.org header.i=@shipmail.org header.b=Iu4ligxm; dkim-atps=neutral X-Virus-Scanned: Debian amavisd-new at bahnhof.se Received: from pio-pvt-msa3.bahnhof.se ([127.0.0.1]) by localhost (pio-pvt-msa3.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zc4uuzZMDVRb; Thu, 20 Feb 2020 13:27:39 +0100 (CET) Received: from mail1.shipmail.org (h-205-35.A357.priv.bahnhof.se [155.4.205.35]) (Authenticated sender: mb878879) by pio-pvt-msa3.bahnhof.se (Postfix) with ESMTPA id CD99A3F3A0; Thu, 20 Feb 2020 13:27:38 +0100 (CET) Received: from localhost.localdomain.localdomain (h-205-35.A357.priv.bahnhof.se [155.4.205.35]) by mail1.shipmail.org (Postfix) with ESMTPSA id 525A2360549; Thu, 20 Feb 2020 13:27:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=shipmail.org; s=mail; t=1582201655; bh=2LUNS0ihPNGa71h7AdkyE1bKBSLMu6PTF7hbfe1+Dkk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Iu4ligxmua0yVOZE+J9dJHkYQD+vGs7Pi2NBw2yBv1pS9A0ZbmotXrfLhBVOnP+xB x64JU8e4hD0aSxLTKsk0/JBSdaurSRmrZ0x3viHqOs5hG1GGfMRRtyXyst9hID68hz IUt553YdOn6Is6IhJENw3wgdgyKHMm6JLwj64zYU= From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m=20=28VMware=29?= To: linux-mm@kvack.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 8/9] drm/vmwgfx: Introduce a huge page aligning TTM range manager Date: Thu, 20 Feb 2020 13:27:18 +0100 Message-Id: <20200220122719.4302-9-thomas_os@shipmail.org> X-Mailer: git-send-email 2.21.1 In-Reply-To: <20200220122719.4302-1-thomas_os@shipmail.org> References: <20200220122719.4302-1-thomas_os@shipmail.org> MIME-Version: 1.0 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: Thomas Hellstrom , Michal Hocko , pv-drivers@vmware.com, Roland Scheidegger , Dan Williams , Ralph Campbell , "Matthew Wilcox \(Oracle\)" , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , linux-graphics-maintainer@vmware.com, Andrew Morton , =?UTF-8?q?Christian=20K=C3=B6nig?= , "Kirill A. Shutemov" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" RnJvbTogVGhvbWFzIEhlbGxzdHJvbSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgoKVXNpbmcgaHVn ZSBwYWdlLXRhYmxlIGVudHJpZXMgcmVxdWlyZXMgdGhhdCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBv ZiB0aGUKc3RhcnQgb2YgYSBidWZmZXIgb2JqZWN0IGlzIGh1Z2UgcGFnZSBzaXplIGFsaWduZWQu Ck1ha2UgYSBzcGVjaWFsIHZlcnNpb24gb2YgdGhlIFRUTSByYW5nZSBtYW5hZ2VyIHRoYXQgYWNj b21wbGlzaGVzIHRoaXMsCmJ1dCBmYWxscyBiYWNrIHRvIGEgc21hbGxlciBwYWdlIHNpemUgYWxp Z25tZW50IChQVUQtPlBNRCwgUE1ELT5OT1JNQUwpCnRvIGF2b2lkIGV2aWN0aW9uLgpJZiBvdGhl ciBkcml2ZXJzIHdhbnQgdG8gdXNlIGl0IGluIHRoZSBmdXR1cmUsIGl0IGNhbiBiZSBtYWRlIGEK VFRNIGdlbmVyaWMgaGVscGVyLiBOb3RlIHRoYXQgZHJpdmVycyBjYW4gZm9yY2UgZXZpY3Rpb24g Zm9yIGEgY2VydGFpbgphbGlnbm1lbnQgYnkgYXNzaWduaW5nIHRoZSBUVE0gR1BVIGFsaWdubWVu dCBjb3JyZXNwb25kaW5nbHkuCgpDYzogQW5kcmV3IE1vcnRvbiA8YWtwbUBsaW51eC1mb3VuZGF0 aW9uLm9yZz4KQ2M6IE1pY2hhbCBIb2NrbyA8bWhvY2tvQHN1c2UuY29tPgpDYzogIk1hdHRoZXcg V2lsY294IChPcmFjbGUpIiA8d2lsbHlAaW5mcmFkZWFkLm9yZz4KQ2M6ICJLaXJpbGwgQS4gU2h1 dGVtb3YiIDxraXJpbGwuc2h1dGVtb3ZAbGludXguaW50ZWwuY29tPgpDYzogUmFscGggQ2FtcGJl bGwgPHJjYW1wYmVsbEBudmlkaWEuY29tPgpDYzogIkrDqXLDtG1lIEdsaXNzZSIgPGpnbGlzc2VA cmVkaGF0LmNvbT4KQ2M6ICJDaHJpc3RpYW4gS8O2bmlnIiA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQu Y29tPgpDYzogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+ClNpZ25lZC1v ZmYtYnk6IFRob21hcyBIZWxsc3Ryb20gPHRoZWxsc3Ryb21Adm13YXJlLmNvbT4KUmV2aWV3ZWQt Ynk6IFJvbGFuZCBTY2hlaWRlZ2dlciA8c3JvbGFuZEB2bXdhcmUuY29tPgpBY2tlZC1ieTogQ2hy aXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgotLS0KIGRyaXZlcnMvZ3B1 L2RybS92bXdnZngvTWFrZWZpbGUgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X2Rydi5oIHwgICA3ICsrCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF90aHAu YyB8IDE2NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDE3 NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfdGhwLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2Vm aWxlIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9NYWtlZmlsZQppbmRleCBjODc3YTIxYTA3Mzku LjQyMWRkMmE0OTdhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9NYWtlZmls ZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlCkBAIC0xMSw0ICsxMSw1IEBA IHZtd2dmeC15IDo9IHZtd2dmeF9leGVjYnVmLm8gdm13Z2Z4X2dtci5vIHZtd2dmeF9rbXMubyB2 bXdnZnhfZHJ2Lm8gXAogCSAgICB2bXdnZnhfdmFsaWRhdGlvbi5vIHZtd2dmeF9wYWdlX2RpcnR5 Lm8gXAogCSAgICB0dG1fb2JqZWN0Lm8gdHRtX2xvY2subwogCit2bXdnZngtJChDT05GSUdfVFJB TlNQQVJFTlRfSFVHRVBBR0UpICs9IHZtd2dmeF90aHAubwogb2JqLSQoQ09ORklHX0RSTV9WTVdH RlgpIDo9IHZtd2dmeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCmluZGV4IDgyZDg2 ZjJkMjU2OS4uMDYyNjcxODRhYTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4 L3Ztd2dmeF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaApA QCAtMTQzMyw2ICsxNDMzLDEzIEBAIHZtX2ZhdWx0X3Qgdm13X2JvX3ZtX2h1Z2VfZmF1bHQoc3Ry dWN0IHZtX2ZhdWx0ICp2bWYsCiAJCQkJZW51bSBwYWdlX2VudHJ5X3NpemUgcGVfc2l6ZSk7CiAj ZW5kaWYKIAorLyogVHJhbnNwYXJlbnQgaHVnZXBhZ2Ugc3VwcG9ydCAtIHZtd2dmeF90aHAuYyAq LworI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQorZXh0ZXJuIGNvbnN0IHN0cnVj dCB0dG1fbWVtX3R5cGVfbWFuYWdlcl9mdW5jIHZtd190aHBfZnVuYzsKKyNlbHNlCisjZGVmaW5l IHZtd190aHBfZnVuYyB0dG1fYm9fbWFuYWdlcl9mdW5jCisjZW5kaWYKKwogLyoqCiAgKiBWTVdf REVCVUdfS01TIC0gRGVidWcgb3V0cHV0IGZvciBrZXJuZWwgbW9kZS1zZXR0aW5nCiAgKgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfdGhwLmMgYi9kcml2ZXJzL2dw dS9kcm0vdm13Z2Z4L3Ztd2dmeF90aHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLmI3YzgxNmJhNzE2NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS92bXdnZngvdm13Z2Z4X3RocC5jCkBAIC0wLDAgKzEsMTY2IEBACisvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQKKy8qCisgKiBIdWdlIHBhZ2UtdGFibGUtZW50cnkg c3VwcG9ydCBmb3IgSU8gbWVtb3J5LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IFZt d2FyZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkZC4KKyAqLworI2luY2x1ZGUgInZtd2dmeF9k cnYuaCIKKyNpbmNsdWRlIDxkcm0vdHRtL3R0bV9tb2R1bGUuaD4KKyNpbmNsdWRlIDxkcm0vdHRt L3R0bV9ib19kcml2ZXIuaD4KKyNpbmNsdWRlIDxkcm0vdHRtL3R0bV9wbGFjZW1lbnQuaD4KKwor LyoqCisgKiBzdHJ1Y3Qgdm13X3RocF9tYW5hZ2VyIC0gUmFuZ2UgbWFuYWdlciBpbXBsZW1lbnRp bmcgaHVnZSBwYWdlIGFsaWdubWVudAorICoKKyAqIEBtbTogVGhlIHVuZGVybHlpbmcgcmFuZ2Ug bWFuYWdlci4gUHJvdGVjdGVkIGJ5IEBsb2NrLgorICogQGxvY2s6IE1hbmFnZXIgbG9jay4KKyAq Lworc3RydWN0IHZtd190aHBfbWFuYWdlciB7CisJc3RydWN0IGRybV9tbSBtbTsKKwlzcGlubG9j a190IGxvY2s7Cit9OworCitzdGF0aWMgaW50IHZtd190aHBfaW5zZXJ0X2FsaWduZWQoc3RydWN0 IGRybV9tbSAqbW0sIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwKKwkJCQkgIHVuc2lnbmVkIGxv bmcgYWxpZ25fcGFnZXMsCisJCQkJICBjb25zdCBzdHJ1Y3QgdHRtX3BsYWNlICpwbGFjZSwKKwkJ CQkgIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtLAorCQkJCSAgdW5zaWduZWQgbG9uZyBscGZuLAor CQkJCSAgZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZSkKK3sKKwlpZiAoYWxpZ25fcGFnZXMg Pj0gbWVtLT5wYWdlX2FsaWdubWVudCAmJgorCSAgICAoIW1lbS0+cGFnZV9hbGlnbm1lbnQgfHwg YWxpZ25fcGFnZXMgJSBtZW0tPnBhZ2VfYWxpZ25tZW50ID09IDApKSB7CisJCXJldHVybiBkcm1f bW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UobW0sIG5vZGUsCisJCQkJCQkgICBtZW0tPm51bV9wYWdl cywKKwkJCQkJCSAgIGFsaWduX3BhZ2VzLCAwLAorCQkJCQkJICAgcGxhY2UtPmZwZm4sIGxwZm4s IG1vZGUpOworCX0KKworCXJldHVybiAtRU5PU1BDOworfQorCitzdGF0aWMgaW50IHZtd190aHBf Z2V0X25vZGUoc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCisJCQkgICAgc3RydWN0 IHR0bV9idWZmZXJfb2JqZWN0ICpibywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdHRtX3BsYWNlICpw bGFjZSwKKwkJCSAgICBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSkKK3sKKwlzdHJ1Y3Qgdm13X3Ro cF9tYW5hZ2VyICpybWFuID0gKHN0cnVjdCB2bXdfdGhwX21hbmFnZXIgKikgbWFuLT5wcml2Owor CXN0cnVjdCBkcm1fbW0gKm1tID0gJnJtYW4tPm1tOworCXN0cnVjdCBkcm1fbW1fbm9kZSAqbm9k ZTsKKwl1bnNpZ25lZCBsb25nIGFsaWduX3BhZ2VzOworCXVuc2lnbmVkIGxvbmcgbHBmbjsKKwll bnVtIGRybV9tbV9pbnNlcnRfbW9kZSBtb2RlID0gRFJNX01NX0lOU0VSVF9CRVNUOworCWludCBy ZXQ7CisKKwlub2RlID0ga3phbGxvYyhzaXplb2YoKm5vZGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IW5vZGUpCisJCXJldHVybiAtRU5PTUVNOworCisJbHBmbiA9IHBsYWNlLT5scGZuOworCWlmICgh bHBmbikKKwkJbHBmbiA9IG1hbi0+c2l6ZTsKKworCW1vZGUgPSBEUk1fTU1fSU5TRVJUX0JFU1Q7 CisJaWYgKHBsYWNlLT5mbGFncyAmIFRUTV9QTF9GTEFHX1RPUERPV04pCisJCW1vZGUgPSBEUk1f TU1fSU5TRVJUX0hJR0g7CisKKwlzcGluX2xvY2soJnJtYW4tPmxvY2spOworCWlmIChJU19FTkFC TEVEKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKSkgeworCQlhbGln bl9wYWdlcyA9IChIUEFHRV9QVURfU0laRSA+PiBQQUdFX1NISUZUKTsKKwkJaWYgKG1lbS0+bnVt X3BhZ2VzID49IGFsaWduX3BhZ2VzKSB7CisJCQlyZXQgPSB2bXdfdGhwX2luc2VydF9hbGlnbmVk KG1tLCBub2RlLCBhbGlnbl9wYWdlcywKKwkJCQkJCSAgICAgcGxhY2UsIG1lbSwgbHBmbiwgbW9k ZSk7CisJCQlpZiAoIXJldCkKKwkJCQlnb3RvIGZvdW5kX3VubG9jazsKKwkJfQorCX0KKworCWFs aWduX3BhZ2VzID0gKEhQQUdFX1BNRF9TSVpFID4+IFBBR0VfU0hJRlQpOworCWlmIChtZW0tPm51 bV9wYWdlcyA+PSBhbGlnbl9wYWdlcykgeworCQlyZXQgPSB2bXdfdGhwX2luc2VydF9hbGlnbmVk KG1tLCBub2RlLCBhbGlnbl9wYWdlcywgcGxhY2UsIG1lbSwKKwkJCQkJICAgICBscGZuLCBtb2Rl KTsKKwkJaWYgKCFyZXQpCisJCQlnb3RvIGZvdW5kX3VubG9jazsKKwl9CisKKwlyZXQgPSBkcm1f bW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UobW0sIG5vZGUsIG1lbS0+bnVtX3BhZ2VzLAorCQkJCQkg IG1lbS0+cGFnZV9hbGlnbm1lbnQsIDAsCisJCQkJCSAgcGxhY2UtPmZwZm4sIGxwZm4sIG1vZGUp OworZm91bmRfdW5sb2NrOgorCXNwaW5fdW5sb2NrKCZybWFuLT5sb2NrKTsKKworCWlmICh1bmxp a2VseShyZXQpKSB7CisJCWtmcmVlKG5vZGUpOworCX0gZWxzZSB7CisJCW1lbS0+bW1fbm9kZSA9 IG5vZGU7CisJCW1lbS0+c3RhcnQgPSBub2RlLT5zdGFydDsKKwl9CisKKwlyZXR1cm4gMDsKK30K KworCisKK3N0YXRpYyB2b2lkIHZtd190aHBfcHV0X25vZGUoc3RydWN0IHR0bV9tZW1fdHlwZV9t YW5hZ2VyICptYW4sCisJCQkgICAgIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQoreworCXN0cnVj dCB2bXdfdGhwX21hbmFnZXIgKnJtYW4gPSAoc3RydWN0IHZtd190aHBfbWFuYWdlciAqKSBtYW4t PnByaXY7CisKKwlpZiAobWVtLT5tbV9ub2RlKSB7CisJCXNwaW5fbG9jaygmcm1hbi0+bG9jayk7 CisJCWRybV9tbV9yZW1vdmVfbm9kZShtZW0tPm1tX25vZGUpOworCQlzcGluX3VubG9jaygmcm1h bi0+bG9jayk7CisKKwkJa2ZyZWUobWVtLT5tbV9ub2RlKTsKKwkJbWVtLT5tbV9ub2RlID0gTlVM TDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdm13X3RocF9pbml0KHN0cnVjdCB0dG1fbWVtX3R5cGVf bWFuYWdlciAqbWFuLAorCQkJdW5zaWduZWQgbG9uZyBwX3NpemUpCit7CisJc3RydWN0IHZtd190 aHBfbWFuYWdlciAqcm1hbjsKKworCXJtYW4gPSBremFsbG9jKHNpemVvZigqcm1hbiksIEdGUF9L RVJORUwpOworCWlmICghcm1hbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkcm1fbW1faW5pdCgm cm1hbi0+bW0sIDAsIHBfc2l6ZSk7CisJc3Bpbl9sb2NrX2luaXQoJnJtYW4tPmxvY2spOworCW1h bi0+cHJpdiA9IHJtYW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdm13X3RocF90YWtl ZG93bihzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbikKK3sKKwlzdHJ1Y3Qgdm13X3Ro cF9tYW5hZ2VyICpybWFuID0gKHN0cnVjdCB2bXdfdGhwX21hbmFnZXIgKikgbWFuLT5wcml2Owor CXN0cnVjdCBkcm1fbW0gKm1tID0gJnJtYW4tPm1tOworCisJc3Bpbl9sb2NrKCZybWFuLT5sb2Nr KTsKKwlpZiAoZHJtX21tX2NsZWFuKG1tKSkgeworCQlkcm1fbW1fdGFrZWRvd24obW0pOworCQlz cGluX3VubG9jaygmcm1hbi0+bG9jayk7CisJCWtmcmVlKHJtYW4pOworCQltYW4tPnByaXYgPSBO VUxMOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2soJnJtYW4tPmxvY2spOworCXJldHVy biAtRUJVU1k7Cit9CisKK3N0YXRpYyB2b2lkIHZtd190aHBfZGVidWcoc3RydWN0IHR0bV9tZW1f dHlwZV9tYW5hZ2VyICptYW4sCisJCQkgIHN0cnVjdCBkcm1fcHJpbnRlciAqcHJpbnRlcikKK3sK KwlzdHJ1Y3Qgdm13X3RocF9tYW5hZ2VyICpybWFuID0gKHN0cnVjdCB2bXdfdGhwX21hbmFnZXIg KikgbWFuLT5wcml2OworCisJc3Bpbl9sb2NrKCZybWFuLT5sb2NrKTsKKwlkcm1fbW1fcHJpbnQo JnJtYW4tPm1tLCBwcmludGVyKTsKKwlzcGluX3VubG9jaygmcm1hbi0+bG9jayk7Cit9CisKK2Nv bnN0IHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlcl9mdW5jIHZtd190aHBfZnVuYyA9IHsKKwku aW5pdCA9IHZtd190aHBfaW5pdCwKKwkudGFrZWRvd24gPSB2bXdfdGhwX3Rha2Vkb3duLAorCS5n ZXRfbm9kZSA9IHZtd190aHBfZ2V0X25vZGUsCisJLnB1dF9ub2RlID0gdm13X3RocF9wdXRfbm9k ZSwKKwkuZGVidWcgPSB2bXdfdGhwX2RlYnVnCit9OwotLSAKMi4yMS4xCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK 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=-9.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, 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 2C039C11D05 for ; Thu, 20 Feb 2020 12:28:04 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id C7A8A24673 for ; Thu, 20 Feb 2020 12:28:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=shipmail.org header.i=@shipmail.org header.b="Iu4ligxm" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C7A8A24673 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=shipmail.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 30F4B6B000D; Thu, 20 Feb 2020 07:27:45 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 289F96B0037; Thu, 20 Feb 2020 07:27:45 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F07536B000D; Thu, 20 Feb 2020 07:27:44 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0225.hostedemail.com [216.40.44.225]) by kanga.kvack.org (Postfix) with ESMTP id ADEF46B000E for ; Thu, 20 Feb 2020 07:27:44 -0500 (EST) Received: from smtpin06.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 312C68248047 for ; Thu, 20 Feb 2020 12:27:44 +0000 (UTC) X-FDA: 76510431648.06.sense76_6086ef786b838 X-HE-Tag: sense76_6086ef786b838 X-Filterd-Recvd-Size: 9963 Received: from pio-pvt-msa3.bahnhof.se (pio-pvt-msa3.bahnhof.se [79.136.2.42]) by imf30.hostedemail.com (Postfix) with ESMTP for ; Thu, 20 Feb 2020 12:27:43 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by pio-pvt-msa3.bahnhof.se (Postfix) with ESMTP id D8CE03F32A; Thu, 20 Feb 2020 13:27:41 +0100 (CET) Authentication-Results: pio-pvt-msa3.bahnhof.se; dkim=pass (1024-bit key; unprotected) header.d=shipmail.org header.i=@shipmail.org header.b=Iu4ligxm; dkim-atps=neutral X-Virus-Scanned: Debian amavisd-new at bahnhof.se Received: from pio-pvt-msa3.bahnhof.se ([127.0.0.1]) by localhost (pio-pvt-msa3.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zc4uuzZMDVRb; Thu, 20 Feb 2020 13:27:39 +0100 (CET) Received: from mail1.shipmail.org (h-205-35.A357.priv.bahnhof.se [155.4.205.35]) (Authenticated sender: mb878879) by pio-pvt-msa3.bahnhof.se (Postfix) with ESMTPA id CD99A3F3A0; Thu, 20 Feb 2020 13:27:38 +0100 (CET) Received: from localhost.localdomain.localdomain (h-205-35.A357.priv.bahnhof.se [155.4.205.35]) by mail1.shipmail.org (Postfix) with ESMTPSA id 525A2360549; Thu, 20 Feb 2020 13:27:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=shipmail.org; s=mail; t=1582201655; bh=2LUNS0ihPNGa71h7AdkyE1bKBSLMu6PTF7hbfe1+Dkk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Iu4ligxmua0yVOZE+J9dJHkYQD+vGs7Pi2NBw2yBv1pS9A0ZbmotXrfLhBVOnP+xB x64JU8e4hD0aSxLTKsk0/JBSdaurSRmrZ0x3viHqOs5hG1GGfMRRtyXyst9hID68hz IUt553YdOn6Is6IhJENw3wgdgyKHMm6JLwj64zYU= From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m=20=28VMware=29?= To: linux-mm@kvack.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: pv-drivers@vmware.com, linux-graphics-maintainer@vmware.com, Thomas Hellstrom , Andrew Morton , Michal Hocko , "Matthew Wilcox (Oracle)" , "Kirill A. Shutemov" , Ralph Campbell , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , =?UTF-8?q?Christian=20K=C3=B6nig?= , Dan Williams , Roland Scheidegger Subject: [PATCH v4 8/9] drm/vmwgfx: Introduce a huge page aligning TTM range manager Date: Thu, 20 Feb 2020 13:27:18 +0100 Message-Id: <20200220122719.4302-9-thomas_os@shipmail.org> X-Mailer: git-send-email 2.21.1 In-Reply-To: <20200220122719.4302-1-thomas_os@shipmail.org> References: <20200220122719.4302-1-thomas_os@shipmail.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Thomas Hellstrom Using huge page-table entries requires that the physical address of the start of a buffer object is huge page size aligned. Make a special version of the TTM range manager that accomplishes this, but falls back to a smaller page size alignment (PUD->PMD, PMD->NORMAL) to avoid eviction. If other drivers want to use it in the future, it can be made a TTM generic helper. Note that drivers can force eviction for a certain alignment by assigning the TTM GPU alignment correspondingly. Cc: Andrew Morton Cc: Michal Hocko Cc: "Matthew Wilcox (Oracle)" Cc: "Kirill A. Shutemov" Cc: Ralph Campbell Cc: "J=C3=A9r=C3=B4me Glisse" Cc: "Christian K=C3=B6nig" Cc: Dan Williams Signed-off-by: Thomas Hellstrom Reviewed-by: Roland Scheidegger Acked-by: Christian K=C3=B6nig --- drivers/gpu/drm/vmwgfx/Makefile | 1 + drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 7 ++ drivers/gpu/drm/vmwgfx/vmwgfx_thp.c | 166 ++++++++++++++++++++++++++++ 3 files changed, 174 insertions(+) create mode 100644 drivers/gpu/drm/vmwgfx/vmwgfx_thp.c diff --git a/drivers/gpu/drm/vmwgfx/Makefile b/drivers/gpu/drm/vmwgfx/Mak= efile index c877a21a0739..421dd2a497a5 100644 --- a/drivers/gpu/drm/vmwgfx/Makefile +++ b/drivers/gpu/drm/vmwgfx/Makefile @@ -11,4 +11,5 @@ vmwgfx-y :=3D vmwgfx_execbuf.o vmwgfx_gmr.o vmwgfx_kms.= o vmwgfx_drv.o \ vmwgfx_validation.o vmwgfx_page_dirty.o \ ttm_object.o ttm_lock.o =20 +vmwgfx-$(CONFIG_TRANSPARENT_HUGEPAGE) +=3D vmwgfx_thp.o obj-$(CONFIG_DRM_VMWGFX) :=3D vmwgfx.o diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx= /vmwgfx_drv.h index 82d86f2d2569..06267184aa0a 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h @@ -1433,6 +1433,13 @@ vm_fault_t vmw_bo_vm_huge_fault(struct vm_fault *v= mf, enum page_entry_size pe_size); #endif =20 +/* Transparent hugepage support - vmwgfx_thp.c */ +#ifdef CONFIG_TRANSPARENT_HUGEPAGE +extern const struct ttm_mem_type_manager_func vmw_thp_func; +#else +#define vmw_thp_func ttm_bo_manager_func +#endif + /** * VMW_DEBUG_KMS - Debug output for kernel mode-setting * diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_thp.c b/drivers/gpu/drm/vmwgfx= /vmwgfx_thp.c new file mode 100644 index 000000000000..b7c816ba7166 --- /dev/null +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_thp.c @@ -0,0 +1,166 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT +/* + * Huge page-table-entry support for IO memory. + * + * Copyright (C) 2007-2019 Vmware, Inc. All rights reservedd. + */ +#include "vmwgfx_drv.h" +#include +#include +#include + +/** + * struct vmw_thp_manager - Range manager implementing huge page alignme= nt + * + * @mm: The underlying range manager. Protected by @lock. + * @lock: Manager lock. + */ +struct vmw_thp_manager { + struct drm_mm mm; + spinlock_t lock; +}; + +static int vmw_thp_insert_aligned(struct drm_mm *mm, struct drm_mm_node = *node, + unsigned long align_pages, + const struct ttm_place *place, + struct ttm_mem_reg *mem, + unsigned long lpfn, + enum drm_mm_insert_mode mode) +{ + if (align_pages >=3D mem->page_alignment && + (!mem->page_alignment || align_pages % mem->page_alignment =3D=3D 0= )) { + return drm_mm_insert_node_in_range(mm, node, + mem->num_pages, + align_pages, 0, + place->fpfn, lpfn, mode); + } + + return -ENOSPC; +} + +static int vmw_thp_get_node(struct ttm_mem_type_manager *man, + struct ttm_buffer_object *bo, + const struct ttm_place *place, + struct ttm_mem_reg *mem) +{ + struct vmw_thp_manager *rman =3D (struct vmw_thp_manager *) man->priv; + struct drm_mm *mm =3D &rman->mm; + struct drm_mm_node *node; + unsigned long align_pages; + unsigned long lpfn; + enum drm_mm_insert_mode mode =3D DRM_MM_INSERT_BEST; + int ret; + + node =3D kzalloc(sizeof(*node), GFP_KERNEL); + if (!node) + return -ENOMEM; + + lpfn =3D place->lpfn; + if (!lpfn) + lpfn =3D man->size; + + mode =3D DRM_MM_INSERT_BEST; + if (place->flags & TTM_PL_FLAG_TOPDOWN) + mode =3D DRM_MM_INSERT_HIGH; + + spin_lock(&rman->lock); + if (IS_ENABLED(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD)) { + align_pages =3D (HPAGE_PUD_SIZE >> PAGE_SHIFT); + if (mem->num_pages >=3D align_pages) { + ret =3D vmw_thp_insert_aligned(mm, node, align_pages, + place, mem, lpfn, mode); + if (!ret) + goto found_unlock; + } + } + + align_pages =3D (HPAGE_PMD_SIZE >> PAGE_SHIFT); + if (mem->num_pages >=3D align_pages) { + ret =3D vmw_thp_insert_aligned(mm, node, align_pages, place, mem, + lpfn, mode); + if (!ret) + goto found_unlock; + } + + ret =3D drm_mm_insert_node_in_range(mm, node, mem->num_pages, + mem->page_alignment, 0, + place->fpfn, lpfn, mode); +found_unlock: + spin_unlock(&rman->lock); + + if (unlikely(ret)) { + kfree(node); + } else { + mem->mm_node =3D node; + mem->start =3D node->start; + } + + return 0; +} + + + +static void vmw_thp_put_node(struct ttm_mem_type_manager *man, + struct ttm_mem_reg *mem) +{ + struct vmw_thp_manager *rman =3D (struct vmw_thp_manager *) man->priv; + + if (mem->mm_node) { + spin_lock(&rman->lock); + drm_mm_remove_node(mem->mm_node); + spin_unlock(&rman->lock); + + kfree(mem->mm_node); + mem->mm_node =3D NULL; + } +} + +static int vmw_thp_init(struct ttm_mem_type_manager *man, + unsigned long p_size) +{ + struct vmw_thp_manager *rman; + + rman =3D kzalloc(sizeof(*rman), GFP_KERNEL); + if (!rman) + return -ENOMEM; + + drm_mm_init(&rman->mm, 0, p_size); + spin_lock_init(&rman->lock); + man->priv =3D rman; + return 0; +} + +static int vmw_thp_takedown(struct ttm_mem_type_manager *man) +{ + struct vmw_thp_manager *rman =3D (struct vmw_thp_manager *) man->priv; + struct drm_mm *mm =3D &rman->mm; + + spin_lock(&rman->lock); + if (drm_mm_clean(mm)) { + drm_mm_takedown(mm); + spin_unlock(&rman->lock); + kfree(rman); + man->priv =3D NULL; + return 0; + } + spin_unlock(&rman->lock); + return -EBUSY; +} + +static void vmw_thp_debug(struct ttm_mem_type_manager *man, + struct drm_printer *printer) +{ + struct vmw_thp_manager *rman =3D (struct vmw_thp_manager *) man->priv; + + spin_lock(&rman->lock); + drm_mm_print(&rman->mm, printer); + spin_unlock(&rman->lock); +} + +const struct ttm_mem_type_manager_func vmw_thp_func =3D { + .init =3D vmw_thp_init, + .takedown =3D vmw_thp_takedown, + .get_node =3D vmw_thp_get_node, + .put_node =3D vmw_thp_put_node, + .debug =3D vmw_thp_debug +}; --=20 2.21.1