From: "Thomas Hellström (VMware)" <thomas_os@shipmail.org>
To: airlied@gmail.com, airlied@redhat.com,
dri-devel@lists.freedesktop.org,
"Christian König" <christian.koenig@amd.com>
Cc: Alex Xu <alex_y_xu@yahoo.ca>
Subject: Re: [PATCH] drm/ttm: Temporarily disable the huge_fault() callback
Date: Thu, 9 Apr 2020 18:51:35 +0200 [thread overview]
Message-ID: <85a0a97b-0c8f-9121-94de-1f794c2bd294@shipmail.org> (raw)
In-Reply-To: <20200409164925.11912-1-thomas_os@shipmail.org>
Dave, Christian,
Could any of you pick this up (I'm currently on vacation) to have a
chance of getting it in before -rc1?
Thanks,
Thomas
On 4/9/20 6:49 PM, Thomas Hellström (VMware) wrote:
> From: "Thomas Hellstrom (VMware)" <thomas_os@shipmail.org>
>
> With amdgpu and CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y, there are
> errors like:
> BUG: non-zero pgtables_bytes on freeing mm
> and:
> BUG: Bad rss-counter state
> with TTM transparent huge-pages.
> Until we've figured out what other TTM drivers do differently compared to
> vmwgfx, disable the huge_fault() callback, eliminating transhuge
> page-table entries.
>
> Cc: Christian König <christian.koenig@amd.com>
> Signed-off-by: Thomas Hellstrom (VMware) <thomas_os@shipmail.org>
> Reported-by: Alex Xu (Hello71) <alex_y_xu@yahoo.ca>
> Tested-by: Alex Xu (Hello71) <alex_y_xu@yahoo.ca>
> Acked-by: Christian König <christian.koenig@amd.com>
> ---
> drivers/gpu/drm/ttm/ttm_bo_vm.c | 63 ---------------------------------
> 1 file changed, 63 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c
> index 6ee3b96f0d13..0ad30b112982 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo_vm.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c
> @@ -442,66 +442,6 @@ vm_fault_t ttm_bo_vm_fault(struct vm_fault *vmf)
> }
> EXPORT_SYMBOL(ttm_bo_vm_fault);
>
> -#ifdef CONFIG_TRANSPARENT_HUGEPAGE
> -/**
> - * ttm_pgprot_is_wrprotecting - Is a page protection value write-protecting?
> - * @prot: The page protection value
> - *
> - * Return: true if @prot is write-protecting. false otherwise.
> - */
> -static bool ttm_pgprot_is_wrprotecting(pgprot_t prot)
> -{
> - /*
> - * This is meant to say "pgprot_wrprotect(prot) == prot" in a generic
> - * way. Unfortunately there is no generic pgprot_wrprotect.
> - */
> - return pte_val(pte_wrprotect(__pte(pgprot_val(prot)))) ==
> - pgprot_val(prot);
> -}
> -
> -static vm_fault_t ttm_bo_vm_huge_fault(struct vm_fault *vmf,
> - enum page_entry_size pe_size)
> -{
> - struct vm_area_struct *vma = vmf->vma;
> - pgprot_t prot;
> - struct ttm_buffer_object *bo = vma->vm_private_data;
> - vm_fault_t ret;
> - pgoff_t fault_page_size = 0;
> - bool write = vmf->flags & FAULT_FLAG_WRITE;
> -
> - switch (pe_size) {
> - case PE_SIZE_PMD:
> - fault_page_size = HPAGE_PMD_SIZE >> PAGE_SHIFT;
> - break;
> -#ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
> - case PE_SIZE_PUD:
> - fault_page_size = 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 = ttm_bo_vm_reserve(bo, vmf);
> - if (ret)
> - return ret;
> -
> - prot = vm_get_page_prot(vma->vm_flags);
> - ret = ttm_bo_vm_fault_reserved(vmf, prot, 1, fault_page_size);
> - if (ret == VM_FAULT_RETRY && !(vmf->flags & FAULT_FLAG_RETRY_NOWAIT))
> - return ret;
> -
> - dma_resv_unlock(bo->base.resv);
> -
> - return ret;
> -}
> -#endif
> -
> void ttm_bo_vm_open(struct vm_area_struct *vma)
> {
> struct ttm_buffer_object *bo = vma->vm_private_data;
> @@ -604,9 +544,6 @@ static const struct vm_operations_struct ttm_bo_vm_ops = {
> .open = ttm_bo_vm_open,
> .close = ttm_bo_vm_close,
> .access = ttm_bo_vm_access,
> -#ifdef CONFIG_TRANSPARENT_HUGEPAGE
> - .huge_fault = ttm_bo_vm_huge_fault,
> -#endif
> };
>
> static struct ttm_buffer_object *ttm_bo_vm_lookup(struct ttm_bo_device *bdev,
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2020-04-09 16:51 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-09 16:49 [PATCH] drm/ttm: Temporarily disable the huge_fault() callback Thomas Hellström (VMware)
2020-04-09 16:51 ` Thomas Hellström (VMware) [this message]
2020-04-09 20:34 ` Dave Airlie
-- strict thread matches above, loose matches on Subject: below --
2020-04-08 11:53 Thomas Hellström (VMware)
2020-04-08 12:01 ` Thomas Hellström (VMware)
2020-04-08 12:19 ` Christian König
2020-04-08 13:49 ` Thomas Hellström (VMware)
2020-04-08 14:04 ` Christian König
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=85a0a97b-0c8f-9121-94de-1f794c2bd294@shipmail.org \
--to=thomas_os@shipmail.org \
--cc=airlied@gmail.com \
--cc=airlied@redhat.com \
--cc=alex_y_xu@yahoo.ca \
--cc=christian.koenig@amd.com \
--cc=dri-devel@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.