diff options
Diffstat (limited to 'drivers/crypto/inside-secure/safexcel.c')
| -rw-r--r-- | drivers/crypto/inside-secure/safexcel.c | 13 | 
1 files changed, 11 insertions, 2 deletions
| diff --git a/drivers/crypto/inside-secure/safexcel.c b/drivers/crypto/inside-secure/safexcel.c index 2cb53fbae841..fa7398e68858 100644 --- a/drivers/crypto/inside-secure/safexcel.c +++ b/drivers/crypto/inside-secure/safexcel.c @@ -1135,11 +1135,12 @@ static irqreturn_t safexcel_irq_ring_thread(int irq, void *data)  static int safexcel_request_ring_irq(void *pdev, int irqid,  				     int is_pci_dev, +				     int ring_id,  				     irq_handler_t handler,  				     irq_handler_t threaded_handler,  				     struct safexcel_ring_irq_data *ring_irq_priv)  { -	int ret, irq; +	int ret, irq, cpu;  	struct device *dev;  	if (IS_ENABLED(CONFIG_PCI) && is_pci_dev) { @@ -1177,6 +1178,10 @@ static int safexcel_request_ring_irq(void *pdev, int irqid,  		return ret;  	} +	/* Set affinity */ +	cpu = cpumask_local_spread(ring_id, NUMA_NO_NODE); +	irq_set_affinity_hint(irq, get_cpu_mask(cpu)); +  	return irq;  } @@ -1611,6 +1616,7 @@ static int safexcel_probe_generic(void *pdev,  		irq = safexcel_request_ring_irq(pdev,  						EIP197_IRQ_NUMBER(i, is_pci_dev),  						is_pci_dev, +						i,  						safexcel_irq_ring,  						safexcel_irq_ring_thread,  						ring_irq); @@ -1619,6 +1625,7 @@ static int safexcel_probe_generic(void *pdev,  			return irq;  		} +		priv->ring[i].irq = irq;  		priv->ring[i].work_data.priv = priv;  		priv->ring[i].work_data.ring = i;  		INIT_WORK(&priv->ring[i].work_data.work, @@ -1756,8 +1763,10 @@ static int safexcel_remove(struct platform_device *pdev)  	clk_disable_unprepare(priv->reg_clk);  	clk_disable_unprepare(priv->clk); -	for (i = 0; i < priv->config.rings; i++) +	for (i = 0; i < priv->config.rings; i++) { +		irq_set_affinity_hint(priv->ring[i].irq, NULL);  		destroy_workqueue(priv->ring[i].workqueue); +	}  	return 0;  } | 
