dd.c 15.1 KB
Newer Older
1
/*
2
 * drivers/base/dd.c - The core device/driver interactions.
3
 *
4 5 6
 * This file contains the (sometimes tricky) code that controls the
 * interactions between devices and drivers, which primarily includes
 * driver binding and unbinding.
7
 *
8 9 10
 * All of this code used to exist in drivers/base/bus.c, but was
 * relocated to here in the name of compartmentalization (since it wasn't
 * strictly code just for the 'struct bus_type'.
11
 *
12 13
 * Copyright (c) 2002-5 Patrick Mochel
 * Copyright (c) 2002-3 Open Source Development Labs
14 15
 * Copyright (c) 2007-2009 Greg Kroah-Hartman <gregkh@suse.de>
 * Copyright (c) 2007-2009 Novell Inc.
16
 *
17
 * This file is released under the GPLv2
18 19 20
 */

#include <linux/device.h>
21
#include <linux/delay.h>
22
#include <linux/module.h>
23
#include <linux/kthread.h>
24
#include <linux/wait.h>
25
#include <linux/async.h>
26
#include <linux/pm_runtime.h>
27 28 29 30

#include "base.h"
#include "power/power.h"

31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
/*
 * Deferred Probe infrastructure.
 *
 * Sometimes driver probe order matters, but the kernel doesn't always have
 * dependency information which means some drivers will get probed before a
 * resource it depends on is available.  For example, an SDHCI driver may
 * first need a GPIO line from an i2c GPIO controller before it can be
 * initialized.  If a required resource is not available yet, a driver can
 * request probing to be deferred by returning -EPROBE_DEFER from its probe hook
 *
 * Deferred probe maintains two lists of devices, a pending list and an active
 * list.  A driver returning -EPROBE_DEFER causes the device to be added to the
 * pending list.  A successful driver probe will trigger moving all devices
 * from the pending to the active list so that the workqueue will eventually
 * retry them.
 *
 * The deferred_probe_mutex must be held any time the deferred_probe_*_list
 * of the (struct device*)->deferred_probe pointers are manipulated
 */
static DEFINE_MUTEX(deferred_probe_mutex);
static LIST_HEAD(deferred_probe_pending_list);
static LIST_HEAD(deferred_probe_active_list);
static struct workqueue_struct *deferred_wq;

/**
 * deferred_probe_work_func() - Retry probing devices in the active list.
 */
static void deferred_probe_work_func(struct work_struct *work)
{
	struct device *dev;
	/*
	 * This block processes every device in the deferred 'active' list.
	 * Each device is removed from the active list and passed to
	 * bus_probe_device() to re-attempt the probe.  The loop continues
	 * until every device in the active list is removed and retried.
	 *
	 * Note: Once the device is removed from the list and the mutex is
	 * released, it is possible for the device get freed by another thread
	 * and cause a illegal pointer dereference.  This code uses
	 * get/put_device() to ensure the device structure cannot disappear
	 * from under our feet.
	 */
	mutex_lock(&deferred_probe_mutex);
	while (!list_empty(&deferred_probe_active_list)) {
		dev = list_first_entry(&deferred_probe_active_list,
					typeof(*dev), deferred_probe);
		list_del_init(&dev->deferred_probe);

		get_device(dev);

		/* Drop the mutex while probing each device; the probe path
		 * may manipulate the deferred list */
		mutex_unlock(&deferred_probe_mutex);
		dev_dbg(dev, "Retrying from deferred list\n");
		bus_probe_device(dev);
		mutex_lock(&deferred_probe_mutex);

		put_device(dev);
	}
	mutex_unlock(&deferred_probe_mutex);
}
static DECLARE_WORK(deferred_probe_work, deferred_probe_work_func);

static void driver_deferred_probe_add(struct device *dev)
{
	mutex_lock(&deferred_probe_mutex);
	if (list_empty(&dev->deferred_probe)) {
		dev_dbg(dev, "Added to deferred list\n");
		list_add(&dev->deferred_probe, &deferred_probe_pending_list);
	}
	mutex_unlock(&deferred_probe_mutex);
}

