--- src/nvidia_subr.c.orig 2017-01-17 00:57:56.000000000 +0500 +++ src/nvidia_subr.c 2017-08-10 23:33:44.502830000 +0500 @@ -489,7 +489,11 @@ nv_stack_t *sp; sp = sc->api_sp; - rm_free_unused_clients(sp, nv, filep); + if (sp != NULL) { + rm_free_unused_clients(sp, nv, filep); + } else { + device_printf(sc->dev, "Crash prevented in nvidia_close_ctl() (FreeBSD bug 195097).\n"); + } if (--sc->refcnt == 0) { NV_UMA_ZONE_FREE_STACK(sc->api_sp); @@ -594,9 +599,15 @@ sc = nv->os_state; sp = sc->api_sp; + /* If nvidia_open_dev failed and we're called from nvidia_dev_dtor, we + * already released api_sp. */ NV_PCI_CHECK_CONFIG_SPACE(sp, nv, TRUE, TRUE, TRUE); - rm_free_unused_clients(sp, nv, filep); + if (sp != NULL) { + rm_free_unused_clients(sp, nv, filep); + } else { + device_printf(sc->dev, "Crash prevented in nvidia_close_dev() (FreeBSD bug 195097).\n"); + } if (--sc->refcnt == 0) { if (sc->UD_object != NULL)