Android-x86
Fork
Donation

  • R/O
  • HTTP
  • SSH
  • HTTPS

hardware-libhardware: Commit

hardware/libhardware


Commit MetaInfo

Revisión81a42e87b9c26dc3fda79f4bc6b4e1491da6aaa7 (tree)
Tiempo2017-05-05 02:10:08
AutorPaulo Sergio Travaglia <pstglia@gmai...>
CommiterChih-Wei Huang

Log Message

HACK - Avoid crashes on SurfaceFlinger when using software rendering

When using sw rendering, depending user action (pressing HOME button after
lauching an app, for instance) there's an attempt do map a vaddr that has
already been mapped. And this is done by the process that created it.
This triggers a kernel trap and surfaceflinger is destroyed:


10-30 18:14:11.474 1096 1645 D gralloc : gralloc_map() succeeded fd=59,

off=0, size=1028096, vaddr=0xaac21000

10-30 18:14:11.474 1355 1389 D gralloc : gralloc_map() succeeded fd=202,

off=0, size=1028096, vaddr=0x8d0f2000

10-30 18:14:11.475 1096 1096 D gralloc : Registering a buffer in the
process that created it. This may cause memory ordering problems.

10-30 18:14:11.475 1096 1096 D gralloc : gralloc_map() succeeded
fd=60, off=0, size=1028096, vaddr=0xaac21000

10-30 18:14:11.574 1095 1095 I ServiceManager: service 'gpu' died


In order to avoid this, the patch avoids mapping a buffer when the
mapping process is the creator process.

This should be threated as a workaround and removed when the real
root cause is discovered.

Cambiar Resumen

Diferencia incremental

--- a/modules/gralloc/mapper.cpp
+++ b/modules/gralloc/mapper.cpp
@@ -116,9 +116,11 @@ int gralloc_register_buffer(gralloc_module_t const* module,
116116 // problems. Most modern L1 caches fit that description.
117117
118118 private_handle_t* hnd = (private_handle_t*)handle;
119- ALOGD_IF(hnd->pid == getpid(),
120- "Registering a buffer in the process that created it. "
121- "This may cause memory ordering problems.");
119+ if (hnd->pid == getpid()) {
120+ ALOGD("Avoid registering a buffer in the process that created it. "
121+ "This may cause memory ordering problems.");
122+ return 1;
123+ }
122124
123125 void *vaddr;
124126 return gralloc_map(module, handle, &vaddr);
Show on old repository browser