void driver_deferred_probe_del(struct device *dev)
{
	mutex_lock(&deferred_probe_mutex);
	if (!list_empty(&dev->deferred_probe)) {
		dev_dbg(dev, "Removed from deferred list\n");
		list_del_init(&dev->deferred_probe);
	}
	mutex_unlock(&deferred_probe_mutex);
}

static bool driver_deferred_probe_enable = false;
/**
 * driver_deferred_probe_trigger() - Kick off re-probing deferred devices
 *
 * This functions moves all devices from the pending list to the active
 * list and schedules the deferred probe workqueue to process them.  It
 * should be called anytime a driver is successfully bound to a device.
 */
static void driver_deferred_probe_trigger(void)
{
	if (!driver_deferred_probe_enable)
		return;

	/* A successful probe means that all the devices in the pending list
	 * should be triggered to be reprobed.  Move all the deferred devices
	 * into the active list so they can be retried by the workqueue */
	mutex_lock(&deferred_probe_mutex);
	list_splice_tail_init(&deferred_probe_pending_list,
			      &deferred_probe_active_list);
	mutex_unlock(&deferred_probe_mutex);

	/* Kick the re-probe thread.  It may already be scheduled, but
	 * it is safe to kick it again. */
	queue_work(deferred_wq, &deferred_probe_work);
}

/**
 * deferred_probe_initcall() - Enable probing of deferred devices
 *
 * We don't want to get in the way when the bulk of drivers are getting probed.
 * Instead, this initcall makes sure that deferred probing is delayed until
 * late_initcall time.
 */
static int deferred_probe_initcall(void)
{
	deferred_wq = create_singlethread_workqueue("deferwq");
	if (WARN_ON(!deferred_wq))
		return -ENOMEM;

	driver_deferred_probe_enable = true;
	driver_deferred_probe_trigger();
	return 0;
}
late_initcall(deferred_probe_initcall);
158

159
static void driver_bound(struct device *dev)
160
{
161
	if (klist_node_attached(&dev->p->knode_driver)) {
A
Andrew Morton 已提交
162
		printk(KERN_WARNING "%s: device %s already bound\n",
163
			__func__, kobject_name(&dev->kobj));
164
		return;
A
Andrew Morton 已提交
165
	}
166

167
	pr_debug("driver: '%s': %s: bound to device '%s'\n", dev_name(dev),
168
		 __func__, dev->driver->name);
169

170 171
	klist_add_tail(&dev->p->knode_driver, &dev->driver->p->klist_devices);

172 173 174 175 176
	/* Make sure the device is no longer in one of the deferred lists
	 * and kick off retrying all pending devices */
	driver_deferred_probe_del(dev);
	driver_deferred_probe_trigger();

177
	if (dev->bus)
178
		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
179
					     BUS_NOTIFY_BOUND_DRIVER, dev);
180 181 182 183 184 185
}

static int driver_sysfs_add(struct device *dev)
{
	int ret;

186 187 188 189
	if (dev->bus)
		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
					     BUS_NOTIFY_BIND_DRIVER, dev);

190
	ret = sysfs_create_link(&dev->driver->p->kobj, &dev->kobj,
191
			  kobject_name(&dev->kobj));
A
Andrew Morton 已提交
192
	if (ret == 0) {
193
		ret = sysfs_create_link(&dev->kobj, &dev->driver->p->kobj,
A
Andrew Morton 已提交
194 195
					"driver");
		if (ret)
196
			sysfs_remove_link(&dev->driver->p->kobj,
A
Andrew Morton 已提交
197 198 199
					kobject_name(&dev->kobj));
	}
	return ret;
200 201
}

202 203 204 205 206
static void driver_sysfs_remove(struct device *dev)
{
	struct device_driver *drv = dev->driver;

	if (drv) {
207
		sysfs_remove_link(&drv->p->kobj, kobject_name(&dev->kobj));
208 209 210 211 212
		sysfs_remove_link(&dev->kobj, "driver");
	}
}

