static int agp_release(struct inode *inode, struct file *file) { struct agp_file_private *priv = file->private_data; down(&(agp_fe.agp_mutex)); DBG("priv=%p", priv); if (test_bit(AGP_FF_IS_CONTROLLER, &priv->access_flags)) { struct agp_controller *controller; controller = agp_find_controller_by_pid(priv->my_pid); if (controller != NULL) { if (controller == agp_fe.current_controller) agp_controller_release_current(controller, priv); agp_remove_controller(controller); controller = NULL; } } if (test_bit(AGP_FF_IS_CLIENT, &priv->access_flags)) agp_remove_client(priv->my_pid); agp_remove_file_private(priv); kfree(priv); file->private_data = NULL; up(&(agp_fe.agp_mutex)); return 0; }
static int agp_release(struct inode *inode, struct file *file) { agp_file_private *priv = (agp_file_private *) file->private_data; lock_kernel(); AGP_LOCK(); if (test_bit(AGP_FF_IS_CONTROLLER, &priv->access_flags)) { agp_controller *controller; controller = agp_find_controller_by_pid(priv->my_pid); if (controller != NULL) { if (controller == agp_fe.current_controller) { agp_controller_release_current(controller, priv); } agp_remove_controller(controller); } } if (test_bit(AGP_FF_IS_CLIENT, &priv->access_flags)) { agp_remove_client(priv->my_pid); } agp_remove_file_private(priv); kfree(priv); AGP_UNLOCK(); unlock_kernel(); return 0; }