cert_comp
ndev = cert_comp->ndev;
kref_put(&cert_comp->kref, cert_comp_release);
priv->cert_comp = aie4_lookup_cert_comp(ndev, resp.job_complete_msix_idx);
if (!priv->cert_comp) {
aie4_put_cert_comp(priv->cert_comp);
struct cert_comp *cert_comp = p;
wake_up_all(&cert_comp->waitq);
struct cert_comp *cert_comp = priv->cert_comp;
ret = wait_event_interruptible_timeout(cert_comp->waitq,
static struct cert_comp *aie4_lookup_cert_comp(struct amdxdna_dev_hdl *ndev, u32 msix_idx)
struct cert_comp *cert_comp;
cert_comp = xa_load(&ndev->cert_comp_xa, msix_idx);
if (cert_comp) {
kref_get(&cert_comp->kref);
return cert_comp;
cert_comp = kzalloc_obj(*cert_comp);
if (!cert_comp)
cert_comp->ndev = ndev;
cert_comp->msix_idx = msix_idx;
init_waitqueue_head(&cert_comp->waitq);
kref_init(&cert_comp->kref);
ret = pci_irq_vector(pdev, cert_comp->msix_idx);
cert_comp->irq = ret;
ret = request_irq(cert_comp->irq, cert_comp_isr, 0, "xdna_hsa", cert_comp);
XDNA_ERR(xdna, "request irq %d failed %d", cert_comp->irq, ret);
ret = xa_err(xa_store(&ndev->cert_comp_xa, msix_idx, cert_comp, GFP_KERNEL));
return cert_comp;
free_irq(cert_comp->irq, cert_comp);
kfree(cert_comp);
struct cert_comp *cert_comp = container_of(kref, struct cert_comp, kref);
struct amdxdna_dev_hdl *ndev = cert_comp->ndev;
xa_erase(&ndev->cert_comp_xa, cert_comp->msix_idx);
free_irq(cert_comp->irq, cert_comp);
kfree(cert_comp);
static void aie4_put_cert_comp(struct cert_comp *cert_comp)
struct cert_comp *cert_comp;