summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorriastradh <riastradh@NetBSD.org>2014-07-24 22:13:23 +0000
committerriastradh <riastradh@NetBSD.org>2014-07-24 22:13:23 +0000
commit6409db48947db917fecc87fbcead84ec258bfd78 (patch)
tree11dd287cf7514374b0bcc06c82fc400dde992e5d /sys
parent0d40a211d909bf8a63aeb9a52b5897846af4c170 (diff)
Tweak i915drmkms_detach to be more robust.
Diffstat (limited to 'sys')
-rw-r--r--sys/external/bsd/drm2/i915drm/i915_pci.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/external/bsd/drm2/i915drm/i915_pci.c b/sys/external/bsd/drm2/i915drm/i915_pci.c
index ef65a421c6b..3ba85bc531c 100644
--- a/sys/external/bsd/drm2/i915drm/i915_pci.c
+++ b/sys/external/bsd/drm2/i915drm/i915_pci.c
@@ -1,4 +1,4 @@
-/* $NetBSD: i915_pci.c,v 1.14 2014/07/24 21:18:40 riastradh Exp $ */
+/* $NetBSD: i915_pci.c,v 1.15 2014/07/24 22:13:23 riastradh Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_pci.c,v 1.14 2014/07/24 21:18:40 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_pci.c,v 1.15 2014/07/24 22:13:23 riastradh Exp $");
#include <sys/types.h>
#include <sys/queue.h>
@@ -195,16 +195,19 @@ i915drmkms_detach(device_t self, int flags)
if (error)
return error;
- KASSERT(sc->sc_task_state == I915DRMKMS_TASK_WORKQUEUE);
- if (sc->sc_task_u.workqueue == NULL)
+ if (sc->sc_task_state == I915DRMKMS_TASK_ATTACH)
goto out;
- workqueue_destroy(sc->sc_task_u.workqueue);
+ if (sc->sc_task_u.workqueue != NULL) {
+ workqueue_destroy(sc->sc_task_u.workqueue);
+ sc->sc_task_u.workqueue = NULL;
+ }
if (sc->sc_drm_dev == NULL)
goto out;
/* XXX errno Linux->NetBSD */
error = -drm_pci_detach(sc->sc_drm_dev, flags);
if (error)
+ /* XXX Kinda too late to fail now... */
return error;
sc->sc_drm_dev = NULL;