diff options
| -rw-r--r-- | drivers/crypto/qat/qat_common/adf_accel_devices.h | 3 | ||||
| -rw-r--r-- | drivers/crypto/qat/qat_common/adf_transport.c | 12 | ||||
| -rw-r--r-- | drivers/crypto/qat/qat_common/qat_algs.c | 5 | ||||
| -rw-r--r-- | drivers/crypto/qat/qat_common/qat_crypto.c | 8 | ||||
| -rw-r--r-- | drivers/crypto/qat/qat_dh895xcc/adf_admin.c | 2 | ||||
| -rw-r--r-- | drivers/crypto/qat/qat_dh895xcc/adf_drv.c | 32 | ||||
| -rw-r--r-- | drivers/crypto/qat/qat_dh895xcc/adf_isr.c | 2 |
7 files changed, 30 insertions, 34 deletions
diff --git a/drivers/crypto/qat/qat_common/adf_accel_devices.h b/drivers/crypto/qat/qat_common/adf_accel_devices.h index 9282381b03ce..fe7b3f06f6e6 100644 --- a/drivers/crypto/qat/qat_common/adf_accel_devices.h +++ b/drivers/crypto/qat/qat_common/adf_accel_devices.h | |||
| @@ -198,8 +198,7 @@ struct adf_accel_dev { | |||
| 198 | struct dentry *debugfs_dir; | 198 | struct dentry *debugfs_dir; |
| 199 | struct list_head list; | 199 | struct list_head list; |
| 200 | struct module *owner; | 200 | struct module *owner; |
| 201 | uint8_t accel_id; | ||
| 202 | uint8_t numa_node; | ||
| 203 | struct adf_accel_pci accel_pci_dev; | 201 | struct adf_accel_pci accel_pci_dev; |
| 202 | uint8_t accel_id; | ||
| 204 | } __packed; | 203 | } __packed; |
| 205 | #endif | 204 | #endif |
diff --git a/drivers/crypto/qat/qat_common/adf_transport.c b/drivers/crypto/qat/qat_common/adf_transport.c index 5f3fa45348b4..9dd2cb72a4e8 100644 --- a/drivers/crypto/qat/qat_common/adf_transport.c +++ b/drivers/crypto/qat/qat_common/adf_transport.c | |||
| @@ -419,9 +419,10 @@ static int adf_init_bank(struct adf_accel_dev *accel_dev, | |||
| 419 | WRITE_CSR_RING_BASE(csr_addr, bank_num, i, 0); | 419 | WRITE_CSR_RING_BASE(csr_addr, bank_num, i, 0); |
| 420 | ring = &bank->rings[i]; | 420 | ring = &bank->rings[i]; |
| 421 | if (hw_data->tx_rings_mask & (1 << i)) { | 421 | if (hw_data->tx_rings_mask & (1 << i)) { |
| 422 | ring->inflights = kzalloc_node(sizeof(atomic_t), | 422 | ring->inflights = |
| 423 | GFP_KERNEL, | 423 | kzalloc_node(sizeof(atomic_t), |
| 424 | accel_dev->numa_node); | 424 | GFP_KERNEL, |
| 425 | dev_to_node(&GET_DEV(accel_dev))); | ||
| 425 | if (!ring->inflights) | 426 | if (!ring->inflights) |
| 426 | goto err; | 427 | goto err; |
| 427 | } else { | 428 | } else { |
| @@ -469,13 +470,14 @@ int adf_init_etr_data(struct adf_accel_dev *accel_dev) | |||
| 469 | int i, ret; | 470 | int i, ret; |
| 470 | 471 | ||
| 471 | etr_data = kzalloc_node(sizeof(*etr_data), GFP_KERNEL, | 472 | etr_data = kzalloc_node(sizeof(*etr_data), GFP_KERNEL, |
| 472 | accel_dev->numa_node); | 473 | dev_to_node(&GET_DEV(accel_dev))); |
| 473 | if (!etr_data) | 474 | if (!etr_data) |
| 474 | return -ENOMEM; | 475 | return -ENOMEM; |
| 475 | 476 | ||
| 476 | num_banks = GET_MAX_BANKS(accel_dev); | 477 | num_banks = GET_MAX_BANKS(accel_dev); |
| 477 | size = num_banks * sizeof(struct adf_etr_bank_data); | 478 | size = num_banks * sizeof(struct adf_etr_bank_data); |
| 478 | etr_data->banks = kzalloc_node(size, GFP_KERNEL, accel_dev->numa_node); | 479 | etr_data->banks = kzalloc_node(size, GFP_KERNEL, |
| 480 | dev_to_node(&GET_DEV(accel_dev))); | ||
| 479 | if (!etr_data->banks) { | 481 | if (!etr_data->banks) { |
| 480 | ret = -ENOMEM; | 482 | ret = -ENOMEM; |
| 481 | goto err_bank; | 483 | goto err_bank; |
diff --git a/drivers/crypto/qat/qat_common/qat_algs.c b/drivers/crypto/qat/qat_common/qat_algs.c index 699ccf44e9bb..9e9619cd4a79 100644 --- a/drivers/crypto/qat/qat_common/qat_algs.c +++ b/drivers/crypto/qat/qat_common/qat_algs.c | |||
| @@ -596,7 +596,8 @@ static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst, | |||
| 596 | if (unlikely(!n)) | 596 | if (unlikely(!n)) |
| 597 | return -EINVAL; | 597 | return -EINVAL; |
| 598 | 598 | ||
| 599 | bufl = kmalloc_node(sz, GFP_ATOMIC, inst->accel_dev->numa_node); | 599 | bufl = kmalloc_node(sz, GFP_ATOMIC, |
| 600 | dev_to_node(&GET_DEV(inst->accel_dev))); | ||
| 600 | if (unlikely(!bufl)) | 601 | if (unlikely(!bufl)) |
| 601 | return -ENOMEM; | 602 | return -ENOMEM; |
| 602 | 603 | ||
| @@ -642,7 +643,7 @@ static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst, | |||
| 642 | struct qat_alg_buf *bufers; | 643 | struct qat_alg_buf *bufers; |
| 643 | 644 | ||
| 644 | buflout = kmalloc_node(sz, GFP_ATOMIC, | 645 | buflout = kmalloc_node(sz, GFP_ATOMIC, |
| 645 | inst->accel_dev->numa_node); | 646 | dev_to_node(&GET_DEV(inst->accel_dev))); |
| 646 | if (unlikely(!buflout)) | 647 | if (unlikely(!buflout)) |
| 647 | goto err; | 648 | goto err; |
| 648 | bloutp = dma_map_single(dev, buflout, sz, DMA_TO_DEVICE); | 649 | bloutp = dma_map_single(dev, buflout, sz, DMA_TO_DEVICE); |
diff --git a/drivers/crypto/qat/qat_common/qat_crypto.c b/drivers/crypto/qat/qat_common/qat_crypto.c index 0d59bcb50de1..828f2a686aab 100644 --- a/drivers/crypto/qat/qat_common/qat_crypto.c +++ b/drivers/crypto/qat/qat_common/qat_crypto.c | |||
| @@ -109,12 +109,14 @@ struct qat_crypto_instance *qat_crypto_get_instance_node(int node) | |||
| 109 | 109 | ||
| 110 | list_for_each(itr, adf_devmgr_get_head()) { | 110 | list_for_each(itr, adf_devmgr_get_head()) { |
| 111 | accel_dev = list_entry(itr, struct adf_accel_dev, list); | 111 | accel_dev = list_entry(itr, struct adf_accel_dev, list); |
| 112 | if (accel_dev->numa_node == node && adf_dev_started(accel_dev)) | 112 | if ((node == dev_to_node(&GET_DEV(accel_dev)) || |
| 113 | dev_to_node(&GET_DEV(accel_dev)) < 0) | ||
| 114 | && adf_dev_started(accel_dev)) | ||
| 113 | break; | 115 | break; |
| 114 | accel_dev = NULL; | 116 | accel_dev = NULL; |
| 115 | } | 117 | } |
| 116 | if (!accel_dev) { | 118 | if (!accel_dev) { |
| 117 | pr_err("QAT: Could not find device on give node\n"); | 119 | pr_err("QAT: Could not find device on node %d\n", node); |
| 118 | accel_dev = adf_devmgr_get_first(); | 120 | accel_dev = adf_devmgr_get_first(); |
| 119 | } | 121 | } |
| 120 | if (!accel_dev || !adf_dev_started(accel_dev)) | 122 | if (!accel_dev || !adf_dev_started(accel_dev)) |
| @@ -164,7 +166,7 @@ static int qat_crypto_create_instances(struct adf_accel_dev *accel_dev) | |||
| 164 | 166 | ||
| 165 | for (i = 0; i < num_inst; i++) { | 167 | for (i = 0; i < num_inst; i++) { |
| 166 | inst = kzalloc_node(sizeof(*inst), GFP_KERNEL, | 168 | inst = kzalloc_node(sizeof(*inst), GFP_KERNEL, |
| 167 | accel_dev->numa_node); | 169 | dev_to_node(&GET_DEV(accel_dev))); |
| 168 | if (!inst) | 170 | if (!inst) |
| 169 | goto err; | 171 | goto err; |
| 170 | 172 | ||
diff --git a/drivers/crypto/qat/qat_dh895xcc/adf_admin.c b/drivers/crypto/qat/qat_dh895xcc/adf_admin.c index 978d6c56639d..53c491b59f07 100644 --- a/drivers/crypto/qat/qat_dh895xcc/adf_admin.c +++ b/drivers/crypto/qat/qat_dh895xcc/adf_admin.c | |||
| @@ -108,7 +108,7 @@ int adf_init_admin_comms(struct adf_accel_dev *accel_dev) | |||
| 108 | uint64_t reg_val; | 108 | uint64_t reg_val; |
| 109 | 109 | ||
| 110 | admin = kzalloc_node(sizeof(*accel_dev->admin), GFP_KERNEL, | 110 | admin = kzalloc_node(sizeof(*accel_dev->admin), GFP_KERNEL, |
| 111 | accel_dev->numa_node); | 111 | dev_to_node(&GET_DEV(accel_dev))); |
| 112 | if (!admin) | 112 | if (!admin) |
| 113 | return -ENOMEM; | 113 | return -ENOMEM; |
| 114 | admin->virt_addr = dma_zalloc_coherent(&GET_DEV(accel_dev), PAGE_SIZE, | 114 | admin->virt_addr = dma_zalloc_coherent(&GET_DEV(accel_dev), PAGE_SIZE, |
diff --git a/drivers/crypto/qat/qat_dh895xcc/adf_drv.c b/drivers/crypto/qat/qat_dh895xcc/adf_drv.c index 0d0435a41be9..948f66be262b 100644 --- a/drivers/crypto/qat/qat_dh895xcc/adf_drv.c +++ b/drivers/crypto/qat/qat_dh895xcc/adf_drv.c | |||
| @@ -119,21 +119,6 @@ static void adf_cleanup_accel(struct adf_accel_dev *accel_dev) | |||
| 119 | kfree(accel_dev); | 119 | kfree(accel_dev); |
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | static uint8_t adf_get_dev_node_id(struct pci_dev *pdev) | ||
| 123 | { | ||
| 124 | unsigned int bus_per_cpu = 0; | ||
| 125 | struct cpuinfo_x86 *c = &cpu_data(num_online_cpus() - 1); | ||
| 126 | |||
| 127 | if (!c->phys_proc_id) | ||
| 128 | return 0; | ||
| 129 | |||
| 130 | bus_per_cpu = 256 / (c->phys_proc_id + 1); | ||
| 131 | |||
| 132 | if (bus_per_cpu != 0) | ||
| 133 | return pdev->bus->number / bus_per_cpu; | ||
| 134 | return 0; | ||
| 135 | } | ||
| 136 | |||
| 137 | static int qat_dev_start(struct adf_accel_dev *accel_dev) | 122 | static int qat_dev_start(struct adf_accel_dev *accel_dev) |
| 138 | { | 123 | { |
| 139 | int cpus = num_online_cpus(); | 124 | int cpus = num_online_cpus(); |
| @@ -235,7 +220,6 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 235 | void __iomem *pmisc_bar_addr = NULL; | 220 | void __iomem *pmisc_bar_addr = NULL; |
| 236 | char name[ADF_DEVICE_NAME_LENGTH]; | 221 | char name[ADF_DEVICE_NAME_LENGTH]; |
| 237 | unsigned int i, bar_nr; | 222 | unsigned int i, bar_nr; |
| 238 | uint8_t node; | ||
| 239 | int ret; | 223 | int ret; |
| 240 | 224 | ||
| 241 | switch (ent->device) { | 225 | switch (ent->device) { |
| @@ -246,12 +230,19 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 246 | return -ENODEV; | 230 | return -ENODEV; |
| 247 | } | 231 | } |
| 248 | 232 | ||
| 249 | node = adf_get_dev_node_id(pdev); | 233 | if (num_possible_nodes() > 1 && dev_to_node(&pdev->dev) < 0) { |
| 250 | accel_dev = kzalloc_node(sizeof(*accel_dev), GFP_KERNEL, node); | 234 | /* If the accelerator is connected to a node with no memory |
| 235 | * there is no point in using the accelerator since the remote | ||
| 236 | * memory transaction will be very slow. */ | ||
| 237 | dev_err(&pdev->dev, "Invalid NUMA configuration.\n"); | ||
| 238 | return -EINVAL; | ||
| 239 | } | ||
| 240 | |||
| 241 | accel_dev = kzalloc_node(sizeof(*accel_dev), GFP_KERNEL, | ||
| 242 | dev_to_node(&pdev->dev)); | ||
| 251 | if (!accel_dev) | 243 | if (!accel_dev) |
| 252 | return -ENOMEM; | 244 | return -ENOMEM; |
| 253 | 245 | ||
| 254 | accel_dev->numa_node = node; | ||
| 255 | INIT_LIST_HEAD(&accel_dev->crypto_list); | 246 | INIT_LIST_HEAD(&accel_dev->crypto_list); |
| 256 | 247 | ||
| 257 | /* Add accel device to accel table. | 248 | /* Add accel device to accel table. |
| @@ -264,7 +255,8 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 264 | 255 | ||
| 265 | accel_dev->owner = THIS_MODULE; | 256 | accel_dev->owner = THIS_MODULE; |
| 266 | /* Allocate and configure device configuration structure */ | 257 | /* Allocate and configure device configuration structure */ |
| 267 | hw_data = kzalloc_node(sizeof(*hw_data), GFP_KERNEL, node); | 258 | hw_data = kzalloc_node(sizeof(*hw_data), GFP_KERNEL, |
| 259 | dev_to_node(&pdev->dev)); | ||
| 268 | if (!hw_data) { | 260 | if (!hw_data) { |
| 269 | ret = -ENOMEM; | 261 | ret = -ENOMEM; |
| 270 | goto out_err; | 262 | goto out_err; |
diff --git a/drivers/crypto/qat/qat_dh895xcc/adf_isr.c b/drivers/crypto/qat/qat_dh895xcc/adf_isr.c index 67ec61e51185..d96ee21b9b77 100644 --- a/drivers/crypto/qat/qat_dh895xcc/adf_isr.c +++ b/drivers/crypto/qat/qat_dh895xcc/adf_isr.c | |||
| @@ -168,7 +168,7 @@ static int adf_isr_alloc_msix_entry_table(struct adf_accel_dev *accel_dev) | |||
| 168 | uint32_t msix_num_entries = hw_data->num_banks + 1; | 168 | uint32_t msix_num_entries = hw_data->num_banks + 1; |
| 169 | 169 | ||
| 170 | entries = kzalloc_node(msix_num_entries * sizeof(*entries), | 170 | entries = kzalloc_node(msix_num_entries * sizeof(*entries), |
| 171 | GFP_KERNEL, accel_dev->numa_node); | 171 | GFP_KERNEL, dev_to_node(&GET_DEV(accel_dev))); |
| 172 | if (!entries) | 172 | if (!entries) |
| 173 | return -ENOMEM; | 173 | return -ENOMEM; |
| 174 | 174 | ||
