Fix error handing related to xgi_cmdlist_initialize.
authorIan Romanick <idr@us.ibm.com>
Fri, 20 Jul 2007 02:08:47 +0000 (19:08 -0700)
committerIan Romanick <idr@us.ibm.com>
Fri, 20 Jul 2007 02:08:47 +0000 (19:08 -0700)
xgi_cmdlist_initialize wasn't correctly checking for errors from
xgi_pcie_alloc.  Furthermore, xgi_bootstrap, the one caller of
xgi_cmdlist_initialize, wasn't check its return value.

linux-core/xgi_cmdlist.c
linux-core/xgi_drv.c

index 2fdfcc9..885b506 100644 (file)
@@ -45,11 +45,11 @@ int xgi_cmdlist_initialize(struct xgi_info * info, size_t size)
                .size = size,
                .owner = PCIE_2D,
        };
+       int err;
 
-       xgi_pcie_alloc(info, &mem_alloc, 0);
-
-       if ((mem_alloc.size == 0) && (mem_alloc.hw_addr == 0)) {
-               return -1;
+       err = xgi_pcie_alloc(info, &mem_alloc, 0);
+       if (err) {
+               return err;
        }
 
        s_cmdring._cmdRingSize = mem_alloc.size;
@@ -58,7 +58,7 @@ int xgi_cmdlist_initialize(struct xgi_info * info, size_t size)
        s_cmdring._lastBatchStartAddr = 0;
        s_cmdring._cmdRingOffset = 0;
 
-       return 1;
+       return 0;
 }
 
 static void xgi_submit_cmdlist(struct xgi_info * info,
index 13e7916..c4e7daa 100644 (file)
@@ -231,7 +231,11 @@ int xgi_bootstrap(DRM_IOCTL_ARGS)
        }
 
        /* Alloc 1M bytes for cmdbuffer which is flush2D batch array */
-       xgi_cmdlist_initialize(info, 0x100000);
+       err = xgi_cmdlist_initialize(info, 0x100000);
+       if (err) {
+               DRM_ERROR("xgi_cmdlist_initialize() failed\n");
+               return err;
+       }
 
        info->bootstrap_done = 1;
        return 0;