Messages in this thread | | | Subject | Re: [RFC PATCH 1/2] mm,drm/ttm: Block fast GUP to TTM huge pages | From | Thomas Hellström (Intel) <> | Date | Tue, 23 Mar 2021 18:06:53 +0100 |
| |
On 3/23/21 5:37 PM, Jason Gunthorpe wrote: > On Tue, Mar 23, 2021 at 05:34:51PM +0100, Thomas Hellström (Intel) wrote: > >>>> @@ -210,6 +211,20 @@ static vm_fault_t ttm_bo_vm_insert_huge(struct vm_fault *vmf, >>>> if ((pfn & (fault_page_size - 1)) != 0) >>>> goto out_fallback; >>>> + /* >>>> + * Huge entries must be special, that is marking them as devmap >>>> + * with no backing device map range. If there is a backing >>>> + * range, Don't insert a huge entry. >>>> + * If this check turns out to be too much of a performance hit, >>>> + * we can instead have drivers indicate whether they may have >>>> + * backing device map ranges and if not, skip this lookup. >>>> + */ >>> I think we can do this statically: >>> - if it's system memory we know there's no devmap for it, and we do the >>> trick to block gup_fast >> Yes, that should work. >>> - if it's iomem, we know gup_fast wont work anyway if don't set PFN_DEV, >>> so might as well not do that >> I think gup_fast will unfortunately mistake a huge iomem page for an >> ordinary page and try to access a non-existant struct page for it, unless we >> do the devmap trick. >> >> And the lookup would then be for the rare case where a driver would have >> already registered a dev_pagemap for an iomem area which may also be mapped >> through TTM (like the patch from Felix a couple of weeks ago). If a driver >> can promise not to do that, then we can safely remove the lookup. > Isn't the devmap PTE flag arch optional? Does this fall back to not > using huge pages on arches that don't support it?
Good point. No, currently it's only conditioned on transhuge page support. Need to condition it on also devmap support.
> > Also, I feel like this code to install "pte_special" huge pages does > not belong in the drm subsystem..
I could add helpers in huge_memory.c:
vmf_insert_pfn_pmd_prot_special() and vmf_insert_pfn_pud_prot_special()
/Thomas
> > Jason
| |