Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09adc878 authored by Tadeusz Struk's avatar Tadeusz Struk Committed by Herbert Xu
Browse files

crypto: qat - Enforce valid numa configuration



In a system with NUMA configuration we want to enforce that the accelerator is
connected to a node with memory to avoid cross QPI memory transaction.
Otherwise there is no point in using the accelerator as the encryption in
software will be faster.

Cc: stable@vger.kernel.org
Signed-off-by: default avatarTadeusz Struk <tadeusz.struk@intel.com>
Tested-by: default avatarNikolay Aleksandrov <nikolay@redhat.com>
Reviewed-by: default avatarPrarit Bhargava <prarit@redhat.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 923a6e5e
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -198,8 +198,7 @@ struct adf_accel_dev {
	struct dentry *debugfs_dir;
	struct list_head list;
	struct module *owner;
	uint8_t accel_id;
	uint8_t numa_node;
	struct adf_accel_pci accel_pci_dev;
	uint8_t accel_id;
} __packed;
#endif
+7 −5
Original line number Diff line number Diff line
@@ -419,9 +419,10 @@ static int adf_init_bank(struct adf_accel_dev *accel_dev,
		WRITE_CSR_RING_BASE(csr_addr, bank_num, i, 0);
		ring = &bank->rings[i];
		if (hw_data->tx_rings_mask & (1 << i)) {
			ring->inflights = kzalloc_node(sizeof(atomic_t),
			ring->inflights =
				kzalloc_node(sizeof(atomic_t),
					     GFP_KERNEL,
						       accel_dev->numa_node);
					     dev_to_node(&GET_DEV(accel_dev)));
			if (!ring->inflights)
				goto err;
		} else {
@@ -469,13 +470,14 @@ int adf_init_etr_data(struct adf_accel_dev *accel_dev)
	int i, ret;

	etr_data = kzalloc_node(sizeof(*etr_data), GFP_KERNEL,
				accel_dev->numa_node);
				dev_to_node(&GET_DEV(accel_dev)));
	if (!etr_data)
		return -ENOMEM;

	num_banks = GET_MAX_BANKS(accel_dev);
	size = num_banks * sizeof(struct adf_etr_bank_data);
	etr_data->banks = kzalloc_node(size, GFP_KERNEL, accel_dev->numa_node);
	etr_data->banks = kzalloc_node(size, GFP_KERNEL,
				       dev_to_node(&GET_DEV(accel_dev)));
	if (!etr_data->banks) {
		ret = -ENOMEM;
		goto err_bank;
+3 −2
Original line number Diff line number Diff line
@@ -596,7 +596,8 @@ static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst,
	if (unlikely(!n))
		return -EINVAL;

	bufl = kmalloc_node(sz, GFP_ATOMIC, inst->accel_dev->numa_node);
	bufl = kmalloc_node(sz, GFP_ATOMIC,
			    dev_to_node(&GET_DEV(inst->accel_dev)));
	if (unlikely(!bufl))
		return -ENOMEM;

@@ -642,7 +643,7 @@ static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst,
		struct qat_alg_buf *bufers;

		buflout = kmalloc_node(sz, GFP_ATOMIC,
				       inst->accel_dev->numa_node);
				       dev_to_node(&GET_DEV(inst->accel_dev)));
		if (unlikely(!buflout))
			goto err;
		bloutp = dma_map_single(dev, buflout, sz, DMA_TO_DEVICE);
+5 −3
Original line number Diff line number Diff line
@@ -109,12 +109,14 @@ struct qat_crypto_instance *qat_crypto_get_instance_node(int node)

	list_for_each(itr, adf_devmgr_get_head()) {
		accel_dev = list_entry(itr, struct adf_accel_dev, list);
		if (accel_dev->numa_node == node && adf_dev_started(accel_dev))
		if ((node == dev_to_node(&GET_DEV(accel_dev)) ||
			dev_to_node(&GET_DEV(accel_dev)) < 0)
				&& adf_dev_started(accel_dev))
			break;
		accel_dev = NULL;
	}
	if (!accel_dev) {
		pr_err("QAT: Could not find device on give node\n");
		pr_err("QAT: Could not find device on node %d\n", node);
		accel_dev = adf_devmgr_get_first();
	}
	if (!accel_dev || !adf_dev_started(accel_dev))
@@ -164,7 +166,7 @@ static int qat_crypto_create_instances(struct adf_accel_dev *accel_dev)

	for (i = 0; i < num_inst; i++) {
		inst = kzalloc_node(sizeof(*inst), GFP_KERNEL,
				    accel_dev->numa_node);
				    dev_to_node(&GET_DEV(accel_dev)));
		if (!inst)
			goto err;

+1 −1
Original line number Diff line number Diff line
@@ -108,7 +108,7 @@ int adf_init_admin_comms(struct adf_accel_dev *accel_dev)
	uint64_t reg_val;

	admin = kzalloc_node(sizeof(*accel_dev->admin), GFP_KERNEL,
			     accel_dev->numa_node);
			     dev_to_node(&GET_DEV(accel_dev)));
	if (!admin)
		return -ENOMEM;
	admin->virt_addr = dma_zalloc_coherent(&GET_DEV(accel_dev), PAGE_SIZE,
Loading