[PATCH] drm/ttm: set TTM allocated pages as reserved

Paolo Bonzini pbonzini at redhat.com
Wed Mar 29 14:28:00 UTC 2023


On 3/29/23 15:54, Christian König wrote:
> KVM tries to grab references to pages in VMAs marked with VM_PFNMAP.
> This is illegal and can cause data corruption with TTM pages because
> only some of them are actually reference counted.

I think that you are referring to this:

         /* Don't set the __GFP_COMP flag for higher order allocations.
          * Mapping pages directly into an userspace process and calling
          * put_page() on a TTM allocated page is illegal.
          */
         if (order)
                 gfp_flags |= __GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_NOWARN |
                         __GFP_KSWAPD_RECLAIM;

By "directly" I guess you mean without going through remap_pfn_range().

Based on our discussion offlist, it should be possible to remove the
get_page/put_page from the path that fills in the KVM page table, but
it is difficult to remove it altogether (it requires changing everything
to use userspace virtual address).

Indeed KVM needs to detect non-reference-counted pages because unfortunately
there are cases where people want to map VM_PFNMAP pages into a guest.  If
it is not enough to have PageReserved set, and there is a better check, KVM
can be fixed too.

> Mark all pages allocated by TTM as reserved, this way KVM handles the
> PFNs like they would point to MMIO space.
> 
> This still results in a warning, but at least no other problem.

What warning is it?

Paolo

> Signed-off-by: Christian König<christian.koenig at amd.com>



More information about the dri-devel mailing list