OSDN Git Service

gralloc: Fix division-by-0 during system emulation.
authorDavid 'Digit' Turner <digit@google.com>
Sat, 15 Jan 2011 20:06:12 +0000 (21:06 +0100)
committerDavid 'Digit' Turner <digit@google.com>
Sat, 15 Jan 2011 20:06:12 +0000 (21:06 +0100)
This patch avoids a division-by-0 when the system is running
under emulation (the kernel driver reports pixclock as 0, for
some reason). Which results in a SIGFPE during the boot sequence.

Change-Id: Idb6bcdd58999ea9231f2411481c25929d5d02f1d

modules/gralloc/framebuffer.cpp

index a487b5d..59c5001 100644 (file)
@@ -213,13 +213,17 @@ int mapFrameBufferLocked(struct private_module_t* module)
     if (ioctl(fd, FBIOGET_VSCREENINFO, &info) == -1)
         return -errno;
 
-    int refreshRate = 1000000000000000LLU /
+    uint64_t  refreshQuotient =
     (
             uint64_t( info.upper_margin + info.lower_margin + info.yres )
             * ( info.left_margin  + info.right_margin + info.xres )
             * info.pixclock
     );
 
+    /* Beware, info.pixclock might be 0 under emulation, so avoid a
+     * division-by-0 here (SIGFPE on ARM) */
+    int refreshRate = refreshQuotient > 0 ? (int)(1000000000000000LLU / refreshQuotient) : 0;
+
     if (refreshRate == 0) {
         // bleagh, bad info from the driver
         refreshRate = 60*1000;  // 60 Hz