/**
213 214
 * device_bind_driver - bind a driver to one device.
 * @dev: device.
215
 *
216 217
 * Allow manual attachment of a driver to a device.
 * Caller must have already set @dev->driver.
218
 *
219 220 221 222
 * Note that this does not modify the bus reference count
 * nor take the bus's rwsem. Please verify those are accounted
 * for before calling this. (It is ok to call with no other effort
 * from a driver's probe() method.)
223
 *
224
 * This function must be called with the device lock held.
225 226 227
 */
int device_bind_driver(struct device *dev)
{
228 229 230 231 232 233
	int ret;

	ret = driver_sysfs_add(dev);
	if (!ret)
		driver_bound(dev);
	return ret;
234
}
235
EXPORT_SYMBOL_GPL(device_bind_driver);
236

237
static atomic_t probe_count = ATOMIC_INIT(0);
238 239
static DECLARE_WAIT_QUEUE_HEAD(probe_waitqueue);

240
static int really_probe(struct device *dev, struct device_driver *drv)
241
{
242
	int ret = 0;
243

244
	atomic_inc(&probe_count);
245
	pr_debug("bus: '%s': %s: probing driver %s with device %s\n",
246
		 drv->bus->name, __func__, drv->name, dev_name(dev));
T
Tejun Heo 已提交
247
	WARN_ON(!list_empty(&dev->devres_head));
248 249

	dev->driver = drv;
250 251
	if (driver_sysfs_add(dev)) {
		printk(KERN_ERR "%s: driver_sysfs_add(%s) failed\n",
252
			__func__, dev_name(dev));
253 254 255
		goto probe_failed;
	}

256 257
	if (dev->bus->probe) {
		ret = dev->bus->probe(dev);
258
		if (ret)
259
			goto probe_failed;
260
	} else if (drv->probe) {
261
		ret = drv->probe(dev);
262
		if (ret)
263
			goto probe_failed;
A
Andrew Morton 已提交
264
	}
265 266

	driver_bound(dev);
267
	ret = 1;
268
	pr_debug("bus: '%s': %s: bound device %s to driver %s\n",
269
		 drv->bus->name, __func__, dev_name(dev), drv->name);
270
	goto done;
271

272
probe_failed:
T
Tejun Heo 已提交
273
	devres_release_all(dev);
274 275 276
	driver_sysfs_remove(dev);
	dev->driver = NULL;

277 278 279 280 281
	if (ret == -EPROBE_DEFER) {
		/* Driver requested deferred probing */
		dev_info(dev, "Driver %s requests probe deferral\n", drv->name);
		driver_deferred_probe_add(dev);
	} else if (ret != -ENODEV && ret != -ENXIO) {
282 283 284
		/* driver matched but the probe failed */
		printk(KERN_WARNING
		       "%s: probe of %s failed with error %d\n",
285
		       drv->name, dev_name(dev), ret);
286 287 288
	} else {
		pr_debug("%s: probe of %s rejects match %d\n",
		       drv->name, dev_name(dev), ret);
289
	}
290 291 292 293 294
	/*
	 * Ignore errors returned by ->probe so that the next driver can try
	 * its luck.
	 */
	ret = 0;
295 296
done:
	atomic_dec(&probe_count);
297
	wake_up(&probe_waitqueue);
298 299 300 301 302 303 304 305 306 307 308
	return ret;
}

/**
 * driver_probe_done
 * Determine if the probe sequence is finished or not.
 *
 * Should somehow figure out how to use a semaphore, not an atomic variable...
 */
int driver_probe_done(void)
{
309
	pr_debug("%s: probe_count = %d\n", __func__,
310 311 312 313 314 315
		 atomic_read(&probe_count));
	if (atomic_read(&probe_count))
		return -EBUSY;
	return 0;
}

316 317 318 319
/**
 * wait_for_device_probe
 * Wait for device probing to be completed.
 */
