static void xpc_destroy_gru_mq_uv(struct xpc_gru_mq_uv *mq) { unsigned int mq_size; int pg_order; int ret; /* disallow other partitions to access GRU mq */ mq_size = 1UL << mq->order; ret = xp_restrict_memprotect(xp_pa(mq->address), mq_size); BUG_ON(ret != xpSuccess); /* unregister irq handler and release mq irq/vector mapping */ free_irq(mq->irq, NULL); xpc_release_gru_mq_irq_uv(mq); /* disable generation of irq when GRU mq op occurs to this mq */ xpc_gru_mq_watchlist_free_uv(mq); pg_order = mq->order - PAGE_SHIFT; free_pages((unsigned long)mq->address, pg_order); kfree(mq); }
static void xpc_destroy_gru_mq_uv(struct xpc_gru_mq_uv *mq) { unsigned int mq_size; int pg_order; int ret; mq_size = 1UL << mq->order; ret = xp_restrict_memprotect(xp_pa(mq->address), mq_size); BUG_ON(ret != xpSuccess); free_irq(mq->irq, NULL); xpc_release_gru_mq_irq_uv(mq); xpc_gru_mq_watchlist_free_uv(mq); pg_order = mq->order - PAGE_SHIFT; free_pages((unsigned long)mq->address, pg_order); kfree(mq); }