Пример #1
0
int cpdma_ctlr_destroy(struct cpdma_ctlr *ctlr)
{
	unsigned long flags;
	int ret = 0, i;

	if (!ctlr)
		return -EINVAL;

	spin_lock_irqsave(&ctlr->lock, flags);
	if (ctlr->state != CPDMA_STATE_IDLE)
		cpdma_ctlr_stop(ctlr);

	for (i = 0; i < ARRAY_SIZE(ctlr->channels); i++)
		cpdma_chan_destroy(ctlr->channels[i]);

	cpdma_desc_pool_destroy(ctlr->pool);
	spin_unlock_irqrestore(&ctlr->lock, flags);
	kfree(ctlr);
	return ret;
}
int cpdma_ctlr_destroy(struct cpdma_ctlr *ctlr)
{
	rtdm_lockctx_t context;
	int ret = 0, i;

	if (!ctlr)
		return -EINVAL;

	rtdm_lock_get_irqsave(&ctlr->lock, context);
	if (ctlr->state != CPDMA_STATE_IDLE)
		cpdma_ctlr_stop(ctlr);

	for (i = 0; i < ARRAY_SIZE(ctlr->channels); i++) {
		if (ctlr->channels[i])
			cpdma_chan_destroy(ctlr->channels[i]);
	}

	cpdma_desc_pool_destroy(ctlr->pool);
	rtdm_lock_put_irqrestore(&ctlr->lock, context);
	kfree(ctlr);
	return ret;
}