320
void wait_for_device_probe(void)
321 322
{
	/* wait for the known devices to complete their probing */
323
	wait_event(probe_waitqueue, atomic_read(&probe_count) == 0);
324 325
	async_synchronize_full();
}
326
EXPORT_SYMBOL_GPL(wait_for_device_probe);
327

328 329 330 331 332
/**
 * driver_probe_device - attempt to bind device & driver together
 * @drv: driver to bind a device to
 * @dev: device to try to bind to the driver
 *
333
 * This function returns -ENODEV if the device is not registered,
334
 * 1 if the device is bound successfully and 0 otherwise.
335
 *
336 337
 * This function must be called with @dev lock held.  When called for a
 * USB interface, @dev->parent lock must be held as well.
338
 */
339
int driver_probe_device(struct device_driver *drv, struct device *dev)
340 341 342
{
	int ret = 0;

343 344
	if (!device_is_registered(dev))
		return -ENODEV;
345

346
	pr_debug("bus: '%s': %s: matched device %s with driver %s\n",
347
		 drv->bus->name, __func__, dev_name(dev), drv->name);
348

349 350
	pm_runtime_get_noresume(dev);
	pm_runtime_barrier(dev);
351
	ret = really_probe(dev, drv);
352
	pm_runtime_put_sync(dev);
353

354
	return ret;
355 356
}

357
static int __device_attach(struct device_driver *drv, void *data)
358
{
359
	struct device *dev = data;
360 361 362 363

	if (!driver_match_device(drv, dev))
		return 0;

364
	return driver_probe_device(drv, dev);
365 366
}

367
/**
368 369
 * device_attach - try to attach device to a driver.
 * @dev: device.
370
 *
371 372 373
 * Walk the list of drivers that the bus has and call
 * driver_probe_device() for each pair. If a compatible
 * pair is found, break out and return.
374
 *
375
 * Returns 1 if the device was bound to a driver;
376
 * 0 if no matching driver was found;
377
 * -ENODEV if the device is not registered.
378
 *
379
 * When called for a USB interface, @dev->parent lock must be held.
380
 */
381
int device_attach(struct device *dev)
382
{
383 384
	int ret = 0;

385
	device_lock(dev);
386
	if (dev->driver) {
387 388 389 390
		if (klist_node_attached(&dev->p->knode_driver)) {
			ret = 1;
			goto out_unlock;
		}
A
Andrew Morton 已提交
391 392 393
		ret = device_bind_driver(dev);
		if (ret == 0)
			ret = 1;
394 395 396 397
		else {
			dev->driver = NULL;
			ret = 0;
		}
398
	} else {
399
		pm_runtime_get_noresume(dev);
400
		ret = bus_for_each_drv(dev->bus, NULL, dev, __device_attach);
401
		pm_runtime_put_sync(dev);
402
	}
403
out_unlock:
404
	device_unlock(dev);
405
	return ret;
406
}
407
EXPORT_SYMBOL_GPL(device_attach);
408

409
static int __driver_attach(struct device *dev, void *data)
410
{
411
	struct device_driver *drv = data;
412 413 414 415 416 417 418 419 420 421 422

	/*
	 * Lock device and try to bind to it. We drop the error
	 * here and always return 0, because we need to keep trying
	 * to bind to devices and some drivers will return an error
	 * simply if it didn't support the device.
	 *
	 * driver_probe_device() will spit a warning if there
	 * is an error.
	 */

423
	if (!driver_match_device(drv, dev))
424 425
		return 0;

426
	if (dev->parent)	/* Needed for USB */
427 428
		device_lock(dev->parent);
	device_lock(dev);
429 430
	if (!dev->driver)
		driver_probe_device(drv, dev);
431
	device_unlock(dev);
432
	if (dev->parent)
433
		device_unlock(dev->parent);
434

435 436 437 438
	return 0;
}

/**
439 440
 * driver_attach - try to bind driver to devices.
 * @drv: driver.
441
 *
442 443 444 445
 * Walk the list of devices that the bus has on it and try to
 * match the driver with each one.  If driver_probe_device()
 * returns 0 and the @dev->driver is set, we've found a
 * compatible pair.
446
 */
