From 05ca3bc1cb068567c2fd1321e89a438d7648cc38 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Fri, 9 Jan 2015 16:47:54 +0000 Subject: [PATCH] sna: Wrap mmap accessors with sigtrap to catch oom SIGBUS Accessing a mmap'ed pointer (especially our shmemfs backed bo) can throw SIGBUS when out of memory, for which we use sigtrap for graceful failure. Signed-off-by: Chris Wilson --- src/sna/sna_accel.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index f1c028c2..45f744c7 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -6108,6 +6108,9 @@ sna_copy_boxes__inplace(struct sna *sna, RegionPtr region, int alu, kgem_bo_sync__cpu_full(&sna->kgem, src_priv->gpu_bo, FORCE_FULL_SYNC); + if (sigtrap_get()) + return false; + box = region_rects(region); n = region_num_rects(region); if (src_priv->gpu_bo->tiling) { @@ -6147,6 +6150,8 @@ sna_copy_boxes__inplace(struct sna *sna, RegionPtr region, int alu, } } + sigtrap_put(); + return true; upload_inplace: @@ -6244,6 +6249,9 @@ upload_inplace: assert(has_coherent_ptr(sna, src_priv, MOVE_READ)); + if (sigtrap_get()) + return false; + box = region_rects(region); n = region_num_rects(region); if (dst_priv->gpu_bo->tiling) { @@ -6286,6 +6294,8 @@ upload_inplace: } } + sigtrap_put(); + return true; }