return ret;
 }
 
+static int test_alloc_zeroed(char *heap_name, size_t size)
+{
+       int heap_fd = -1, dmabuf_fd[32];
+       int i, j, ret;
+       void *p = NULL;
+       char *c;
+
+       printf("  Testing alloced %ldk buffers are zeroed:  ", size / 1024);
+       heap_fd = dmabuf_heap_open(heap_name);
+       if (heap_fd < 0)
+               return -1;
+
+       /* Allocate and fill a bunch of buffers */
+       for (i = 0; i < 32; i++) {
+               ret = dmabuf_heap_alloc(heap_fd, size, 0, &dmabuf_fd[i]);
+               if (ret < 0) {
+                       printf("FAIL (Allocation (%i) failed)\n", i);
+                       goto out;
+               }
+               /* mmap and fill with simple pattern */
+               p = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, dmabuf_fd[i], 0);
+               if (p == MAP_FAILED) {
+                       printf("FAIL (mmap() failed!)\n");
+                       ret = -1;
+                       goto out;
+               }
+               dmabuf_sync(dmabuf_fd[i], DMA_BUF_SYNC_START);
+               memset(p, 0xff, size);
+               dmabuf_sync(dmabuf_fd[i], DMA_BUF_SYNC_END);
+               munmap(p, size);
+       }
+       /* close them all */
+       for (i = 0; i < 32; i++)
+               close(dmabuf_fd[i]);
+
+       /* Allocate and validate all buffers are zeroed */
+       for (i = 0; i < 32; i++) {
+               ret = dmabuf_heap_alloc(heap_fd, size, 0, &dmabuf_fd[i]);
+               if (ret < 0) {
+                       printf("FAIL (Allocation (%i) failed)\n", i);
+                       goto out;
+               }
+
+               /* mmap and validate everything is zero */
+               p = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, dmabuf_fd[i], 0);
+               if (p == MAP_FAILED) {
+                       printf("FAIL (mmap() failed!)\n");
+                       ret = -1;
+                       goto out;
+               }
+               dmabuf_sync(dmabuf_fd[i], DMA_BUF_SYNC_START);
+               c = (char *)p;
+               for (j = 0; j < size; j++) {
+                       if (c[j] != 0) {
+                               printf("FAIL (Allocated buffer not zeroed @ %i)\n", j);
+                               break;
+                       }
+               }
+               dmabuf_sync(dmabuf_fd[i], DMA_BUF_SYNC_END);
+               munmap(p, size);
+       }
+       /* close them all */
+       for (i = 0; i < 32; i++)
+               close(dmabuf_fd[i]);
+
+       close(heap_fd);
+       printf("OK\n");
+       return 0;
+
+out:
+       while (i > 0) {
+               close(dmabuf_fd[i]);
+               i--;
+       }
+       close(heap_fd);
+       return ret;
+}
+
 /* Test the ioctl version compatibility w/ a smaller structure then expected */
 static int dmabuf_heap_alloc_older(int fd, size_t len, unsigned int flags,
                                   int *dmabuf_fd)
                if (ret)
                        break;
 
+               ret = test_alloc_zeroed(dir->d_name, 4 * 1024);
+               if (ret)
+                       break;
+
+               ret = test_alloc_zeroed(dir->d_name, ONE_MEG);
+               if (ret)
+                       break;
+
                ret = test_alloc_compat(dir->d_name);
                if (ret)
                        break;