|
@@ -119,21 +119,6 @@ static void adf_cleanup_accel(struct adf_accel_dev *accel_dev)
|
|
|
kfree(accel_dev);
|
|
|
}
|
|
|
|
|
|
-static uint8_t adf_get_dev_node_id(struct pci_dev *pdev)
|
|
|
-{
|
|
|
- unsigned int bus_per_cpu = 0;
|
|
|
- struct cpuinfo_x86 *c = &cpu_data(num_online_cpus() - 1);
|
|
|
-
|
|
|
- if (!c->phys_proc_id)
|
|
|
- return 0;
|
|
|
-
|
|
|
- bus_per_cpu = 256 / (c->phys_proc_id + 1);
|
|
|
-
|
|
|
- if (bus_per_cpu != 0)
|
|
|
- return pdev->bus->number / bus_per_cpu;
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
static int qat_dev_start(struct adf_accel_dev *accel_dev)
|
|
|
{
|
|
|
int cpus = num_online_cpus();
|
|
@@ -235,7 +220,6 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
void __iomem *pmisc_bar_addr = NULL;
|
|
|
char name[ADF_DEVICE_NAME_LENGTH];
|
|
|
unsigned int i, bar_nr;
|
|
|
- uint8_t node;
|
|
|
int ret;
|
|
|
|
|
|
switch (ent->device) {
|
|
@@ -246,12 +230,19 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
return -ENODEV;
|
|
|
}
|
|
|
|
|
|
- node = adf_get_dev_node_id(pdev);
|
|
|
- accel_dev = kzalloc_node(sizeof(*accel_dev), GFP_KERNEL, node);
|
|
|
+ if (num_possible_nodes() > 1 && dev_to_node(&pdev->dev) < 0) {
|
|
|
+ /* If the accelerator is connected to a node with no memory
|
|
|
+ * there is no point in using the accelerator since the remote
|
|
|
+ * memory transaction will be very slow. */
|
|
|
+ dev_err(&pdev->dev, "Invalid NUMA configuration.\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ accel_dev = kzalloc_node(sizeof(*accel_dev), GFP_KERNEL,
|
|
|
+ dev_to_node(&pdev->dev));
|
|
|
if (!accel_dev)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- accel_dev->numa_node = node;
|
|
|
INIT_LIST_HEAD(&accel_dev->crypto_list);
|
|
|
|
|
|
/* Add accel device to accel table.
|
|
@@ -264,7 +255,8 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
|
|
|
accel_dev->owner = THIS_MODULE;
|
|
|
/* Allocate and configure device configuration structure */
|
|
|
- hw_data = kzalloc_node(sizeof(*hw_data), GFP_KERNEL, node);
|
|
|
+ hw_data = kzalloc_node(sizeof(*hw_data), GFP_KERNEL,
|
|
|
+ dev_to_node(&pdev->dev));
|
|
|
if (!hw_data) {
|
|
|
ret = -ENOMEM;
|
|
|
goto out_err;
|