int via_final_context(struct drm_device *dev, int context) { int i; drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; for (i = 0; i < MAX_CONTEXT; i++) if (global_ppriv[i].used && (global_ppriv[i].context == context)) break; if (i < MAX_CONTEXT) { set_t *set; ITEM_TYPE item; int retval; DRM_DEBUG("find socket %d, context = %d\n", i, context); /* Video Memory */ set = global_ppriv[i].sets[0]; retval = via_setFirst(set, &item); while (retval) { DRM_DEBUG("free video memory 0x%lx\n", item); via_mmFreeMem((PMemBlock) item); retval = via_setNext(set, &item); } via_setDestroy(set); /* AGP Memory */ set = global_ppriv[i].sets[1]; retval = via_setFirst(set, &item); while (retval) { DRM_DEBUG("free agp memory 0x%lx\n", item); via_mmFreeMem((PMemBlock) item); retval = via_setNext(set, &item); } via_setDestroy(set); global_ppriv[i].used = 0; } via_release_futex(dev_priv, context); #if defined(__linux__) /* Linux specific until context tracking code gets ported to BSD */ /* Last context, perform cleanup */ if (dev->ctx_count == 1 && dev->dev_private) { if (dev->irq) DRM(irq_uninstall) (dev); via_cleanup_futex(dev_priv); via_do_cleanup_map(dev); } #endif return 1; }
int via_final_context(struct drm_device *dev, int context) { drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; via_release_futex(dev_priv, context); if (dev->ctx_count == 1 && dev->dev_private) { DRM_DEBUG("Last Context\n"); drm_irq_uninstall(dev); via_cleanup_futex(dev_priv); via_do_cleanup_map(dev); } return 1; }
int via_final_context(struct drm_device *dev, int context) { drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; via_release_futex(dev_priv, context); /* Linux specific until context tracking code gets ported to BSD */ /* Last context, perform cleanup */ if (dev->ctx_count == 1 && dev->dev_private) { DRM_DEBUG("Last Context\n"); if (dev->irq) drm_irq_uninstall(dev); via_cleanup_futex(dev_priv); via_do_cleanup_map(dev); } return 1; }