Re: [PATCH] drm/vma-manager: Don't unmap COW'd pages when zapping bo ptes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/20/2013 11:14 AM, David Herrmann wrote:
Hi

On Wed, Nov 20, 2013 at 10:55 AM, Thomas Hellstrom
<thellstrom@xxxxxxxxxx> wrote:
Not sure if there are any user-space users of private bo mappings, but
if there are, or will be, zapping the COW'd pages when, for example,
moving a bo would confuse the user immensely since the net effect for the
user would be that pages written to would lose their contents.
You're only talking about moving bos, but what happens when you evict
a bo? You *must* clear COW mappings, too. Otherwise, they might still
get read-access to the evicted bo.

Hmm. When I talk about COW'd pages, I mean individual anonymous pages.
If there is a COW mapping left in a VMA, it points to an anonymous page and will never access the evicted bo. All (read-only-enabled) ptes pointing to the evicted bo would still be zapped, so I'm afraid I don't understand your comment?


Note that we currently cause SIGBUS on access to mmap'd bos if they
are evicted and cannot be restored (think: user-space mapped the
VESA-FB but a real driver took over). So maybe we want two independent
helpers here?
It shouldn't be needed.

Thanks,
Thomas



Thanks
David

Signed-off-by: Thomas Hellstrom <thellstrom@xxxxxxxxxx>
---
  include/drm/drm_vma_manager.h |    6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/drm/drm_vma_manager.h b/include/drm/drm_vma_manager.h
index c18a593..347077d 100644
--- a/include/drm/drm_vma_manager.h
+++ b/include/drm/drm_vma_manager.h
@@ -231,9 +231,9 @@ static inline void drm_vma_node_unmap(struct drm_vma_offset_node *node,
                                       struct address_space *file_mapping)
  {
         if (file_mapping && drm_vma_node_has_offset(node))
-               unmap_mapping_range(file_mapping,
-                                   drm_vma_node_offset_addr(node),
-                                   drm_vma_node_size(node) << PAGE_SHIFT, 1);
+               unmap_shared_mapping_range
+                       (file_mapping, drm_vma_node_offset_addr(node),
+                        drm_vma_node_size(node) << PAGE_SHIFT);
  }

  /**
--
1.7.10.4
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux