From patchwork Mon Aug 9 12:52:19 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Wilson X-Patchwork-Id: 118378 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by demeter.kernel.org (8.14.4/8.14.3) with ESMTP id o79Crqf9023666 for ; Mon, 9 Aug 2010 12:54:30 GMT Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 398799EB19 for ; Mon, 9 Aug 2010 05:53:52 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from fireflyinternet.com (server109-228-4-14.live-servers.net [109.228.4.14]) by gabe.freedesktop.org (Postfix) with ESMTP id ACC699E74B; Mon, 9 Aug 2010 05:53:16 -0700 (PDT) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.66.37; Received: from arrandale.alporthouse.com (unverified [78.156.66.37]) by fireflyinternet.com (Firefly Internet SMTP) with ESMTP id 2554591-1500048 for multiple; Mon, 09 Aug 2010 13:53:40 +0100 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Mon, 9 Aug 2010 13:52:19 +0100 Message-Id: <1281358339-1477-1-git-send-email-chris@chris-wilson.co.uk> X-Mailer: git-send-email 1.7.1 X-Originating-IP: 78.156.66.37 Cc: Dave Airlie , dri-devel@lists.freedesktop.org Subject: [Intel-gfx] [PATCH] drm/i915: Perform initial configuration asynchronously X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Mon, 09 Aug 2010 12:54:30 +0000 (UTC) diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 90288ec..fc1f641 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -48,9 +48,12 @@ #include #include +#include #include "drmP.h" #include "drm_core.h" +LIST_HEAD(drm_async_domain); +EXPORT_SYMBOL_GPL(drm_async_domain); static int drm_version(struct drm_device *dev, void *data, struct drm_file *file_priv); @@ -266,6 +269,9 @@ void drm_exit(struct drm_driver *driver) struct drm_device *dev, *tmp; DRM_DEBUG("\n"); + /* make sure all async operations are finished */ + async_synchronize_full_domain(&drm_async_domain); + if (driver->driver_features & DRIVER_MODESET) { pci_unregister_driver(&driver->pci_driver); } else { diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c index fe2ab62..cb37c08 100644 --- a/drivers/gpu/drm/i915/intel_fb.c +++ b/drivers/gpu/drm/i915/intel_fb.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include "drmP.h" @@ -245,6 +246,14 @@ int intel_fbdev_destroy(struct drm_device *dev, return 0; } +static void intel_fbdev_init_async(void *ptr, async_cookie_t cookie) +{ + struct intel_fbdev *ifbdev = ptr; + + drm_fb_helper_single_add_all_connectors(&ifbdev->helper); + drm_fb_helper_initial_config(&ifbdev->helper, 32); +} + int intel_fbdev_init(struct drm_device *dev) { struct intel_fbdev *ifbdev; @@ -266,8 +275,8 @@ int intel_fbdev_init(struct drm_device *dev) return ret; } - drm_fb_helper_single_add_all_connectors(&ifbdev->helper); - drm_fb_helper_initial_config(&ifbdev->helper, 32); + async_schedule_domain(intel_fbdev_init_async, ifbdev, + &drm_async_domain); return 0; } diff --git a/include/drm/drmP.h b/include/drm/drmP.h index e2a4da7..4a5b902 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -326,6 +326,8 @@ struct drm_vma_entry { pid_t pid; }; +extern struct list_head drm_async_domain; + /** * DMA buffer. */