<html>
    <head>
      <base href="https://bugs.freedesktop.org/" />
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED FIXED - Atom D525 pineview segfault in gen3_emit_composite_primitive_constant_identity_mask_no_offset"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=91083#c3">Comment # 3</a>
              on <a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED FIXED - Atom D525 pineview segfault in gen3_emit_composite_primitive_constant_identity_mask_no_offset"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=91083">bug 91083</a>
              from <span class="vcard"><a class="email" href="mailto:chris@chris-wilson.co.uk" title="Chris Wilson <chris@chris-wilson.co.uk>"> <span class="fn">Chris Wilson</span></a>
</span></b>
        <pre>Hmm, I didn't consider that because it was a SIGSEGV and not a SIGBUS which is
what I expect from a failed pagefault.

Elsewhere we do trap fault failures and cancel the operation (losing the
rendering is better than killing X and its clients). It might be sensible to do
so here as well. For example,

diff --git a/src/sna/sna_glyphs.c b/src/sna/sna_glyphs.c
index 6ee4033..1ce77d4 100644
--- a/src/sna/sna_glyphs.c
+++ b/src/sna/sna_glyphs.c
@@ -2010,6 +2010,9 @@ sna_glyphs(CARD8 op,
                goto fallback;
        }

+       if (sigtrap_get())
+               goto fallback;
+
        priv = sna_pixmap(pixmap);
        if (priv == NULL) {
                DBG(("%s: fallback -- destination unattached\n",
__FUNCTION__));
@@ -2033,13 +2036,13 @@ sna_glyphs(CARD8 op,
                                           src, dst,
                                           src_x, src_y,
                                           nlist, list, glyphs))
-                               return;
+                               goto out;
                } else {
                        if (glyphs_to_dst(sna, op,
                                          src, dst,
                                          src_x, src_y,
                                          nlist, list, glyphs))
-                               return;
+                               goto out;
                }
        }

@@ -2053,15 +2056,19 @@ sna_glyphs(CARD8 op,
                                    src, dst, mask,
                                    src_x, src_y,
                                    nlist, list, glyphs))
-                       return;
+                       goto out;
        } else {
                if (glyphs_slow(sna, op,
                                src, dst,
                                src_x, src_y,
                                nlist, list, glyphs))
-                       return;
+                       goto out;
        }

+out:
+       sigtrap_put();
+       return;
+
 fallback:
        glyphs_fallback(op, src, dst, mask, src_x, src_y, nlist, list, glyphs);
 }

should handle this crash more gracefully. Do you mind testing with the older
kernel?</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the QA Contact for the bug.</li>
      </ul>
    </body>
</html>