diff options
author | Robert Noland <rnoland@2hip.net> | 2008-09-06 18:37:06 -0400 |
---|---|---|
committer | Robert Noland <rnoland@2hip.net> | 2008-09-06 18:37:06 -0400 |
commit | 6f2479c67432f764bfc4e248689f1737c1935237 (patch) | |
tree | d78b9dc1913cda30088176b534d8295334e25b25 /bsd-core/drm_pci.c | |
parent | 31709aa2be54877c45ca382bf370b41dbaf5c2ec (diff) |
[FreeBSD] Ensure that drm_pci_alloc is never called while locks are held.
Diffstat (limited to 'bsd-core/drm_pci.c')
-rw-r--r-- | bsd-core/drm_pci.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/bsd-core/drm_pci.c b/bsd-core/drm_pci.c index f23b2a5b..16c830ec 100644 --- a/bsd-core/drm_pci.c +++ b/bsd-core/drm_pci.c @@ -71,7 +71,14 @@ drm_pci_alloc(struct drm_device *dev, size_t size, return NULL; #ifdef __FreeBSD__ - DRM_UNLOCK(); + /* Make sure we aren't holding locks here */ + mtx_assert(&dev->dev_lock, MA_NOTOWNED); + if (mtx_owned(&dev->dev_lock)) + DRM_ERROR("called while holding dev_lock\n"); + mtx_assert(&dev->dma_lock, MA_NOTOWNED); + if (mtx_owned(&dev->dma_lock)) + DRM_ERROR("called while holding dma_lock\n"); + ret = bus_dma_tag_create(NULL, align, 0, /* tag, align, boundary */ maxaddr, BUS_SPACE_MAXADDR, /* lowaddr, highaddr */ NULL, NULL, /* filtfunc, filtfuncargs */ @@ -80,7 +87,6 @@ drm_pci_alloc(struct drm_device *dev, size_t size, &dmah->tag); if (ret != 0) { free(dmah, M_DRM); - DRM_LOCK(); return NULL; } @@ -89,10 +95,9 @@ drm_pci_alloc(struct drm_device *dev, size_t size, if (ret != 0) { bus_dma_tag_destroy(dmah->tag); free(dmah, M_DRM); - DRM_LOCK(); return NULL; } - DRM_LOCK(); + ret = bus_dmamap_load(dmah->tag, dmah->map, dmah->vaddr, size, drm_pci_busdma_callback, dmah, 0); if (ret != 0) { |