Commit 64ffe843 authored by Dan Williams's avatar Dan Williams
Browse files

Merge branch 'for-5.12/dax' into for-5.12/libnvdimm

Pick up device-dax updates to merge with libnvdimm device updates for
5.12.

* Fix the polarity of EINVAL in a sysfs return code
* Drop the unused return code for driver remove() callbacks
parents 1f975074 0d519e0d
Loading
Loading
Loading
Loading
+21 −3
Original line number Diff line number Diff line
@@ -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 = {
@@ -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)
@@ -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;
@@ -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);

+1 −1
Original line number Diff line number Diff line
@@ -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,
+1 −7
Original line number Diff line number Diff line
@@ -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,
};

+2 −5
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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 */