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=-0.7 required=3.0 tests=FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=no 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 97C25C3F2CE for ; Sun, 1 Mar 2020 13:50:21 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 12A5A214DB for ; Sun, 1 Mar 2020 13:50:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 12A5A214DB Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sina.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 712826B0005; Sun, 1 Mar 2020 08:50:20 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6EAC06B0006; Sun, 1 Mar 2020 08:50:20 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 64DF66B0007; Sun, 1 Mar 2020 08:50:20 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0006.hostedemail.com [216.40.44.6]) by kanga.kvack.org (Postfix) with ESMTP id 4ED416B0005 for ; Sun, 1 Mar 2020 08:50:20 -0500 (EST) Received: from smtpin05.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 1C38B181AEF0B for ; Sun, 1 Mar 2020 13:50:20 +0000 (UTC) X-FDA: 76546927800.05.trick29_5a02e3df84150 X-HE-Tag: trick29_5a02e3df84150 X-Filterd-Recvd-Size: 2878 Received: from r3-20.sinamail.sina.com.cn (r3-20.sinamail.sina.com.cn [202.108.3.20]) by imf37.hostedemail.com (Postfix) with SMTP for ; Sun, 1 Mar 2020 13:50:18 +0000 (UTC) Received: from unknown (HELO localhost.localdomain)([114.246.226.1]) by sina.com with ESMTP id 5E5BBD7100006F9A; Sun, 1 Mar 2020 21:49:38 +0800 (CST) X-Sender: hdanton@sina.com X-Auth-ID: hdanton@sina.com X-SMAIL-MID: 62609615073823 From: Hillf Danton To: Thomas Hellstrom Cc: linux-mm@kvack.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, pv-drivers@vmware.com, linux-graphics-maintainer@vmware.com, Thomas Hellstrom , Andrew Morton , "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: Re: [PATCH v4 5/9] drm/ttm, drm/vmwgfx: Support huge TTM pagefaults Date: Sun, 1 Mar 2020 21:49:28 +0800 Message-Id: <20200301134928.16128-1-hdanton@sina.com> In-Reply-To: <20200220122719.4302-1-thomas_os@shipmail.org> References: <20200220122719.4302-1-thomas_os@shipmail.org> MIME-Version: 1.0 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: On Thu, 20 Feb 2020 13:27:15 +0100 Thomas Hellstrom wrote: > + > +static vm_fault_t ttm_bo_vm_huge_fault(struct vm_fault *vmf, > + enum page_entry_size pe_size) > +{ > + struct vm_area_struct *vma =3D vmf->vma; > + pgprot_t prot; > + struct ttm_buffer_object *bo =3D vma->vm_private_data; > + vm_fault_t ret; > + pgoff_t fault_page_size =3D 0; > + bool write =3D vmf->flags & FAULT_FLAG_WRITE; > + > + switch (pe_size) { > + case PE_SIZE_PMD: > + fault_page_size =3D HPAGE_PMD_SIZE >> PAGE_SHIFT; > + break; > +#ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD > + case PE_SIZE_PUD: > + fault_page_size =3D HPAGE_PUD_SIZE >> PAGE_SHIFT; > + break; > +#endif > + default: > + WARN_ON_ONCE(1); > + return VM_FAULT_FALLBACK; > + } > + > + /* Fallback on write dirty-tracking or COW */ > + if (write && ttm_pgprot_is_wrprotecting(vma->vm_page_prot)) > + return VM_FAULT_FALLBACK; > + > + ret =3D ttm_bo_vm_reserve(bo, vmf); > + if (ret) > + return ret; > + > + prot =3D vm_get_page_prot(vma->vm_flags); > + ret =3D ttm_bo_vm_fault_reserved(vmf, prot, 1, fault_page_size); > + if (ret =3D=3D VM_FAULT_RETRY && !(vmf->flags & FAULT_FLAG_RETRY_NOWA= IT)) > + return ret; Seems it does not make much sense to check VM_FAULT_RETRY and return as at least resv lock is left behind without care. > + > + dma_resv_unlock(bo->base.resv); > + > + return ret; > +}