static void locked_hw3d_client_done(struct hw3d_info *info, int had_timer) { if (info->enabled) { pr_debug("hw3d: was enabled\n"); info->enabled = 0; clk_disable(info->grp_clk); clk_disable(info->imem_clk); } info->revoking = 0; locked_hw3d_irq_disable(info); if (had_timer) wake_unlock(&info->wake_lock); wake_up(&info->revoke_done_wq); }
static void do_force_revoke(struct hw3d_info *info) { unsigned long flags; spin_lock_irqsave(&info->lock, flags); pr_debug("hw3d: forcing revoke\n"); locked_hw3d_irq_disable(info); if (info->client_task) { pr_info("hw3d: force revoke from pid=%d\n", info->client_task->pid); force_sig(SIGKILL, info->client_task); put_task_struct(info->client_task); info->client_task = NULL; } locked_hw3d_client_done(info, 1); pr_debug("hw3d: done forcing revoke\n"); spin_unlock_irqrestore(&info->lock, flags); }