Loading drivers/dax/bus.c +21 −3 Original line number Diff line number Diff line Loading @@ -179,7 +179,10 @@ static int dax_bus_remove(struct device *dev) struct dax_device_driver *dax_drv = to_dax_drv(dev->driver); struct dev_dax *dev_dax = to_dev_dax(dev); return dax_drv->remove(dev_dax); if (dax_drv->remove) dax_drv->remove(dev_dax); return 0; } static struct bus_type dax_bus_type = { Loading Loading @@ -1038,7 +1041,7 @@ static ssize_t range_parse(const char *opt, size_t len, struct range *range) { unsigned long long addr = 0; char *start, *end, *str; ssize_t rc = EINVAL; ssize_t rc = -EINVAL; str = kstrdup(opt, GFP_KERNEL); if (!str) Loading Loading @@ -1392,6 +1395,13 @@ int __dax_driver_register(struct dax_device_driver *dax_drv, struct device_driver *drv = &dax_drv->drv; int rc = 0; /* * dax_bus_probe() calls dax_drv->probe() unconditionally. * So better be safe than sorry and ensure it is provided. */ if (!dax_drv->probe) return -EINVAL; INIT_LIST_HEAD(&dax_drv->ids); drv->owner = module; drv->name = mod_name; Loading @@ -1409,7 +1419,15 @@ int __dax_driver_register(struct dax_device_driver *dax_drv, mutex_unlock(&dax_bus_lock); if (rc) return rc; return driver_register(drv); rc = driver_register(drv); if (rc && dax_drv->match_always) { mutex_lock(&dax_bus_lock); match_always_count -= dax_drv->match_always; mutex_unlock(&dax_bus_lock); } return rc; } EXPORT_SYMBOL_GPL(__dax_driver_register); Loading drivers/dax/bus.h +1 −1 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ struct dax_device_driver { struct list_head ids; int match_always; int (*probe)(struct dev_dax *dev); int (*remove)(struct dev_dax *dev); void (*remove)(struct dev_dax *dev); }; int __dax_driver_register(struct dax_device_driver *dax_drv, Loading drivers/dax/device.c +1 −7 Original line number Diff line number Diff line Loading @@ -452,15 +452,9 @@ int dev_dax_probe(struct dev_dax *dev_dax) } EXPORT_SYMBOL_GPL(dev_dax_probe); static int dev_dax_remove(struct dev_dax *dev_dax) { /* all probe actions are unwound by devm */ return 0; } static struct dax_device_driver device_dax_driver = { .probe = dev_dax_probe, .remove = dev_dax_remove, /* all probe actions are unwound by devm, so .remove isn't necessary */ .match_always = 1, }; Loading drivers/dax/kmem.c +2 −5 Original line number Diff line number Diff line Loading @@ -136,7 +136,7 @@ static int dev_dax_kmem_probe(struct dev_dax *dev_dax) } #ifdef CONFIG_MEMORY_HOTREMOVE static int dev_dax_kmem_remove(struct dev_dax *dev_dax) static void dev_dax_kmem_remove(struct dev_dax *dev_dax) { int i, success = 0; struct device *dev = &dev_dax->dev; Loading Loading @@ -176,11 +176,9 @@ static int dev_dax_kmem_remove(struct dev_dax *dev_dax) kfree(data); dev_set_drvdata(dev, NULL); } return 0; } #else static int dev_dax_kmem_remove(struct dev_dax *dev_dax) static void dev_dax_kmem_remove(struct dev_dax *dev_dax) { /* * Without hotremove purposely leak the request_mem_region() for the Loading @@ -190,7 +188,6 @@ static int dev_dax_kmem_remove(struct dev_dax *dev_dax) * request_mem_region(). */ any_hotremove_failed = true; return 0; } #endif /* CONFIG_MEMORY_HOTREMOVE */ Loading Loading
drivers/dax/bus.c +21 −3 Original line number Diff line number Diff line Loading @@ -179,7 +179,10 @@ static int dax_bus_remove(struct device *dev) struct dax_device_driver *dax_drv = to_dax_drv(dev->driver); struct dev_dax *dev_dax = to_dev_dax(dev); return dax_drv->remove(dev_dax); if (dax_drv->remove) dax_drv->remove(dev_dax); return 0; } static struct bus_type dax_bus_type = { Loading Loading @@ -1038,7 +1041,7 @@ static ssize_t range_parse(const char *opt, size_t len, struct range *range) { unsigned long long addr = 0; char *start, *end, *str; ssize_t rc = EINVAL; ssize_t rc = -EINVAL; str = kstrdup(opt, GFP_KERNEL); if (!str) Loading Loading @@ -1392,6 +1395,13 @@ int __dax_driver_register(struct dax_device_driver *dax_drv, struct device_driver *drv = &dax_drv->drv; int rc = 0; /* * dax_bus_probe() calls dax_drv->probe() unconditionally. * So better be safe than sorry and ensure it is provided. */ if (!dax_drv->probe) return -EINVAL; INIT_LIST_HEAD(&dax_drv->ids); drv->owner = module; drv->name = mod_name; Loading @@ -1409,7 +1419,15 @@ int __dax_driver_register(struct dax_device_driver *dax_drv, mutex_unlock(&dax_bus_lock); if (rc) return rc; return driver_register(drv); rc = driver_register(drv); if (rc && dax_drv->match_always) { mutex_lock(&dax_bus_lock); match_always_count -= dax_drv->match_always; mutex_unlock(&dax_bus_lock); } return rc; } EXPORT_SYMBOL_GPL(__dax_driver_register); Loading
drivers/dax/bus.h +1 −1 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ struct dax_device_driver { struct list_head ids; int match_always; int (*probe)(struct dev_dax *dev); int (*remove)(struct dev_dax *dev); void (*remove)(struct dev_dax *dev); }; int __dax_driver_register(struct dax_device_driver *dax_drv, Loading
drivers/dax/device.c +1 −7 Original line number Diff line number Diff line Loading @@ -452,15 +452,9 @@ int dev_dax_probe(struct dev_dax *dev_dax) } EXPORT_SYMBOL_GPL(dev_dax_probe); static int dev_dax_remove(struct dev_dax *dev_dax) { /* all probe actions are unwound by devm */ return 0; } static struct dax_device_driver device_dax_driver = { .probe = dev_dax_probe, .remove = dev_dax_remove, /* all probe actions are unwound by devm, so .remove isn't necessary */ .match_always = 1, }; Loading
drivers/dax/kmem.c +2 −5 Original line number Diff line number Diff line Loading @@ -136,7 +136,7 @@ static int dev_dax_kmem_probe(struct dev_dax *dev_dax) } #ifdef CONFIG_MEMORY_HOTREMOVE static int dev_dax_kmem_remove(struct dev_dax *dev_dax) static void dev_dax_kmem_remove(struct dev_dax *dev_dax) { int i, success = 0; struct device *dev = &dev_dax->dev; Loading Loading @@ -176,11 +176,9 @@ static int dev_dax_kmem_remove(struct dev_dax *dev_dax) kfree(data); dev_set_drvdata(dev, NULL); } return 0; } #else static int dev_dax_kmem_remove(struct dev_dax *dev_dax) static void dev_dax_kmem_remove(struct dev_dax *dev_dax) { /* * Without hotremove purposely leak the request_mem_region() for the Loading @@ -190,7 +188,6 @@ static int dev_dax_kmem_remove(struct dev_dax *dev_dax) * request_mem_region(). */ any_hotremove_failed = true; return 0; } #endif /* CONFIG_MEMORY_HOTREMOVE */ Loading