447
int driver_attach(struct device_driver *drv)
448
{
A
Andrew Morton 已提交
449
	return bus_for_each_dev(drv->bus, NULL, drv, __driver_attach);
450
}
451
EXPORT_SYMBOL_GPL(driver_attach);
452

453
/*
454 455
 * __device_release_driver() must be called with @dev lock held.
 * When called for a USB interface, @dev->parent lock must be held as well.
456
 */
457
static void __device_release_driver(struct device *dev)
458
{
459
	struct device_driver *drv;
460

461
	drv = dev->driver;
462
	if (drv) {
463
		pm_runtime_get_sync(dev);
464

465
		driver_sysfs_remove(dev);
466

467
		if (dev->bus)
468
			blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
469 470 471
						     BUS_NOTIFY_UNBIND_DRIVER,
						     dev);

472 473
		pm_runtime_put_sync(dev);

474
		if (dev->bus && dev->bus->remove)
475 476
			dev->bus->remove(dev);
		else if (drv->remove)
477
			drv->remove(dev);
T
Tejun Heo 已提交
478
		devres_release_all(dev);
479
		dev->driver = NULL;
480
		klist_remove(&dev->p->knode_driver);
481 482 483 484
		if (dev->bus)
			blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
						     BUS_NOTIFY_UNBOUND_DRIVER,
						     dev);
485

486
	}
487 488
}

489
/**
490 491
 * device_release_driver - manually detach device from driver.
 * @dev: device.
492
 *
493
 * Manually detach device from driver.
494
 * When called for a USB interface, @dev->parent lock must be held.
495
 */
496
void device_release_driver(struct device *dev)
497
{
498 499 500 501 502
	/*
	 * If anyone calls device_release_driver() recursively from
	 * within their ->remove callback for the same device, they
	 * will deadlock right here.
	 */
503
	device_lock(dev);
504
	__device_release_driver(dev);
505
	device_unlock(dev);
506
}
507
EXPORT_SYMBOL_GPL(device_release_driver);
508

509 510 511 512
/**
 * driver_detach - detach driver from all devices it controls.
 * @drv: driver.
 */
513
void driver_detach(struct device_driver *drv)
514
{
515
	struct device_private *dev_prv;
516
	struct device *dev;
517 518

	for (;;) {
519 520 521
		spin_lock(&drv->p->klist_devices.k_lock);
		if (list_empty(&drv->p->klist_devices.k_list)) {
			spin_unlock(&drv->p->klist_devices.k_lock);
522 523
			break;
		}
524 525 526 527
		dev_prv = list_entry(drv->p->klist_devices.k_list.prev,
				     struct device_private,
				     knode_driver.n_node);
		dev = dev_prv->device;
528
		get_device(dev);
529
		spin_unlock(&drv->p->klist_devices.k_lock);
530

531
		if (dev->parent)	/* Needed for USB */
532 533
			device_lock(dev->parent);
		device_lock(dev);
534 535
		if (dev->driver == drv)
			__device_release_driver(dev);
536
		device_unlock(dev);
537
		if (dev->parent)
538
			device_unlock(dev->parent);
539 540
		put_device(dev);
	}
541
}
542 543 544 545 546 547 548 549 550 551 552 553 554

/*
 * These exports can't be _GPL due to .h files using this within them, and it
 * might break something that was previously working...
 */
void *dev_get_drvdata(const struct device *dev)
{
	if (dev && dev->p)
		return dev->p->driver_data;
	return NULL;
}
EXPORT_SYMBOL(dev_get_drvdata);

555
int dev_set_drvdata(struct device *dev, void *data)
556 557 558 559 560 561
{
	int error;

	if (!dev->p) {
		error = device_private_init(dev);
		if (error)
562
			return error;
563 564
	}
	dev->p->driver_data = data;
565
	return 0;
566 567
}
EXPORT_SYMBOL(dev_set_drvdata);