Skip to content

Commit

Permalink
dmaengine: idxd: add type to driver in order to allow device matching
Browse files Browse the repository at this point in the history
Add an array of support device types to the idxd_device_driver
definition in order to enable simple matching of device type to a
given driver. The deprecated / omnibus dsa_drv driver specifies
IDXD_DEV_NONE as its only role is to service legacy userspace (old
accel-config) directed bind requests and route them to them the proper
driver. It need not attach to a device when the bus is autoprobed. The
accel-config tooling is being updated to drop its dependency on this
deprecated bind scheme.

Reviewed-by: Dan Willliams <dan.j.williams@intel.com>
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/162637465882.744545.17456174666211577867.stgit@djiang5-desk3.ch.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
  • Loading branch information
Dave Jiang authored and Vinod Koul committed Jul 21, 2021
1 parent c05257b commit 5fee656
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 1 deletion.
1 change: 1 addition & 0 deletions drivers/dma/idxd/idxd.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ enum idxd_type {

struct idxd_device_driver {
const char *name;
enum idxd_dev_type *type;
int (*probe)(struct idxd_dev *idxd_dev);
void (*remove)(struct idxd_dev *idxd_dev);
struct device_driver drv;
Expand Down
5 changes: 5 additions & 0 deletions drivers/dma/idxd/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -879,6 +879,11 @@ int __idxd_driver_register(struct idxd_device_driver *idxd_drv, struct module *o
{
struct device_driver *drv = &idxd_drv->drv;

if (!idxd_drv->type) {
pr_debug("driver type not set (%ps)\n", __builtin_return_address(0));
return -EINVAL;
}

drv->name = idxd_drv->name;
drv->bus = &dsa_bus_type;
drv->owner = owner;
Expand Down
16 changes: 15 additions & 1 deletion drivers/dma/idxd/sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,18 @@ static char *idxd_wq_type_names[] = {
static int idxd_config_bus_match(struct device *dev,
struct device_driver *drv)
{
struct idxd_device_driver *idxd_drv =
container_of(drv, struct idxd_device_driver, drv);
struct idxd_dev *idxd_dev = confdev_to_idxd_dev(dev);
int i = 0;

while (idxd_drv->type[i] != IDXD_DEV_NONE) {
if (idxd_dev->type == idxd_drv->type[i])
return 1;
i++;
}

return (is_idxd_dev(idxd_dev) || is_idxd_wq_dev(idxd_dev));
return 0;
}

static int idxd_config_bus_probe(struct device *dev)
Expand Down Expand Up @@ -79,10 +88,15 @@ static void idxd_dsa_drv_remove(struct idxd_dev *idxd_dev)
}
}

static enum idxd_dev_type dev_types[] = {
IDXD_DEV_NONE,
};

struct idxd_device_driver dsa_drv = {
.name = "dsa",
.probe = idxd_dsa_drv_probe,
.remove = idxd_dsa_drv_remove,
.type = dev_types,
};

/* IDXD engine attributes */
Expand Down

0 comments on commit 5fee656

Please sign in to comment.