| .. | .. |
|---|
| 19 | 19 | #include <linux/debugfs.h> |
|---|
| 20 | 20 | #include <linux/device.h> |
|---|
| 21 | 21 | #include <linux/delay.h> |
|---|
| 22 | | -#include <linux/dma-mapping.h> |
|---|
| 22 | +#include <linux/dma-map-ops.h> |
|---|
| 23 | 23 | #include <linux/init.h> |
|---|
| 24 | 24 | #include <linux/module.h> |
|---|
| 25 | 25 | #include <linux/kthread.h> |
|---|
| .. | .. |
|---|
| 27 | 27 | #include <linux/async.h> |
|---|
| 28 | 28 | #include <linux/pm_runtime.h> |
|---|
| 29 | 29 | #include <linux/pinctrl/devinfo.h> |
|---|
| 30 | +#include <linux/slab.h> |
|---|
| 30 | 31 | |
|---|
| 31 | 32 | #include "base.h" |
|---|
| 32 | 33 | #include "power/power.h" |
|---|
| .. | .. |
|---|
| 96 | 97 | |
|---|
| 97 | 98 | get_device(dev); |
|---|
| 98 | 99 | |
|---|
| 100 | + kfree(dev->p->deferred_probe_reason); |
|---|
| 101 | + dev->p->deferred_probe_reason = NULL; |
|---|
| 102 | + |
|---|
| 99 | 103 | /* |
|---|
| 100 | 104 | * Drop the mutex while probing each device; the probe path may |
|---|
| 101 | 105 | * manipulate the deferred list |
|---|
| .. | .. |
|---|
| 136 | 140 | if (!list_empty(&dev->p->deferred_probe)) { |
|---|
| 137 | 141 | dev_dbg(dev, "Removed from deferred list\n"); |
|---|
| 138 | 142 | list_del_init(&dev->p->deferred_probe); |
|---|
| 143 | + kfree(dev->p->deferred_probe_reason); |
|---|
| 144 | + dev->p->deferred_probe_reason = NULL; |
|---|
| 139 | 145 | } |
|---|
| 140 | 146 | mutex_unlock(&deferred_probe_mutex); |
|---|
| 141 | 147 | } |
|---|
| .. | .. |
|---|
| 179 | 185 | * Kick the re-probe thread. It may already be scheduled, but it is |
|---|
| 180 | 186 | * safe to kick it again. |
|---|
| 181 | 187 | */ |
|---|
| 182 | | - schedule_work(&deferred_probe_work); |
|---|
| 188 | + queue_work(system_unbound_wq, &deferred_probe_work); |
|---|
| 183 | 189 | } |
|---|
| 184 | 190 | |
|---|
| 185 | 191 | /** |
|---|
| 186 | | - * device_block_probing() - Block/defere device's probes |
|---|
| 192 | + * device_block_probing() - Block/defer device's probes |
|---|
| 187 | 193 | * |
|---|
| 188 | 194 | * It will disable probing of devices and defer their probes instead. |
|---|
| 189 | 195 | */ |
|---|
| .. | .. |
|---|
| 206 | 212 | driver_deferred_probe_trigger(); |
|---|
| 207 | 213 | } |
|---|
| 208 | 214 | |
|---|
| 215 | +/** |
|---|
| 216 | + * device_set_deferred_probe_reason() - Set defer probe reason message for device |
|---|
| 217 | + * @dev: the pointer to the struct device |
|---|
| 218 | + * @vaf: the pointer to va_format structure with message |
|---|
| 219 | + */ |
|---|
| 220 | +void device_set_deferred_probe_reason(const struct device *dev, struct va_format *vaf) |
|---|
| 221 | +{ |
|---|
| 222 | + const char *drv = dev_driver_string(dev); |
|---|
| 223 | + |
|---|
| 224 | + mutex_lock(&deferred_probe_mutex); |
|---|
| 225 | + |
|---|
| 226 | + kfree(dev->p->deferred_probe_reason); |
|---|
| 227 | + dev->p->deferred_probe_reason = kasprintf(GFP_KERNEL, "%s: %pV", drv, vaf); |
|---|
| 228 | + |
|---|
| 229 | + mutex_unlock(&deferred_probe_mutex); |
|---|
| 230 | +} |
|---|
| 231 | + |
|---|
| 209 | 232 | /* |
|---|
| 210 | 233 | * deferred_devs_show() - Show the devices in the deferred probe pending list. |
|---|
| 211 | 234 | */ |
|---|
| .. | .. |
|---|
| 216 | 239 | mutex_lock(&deferred_probe_mutex); |
|---|
| 217 | 240 | |
|---|
| 218 | 241 | list_for_each_entry(curr, &deferred_probe_pending_list, deferred_probe) |
|---|
| 219 | | - seq_printf(s, "%s\n", dev_name(curr->device)); |
|---|
| 242 | + seq_printf(s, "%s\t%s", dev_name(curr->device), |
|---|
| 243 | + curr->device->p->deferred_probe_reason ?: "\n"); |
|---|
| 220 | 244 | |
|---|
| 221 | 245 | mutex_unlock(&deferred_probe_mutex); |
|---|
| 222 | 246 | |
|---|
| .. | .. |
|---|
| 224 | 248 | } |
|---|
| 225 | 249 | DEFINE_SHOW_ATTRIBUTE(deferred_devs); |
|---|
| 226 | 250 | |
|---|
| 227 | | -static int deferred_probe_timeout = -1; |
|---|
| 251 | +int driver_deferred_probe_timeout; |
|---|
| 252 | +EXPORT_SYMBOL_GPL(driver_deferred_probe_timeout); |
|---|
| 253 | + |
|---|
| 228 | 254 | static int __init deferred_probe_timeout_setup(char *str) |
|---|
| 229 | 255 | { |
|---|
| 230 | | - deferred_probe_timeout = simple_strtol(str, NULL, 10); |
|---|
| 256 | + int timeout; |
|---|
| 257 | + |
|---|
| 258 | + if (!kstrtoint(str, 10, &timeout)) |
|---|
| 259 | + driver_deferred_probe_timeout = timeout; |
|---|
| 231 | 260 | return 1; |
|---|
| 232 | 261 | } |
|---|
| 233 | 262 | __setup("deferred_probe_timeout=", deferred_probe_timeout_setup); |
|---|
| .. | .. |
|---|
| 236 | 265 | * driver_deferred_probe_check_state() - Check deferred probe state |
|---|
| 237 | 266 | * @dev: device to check |
|---|
| 238 | 267 | * |
|---|
| 239 | | - * Returns -ENODEV if init is done and all built-in drivers have had a chance |
|---|
| 240 | | - * to probe (i.e. initcalls are done), -ETIMEDOUT if deferred probe debug |
|---|
| 241 | | - * timeout has expired, or -EPROBE_DEFER if none of those conditions are met. |
|---|
| 268 | + * Return: |
|---|
| 269 | + * -ENODEV if initcalls have completed and modules are disabled. |
|---|
| 270 | + * -ETIMEDOUT if the deferred probe timeout was set and has expired |
|---|
| 271 | + * and modules are enabled. |
|---|
| 272 | + * -EPROBE_DEFER in other cases. |
|---|
| 242 | 273 | * |
|---|
| 243 | 274 | * Drivers or subsystems can opt-in to calling this function instead of directly |
|---|
| 244 | 275 | * returning -EPROBE_DEFER. |
|---|
| 245 | 276 | */ |
|---|
| 246 | 277 | int driver_deferred_probe_check_state(struct device *dev) |
|---|
| 247 | 278 | { |
|---|
| 248 | | - if (initcalls_done) { |
|---|
| 249 | | - if (!deferred_probe_timeout) { |
|---|
| 250 | | - dev_WARN(dev, "deferred probe timeout, ignoring dependency"); |
|---|
| 251 | | - return -ETIMEDOUT; |
|---|
| 252 | | - } |
|---|
| 253 | | - dev_warn(dev, "ignoring dependency for device, assuming no driver"); |
|---|
| 279 | + if (!IS_ENABLED(CONFIG_MODULES) && initcalls_done) { |
|---|
| 280 | + dev_warn(dev, "ignoring dependency for device, assuming no driver\n"); |
|---|
| 254 | 281 | return -ENODEV; |
|---|
| 255 | 282 | } |
|---|
| 283 | + |
|---|
| 284 | + if (!driver_deferred_probe_timeout && initcalls_done) { |
|---|
| 285 | + dev_warn(dev, "deferred probe timeout, ignoring dependency\n"); |
|---|
| 286 | + return -ETIMEDOUT; |
|---|
| 287 | + } |
|---|
| 288 | + |
|---|
| 256 | 289 | return -EPROBE_DEFER; |
|---|
| 257 | 290 | } |
|---|
| 258 | 291 | |
|---|
| .. | .. |
|---|
| 260 | 293 | { |
|---|
| 261 | 294 | struct device_private *p; |
|---|
| 262 | 295 | |
|---|
| 263 | | - deferred_probe_timeout = 0; |
|---|
| 296 | + driver_deferred_probe_timeout = 0; |
|---|
| 264 | 297 | driver_deferred_probe_trigger(); |
|---|
| 265 | 298 | flush_work(&deferred_probe_work); |
|---|
| 266 | 299 | |
|---|
| .. | .. |
|---|
| 296 | 329 | driver_deferred_probe_trigger(); |
|---|
| 297 | 330 | flush_work(&deferred_probe_work); |
|---|
| 298 | 331 | |
|---|
| 299 | | - if (deferred_probe_timeout > 0) { |
|---|
| 332 | + if (driver_deferred_probe_timeout > 0) { |
|---|
| 300 | 333 | schedule_delayed_work(&deferred_probe_timeout_work, |
|---|
| 301 | | - deferred_probe_timeout * HZ); |
|---|
| 334 | + driver_deferred_probe_timeout * HZ); |
|---|
| 302 | 335 | } |
|---|
| 303 | 336 | return 0; |
|---|
| 304 | 337 | } |
|---|
| .. | .. |
|---|
| 327 | 360 | static void driver_bound(struct device *dev) |
|---|
| 328 | 361 | { |
|---|
| 329 | 362 | if (device_is_bound(dev)) { |
|---|
| 330 | | - printk(KERN_WARNING "%s: device %s already bound\n", |
|---|
| 363 | + pr_warn("%s: device %s already bound\n", |
|---|
| 331 | 364 | __func__, kobject_name(&dev->kobj)); |
|---|
| 332 | 365 | return; |
|---|
| 333 | 366 | } |
|---|
| .. | .. |
|---|
| 416 | 449 | * Allow manual attachment of a driver to a device. |
|---|
| 417 | 450 | * Caller must have already set @dev->driver. |
|---|
| 418 | 451 | * |
|---|
| 419 | | - * Note that this does not modify the bus reference count |
|---|
| 420 | | - * nor take the bus's rwsem. Please verify those are accounted |
|---|
| 421 | | - * for before calling this. (It is ok to call with no other effort |
|---|
| 422 | | - * from a driver's probe() method.) |
|---|
| 452 | + * Note that this does not modify the bus reference count. |
|---|
| 453 | + * Please verify that is accounted for before calling this. |
|---|
| 454 | + * (It is ok to call with no other effort from a driver's probe() method.) |
|---|
| 423 | 455 | * |
|---|
| 424 | 456 | * This function must be called with the device lock held. |
|---|
| 425 | 457 | */ |
|---|
| .. | .. |
|---|
| 449 | 481 | driver_deferred_probe_trigger(); |
|---|
| 450 | 482 | } |
|---|
| 451 | 483 | |
|---|
| 484 | +static ssize_t state_synced_show(struct device *dev, |
|---|
| 485 | + struct device_attribute *attr, char *buf) |
|---|
| 486 | +{ |
|---|
| 487 | + bool val; |
|---|
| 488 | + |
|---|
| 489 | + device_lock(dev); |
|---|
| 490 | + val = dev->state_synced; |
|---|
| 491 | + device_unlock(dev); |
|---|
| 492 | + |
|---|
| 493 | + return sysfs_emit(buf, "%u\n", val); |
|---|
| 494 | +} |
|---|
| 495 | +static DEVICE_ATTR_RO(state_synced); |
|---|
| 496 | + |
|---|
| 452 | 497 | static int really_probe(struct device *dev, struct device_driver *drv) |
|---|
| 453 | 498 | { |
|---|
| 454 | 499 | int ret = -EPROBE_DEFER; |
|---|
| .. | .. |
|---|
| 459 | 504 | if (defer_all_probes) { |
|---|
| 460 | 505 | /* |
|---|
| 461 | 506 | * Value of defer_all_probes can be set only by |
|---|
| 462 | | - * device_defer_all_probes_enable() which, in turn, will call |
|---|
| 507 | + * device_block_probing() which, in turn, will call |
|---|
| 463 | 508 | * wait_for_device_probe() right after that to avoid any races. |
|---|
| 464 | 509 | */ |
|---|
| 465 | 510 | dev_dbg(dev, "Driver %s force probe deferral\n", drv->name); |
|---|
| .. | .. |
|---|
| 490 | 535 | if (ret) |
|---|
| 491 | 536 | goto pinctrl_bind_failed; |
|---|
| 492 | 537 | |
|---|
| 493 | | - ret = dma_configure(dev); |
|---|
| 494 | | - if (ret) |
|---|
| 495 | | - goto probe_failed; |
|---|
| 538 | + if (dev->bus->dma_configure) { |
|---|
| 539 | + ret = dev->bus->dma_configure(dev); |
|---|
| 540 | + if (ret) |
|---|
| 541 | + goto probe_failed; |
|---|
| 542 | + } |
|---|
| 496 | 543 | |
|---|
| 497 | | - if (driver_sysfs_add(dev)) { |
|---|
| 498 | | - printk(KERN_ERR "%s: driver_sysfs_add(%s) failed\n", |
|---|
| 499 | | - __func__, dev_name(dev)); |
|---|
| 544 | + ret = driver_sysfs_add(dev); |
|---|
| 545 | + if (ret) { |
|---|
| 546 | + pr_err("%s: driver_sysfs_add(%s) failed\n", |
|---|
| 547 | + __func__, dev_name(dev)); |
|---|
| 500 | 548 | goto probe_failed; |
|---|
| 501 | 549 | } |
|---|
| 502 | 550 | |
|---|
| .. | .. |
|---|
| 516 | 564 | goto probe_failed; |
|---|
| 517 | 565 | } |
|---|
| 518 | 566 | |
|---|
| 567 | + ret = device_add_groups(dev, drv->dev_groups); |
|---|
| 568 | + if (ret) { |
|---|
| 569 | + dev_err(dev, "device_add_groups() failed\n"); |
|---|
| 570 | + goto dev_groups_failed; |
|---|
| 571 | + } |
|---|
| 572 | + |
|---|
| 573 | + if (dev_has_sync_state(dev)) { |
|---|
| 574 | + ret = device_create_file(dev, &dev_attr_state_synced); |
|---|
| 575 | + if (ret) { |
|---|
| 576 | + dev_err(dev, "state_synced sysfs add failed\n"); |
|---|
| 577 | + goto dev_sysfs_state_synced_failed; |
|---|
| 578 | + } |
|---|
| 579 | + } |
|---|
| 580 | + |
|---|
| 519 | 581 | if (test_remove) { |
|---|
| 520 | 582 | test_remove = false; |
|---|
| 583 | + |
|---|
| 584 | + device_remove_file(dev, &dev_attr_state_synced); |
|---|
| 585 | + device_remove_groups(dev, drv->dev_groups); |
|---|
| 521 | 586 | |
|---|
| 522 | 587 | if (dev->bus->remove) |
|---|
| 523 | 588 | dev->bus->remove(dev); |
|---|
| .. | .. |
|---|
| 525 | 590 | drv->remove(dev); |
|---|
| 526 | 591 | |
|---|
| 527 | 592 | devres_release_all(dev); |
|---|
| 593 | + arch_teardown_dma_ops(dev); |
|---|
| 594 | + kfree(dev->dma_range_map); |
|---|
| 595 | + dev->dma_range_map = NULL; |
|---|
| 528 | 596 | driver_sysfs_remove(dev); |
|---|
| 529 | 597 | dev->driver = NULL; |
|---|
| 530 | 598 | dev_set_drvdata(dev, NULL); |
|---|
| .. | .. |
|---|
| 546 | 614 | drv->bus->name, __func__, dev_name(dev), drv->name); |
|---|
| 547 | 615 | goto done; |
|---|
| 548 | 616 | |
|---|
| 617 | +dev_sysfs_state_synced_failed: |
|---|
| 618 | + device_remove_groups(dev, drv->dev_groups); |
|---|
| 619 | +dev_groups_failed: |
|---|
| 620 | + if (dev->bus->remove) |
|---|
| 621 | + dev->bus->remove(dev); |
|---|
| 622 | + else if (drv->remove) |
|---|
| 623 | + drv->remove(dev); |
|---|
| 549 | 624 | probe_failed: |
|---|
| 550 | 625 | if (dev->bus) |
|---|
| 551 | 626 | blocking_notifier_call_chain(&dev->bus->p->bus_notifier, |
|---|
| .. | .. |
|---|
| 553 | 628 | pinctrl_bind_failed: |
|---|
| 554 | 629 | device_links_no_driver(dev); |
|---|
| 555 | 630 | devres_release_all(dev); |
|---|
| 556 | | - dma_deconfigure(dev); |
|---|
| 631 | + arch_teardown_dma_ops(dev); |
|---|
| 632 | + kfree(dev->dma_range_map); |
|---|
| 633 | + dev->dma_range_map = NULL; |
|---|
| 557 | 634 | driver_sysfs_remove(dev); |
|---|
| 558 | 635 | dev->driver = NULL; |
|---|
| 559 | 636 | dev_set_drvdata(dev, NULL); |
|---|
| .. | .. |
|---|
| 575 | 652 | break; |
|---|
| 576 | 653 | default: |
|---|
| 577 | 654 | /* driver matched but the probe failed */ |
|---|
| 578 | | - printk(KERN_WARNING |
|---|
| 579 | | - "%s: probe of %s failed with error %d\n", |
|---|
| 580 | | - drv->name, dev_name(dev), ret); |
|---|
| 655 | + pr_warn("%s: probe of %s failed with error %d\n", |
|---|
| 656 | + drv->name, dev_name(dev), ret); |
|---|
| 581 | 657 | } |
|---|
| 582 | 658 | /* |
|---|
| 583 | 659 | * Ignore errors returned by ->probe so that the next driver can try |
|---|
| .. | .. |
|---|
| 595 | 671 | */ |
|---|
| 596 | 672 | static int really_probe_debug(struct device *dev, struct device_driver *drv) |
|---|
| 597 | 673 | { |
|---|
| 598 | | - ktime_t calltime, delta, rettime; |
|---|
| 674 | + ktime_t calltime, rettime; |
|---|
| 599 | 675 | int ret; |
|---|
| 600 | 676 | |
|---|
| 601 | 677 | calltime = ktime_get(); |
|---|
| 602 | 678 | ret = really_probe(dev, drv); |
|---|
| 603 | 679 | rettime = ktime_get(); |
|---|
| 604 | | - delta = ktime_sub(rettime, calltime); |
|---|
| 680 | + /* |
|---|
| 681 | + * Don't change this to pr_debug() because that requires |
|---|
| 682 | + * CONFIG_DYNAMIC_DEBUG and we want a simple 'initcall_debug' on the |
|---|
| 683 | + * kernel commandline to print this all the time at the debug level. |
|---|
| 684 | + */ |
|---|
| 605 | 685 | printk(KERN_DEBUG "probe of %s returned %d after %lld usecs\n", |
|---|
| 606 | | - dev_name(dev), ret, (s64) ktime_to_us(delta)); |
|---|
| 686 | + dev_name(dev), ret, ktime_us_delta(rettime, calltime)); |
|---|
| 607 | 687 | return ret; |
|---|
| 608 | 688 | } |
|---|
| 609 | 689 | |
|---|
| .. | .. |
|---|
| 615 | 695 | */ |
|---|
| 616 | 696 | int driver_probe_done(void) |
|---|
| 617 | 697 | { |
|---|
| 618 | | - pr_debug("%s: probe_count = %d\n", __func__, |
|---|
| 619 | | - atomic_read(&probe_count)); |
|---|
| 620 | | - if (atomic_read(&probe_count)) |
|---|
| 698 | + int local_probe_count = atomic_read(&probe_count); |
|---|
| 699 | + |
|---|
| 700 | + pr_debug("%s: probe_count = %d\n", __func__, local_probe_count); |
|---|
| 701 | + if (local_probe_count) |
|---|
| 621 | 702 | return -EBUSY; |
|---|
| 622 | 703 | return 0; |
|---|
| 623 | 704 | } |
|---|
| .. | .. |
|---|
| 687 | 768 | static int __init save_async_options(char *buf) |
|---|
| 688 | 769 | { |
|---|
| 689 | 770 | if (strlen(buf) >= ASYNC_DRV_NAMES_MAX_LEN) |
|---|
| 690 | | - printk(KERN_WARNING |
|---|
| 691 | | - "Too long list of driver names for 'driver_async_probe'!\n"); |
|---|
| 771 | + pr_warn("Too long list of driver names for 'driver_async_probe'!\n"); |
|---|
| 692 | 772 | |
|---|
| 693 | 773 | strlcpy(async_probe_drv_names, buf, ASYNC_DRV_NAMES_MAX_LEN); |
|---|
| 694 | | - return 0; |
|---|
| 774 | + return 1; |
|---|
| 695 | 775 | } |
|---|
| 696 | 776 | __setup("driver_async_probe=", save_async_options); |
|---|
| 697 | 777 | |
|---|
| .. | .. |
|---|
| 762 | 842 | } else if (ret == -EPROBE_DEFER) { |
|---|
| 763 | 843 | dev_dbg(dev, "Device match requests probe deferral\n"); |
|---|
| 764 | 844 | driver_deferred_probe_add(dev); |
|---|
| 845 | + /* |
|---|
| 846 | + * Device can't match with a driver right now, so don't attempt |
|---|
| 847 | + * to match or bind with other drivers on the bus. |
|---|
| 848 | + */ |
|---|
| 849 | + return ret; |
|---|
| 765 | 850 | } else if (ret < 0) { |
|---|
| 766 | | - dev_dbg(dev, "Bus failed to match device: %d", ret); |
|---|
| 851 | + dev_dbg(dev, "Bus failed to match device: %d\n", ret); |
|---|
| 767 | 852 | return ret; |
|---|
| 768 | 853 | } /* ret > 0 means positive match */ |
|---|
| 769 | 854 | |
|---|
| .. | .. |
|---|
| 817 | 902 | static int __device_attach(struct device *dev, bool allow_async) |
|---|
| 818 | 903 | { |
|---|
| 819 | 904 | int ret = 0; |
|---|
| 905 | + bool async = false; |
|---|
| 820 | 906 | |
|---|
| 821 | 907 | device_lock(dev); |
|---|
| 822 | 908 | if (dev->p->dead) { |
|---|
| .. | .. |
|---|
| 855 | 941 | */ |
|---|
| 856 | 942 | dev_dbg(dev, "scheduling asynchronous probe\n"); |
|---|
| 857 | 943 | get_device(dev); |
|---|
| 858 | | - async_schedule(__device_attach_async_helper, dev); |
|---|
| 944 | + async = true; |
|---|
| 859 | 945 | } else { |
|---|
| 860 | 946 | pm_request_idle(dev); |
|---|
| 861 | 947 | } |
|---|
| .. | .. |
|---|
| 865 | 951 | } |
|---|
| 866 | 952 | out_unlock: |
|---|
| 867 | 953 | device_unlock(dev); |
|---|
| 954 | + if (async) |
|---|
| 955 | + async_schedule_dev(__device_attach_async_helper, dev); |
|---|
| 868 | 956 | return ret; |
|---|
| 869 | 957 | } |
|---|
| 870 | 958 | |
|---|
| .. | .. |
|---|
| 978 | 1066 | static int __driver_attach(struct device *dev, void *data) |
|---|
| 979 | 1067 | { |
|---|
| 980 | 1068 | struct device_driver *drv = data; |
|---|
| 1069 | + bool async = false; |
|---|
| 981 | 1070 | int ret; |
|---|
| 982 | 1071 | |
|---|
| 983 | 1072 | /* |
|---|
| .. | .. |
|---|
| 997 | 1086 | } else if (ret == -EPROBE_DEFER) { |
|---|
| 998 | 1087 | dev_dbg(dev, "Device match requests probe deferral\n"); |
|---|
| 999 | 1088 | driver_deferred_probe_add(dev); |
|---|
| 1089 | + /* |
|---|
| 1090 | + * Driver could not match with device, but may match with |
|---|
| 1091 | + * another device on the bus. |
|---|
| 1092 | + */ |
|---|
| 1093 | + return 0; |
|---|
| 1000 | 1094 | } else if (ret < 0) { |
|---|
| 1001 | | - dev_dbg(dev, "Bus failed to match device: %d", ret); |
|---|
| 1002 | | - return ret; |
|---|
| 1095 | + dev_dbg(dev, "Bus failed to match device: %d\n", ret); |
|---|
| 1096 | + /* |
|---|
| 1097 | + * Driver could not match with device, but may match with |
|---|
| 1098 | + * another device on the bus. |
|---|
| 1099 | + */ |
|---|
| 1100 | + return 0; |
|---|
| 1003 | 1101 | } /* ret > 0 means positive match */ |
|---|
| 1004 | 1102 | |
|---|
| 1005 | 1103 | if (driver_allows_async_probing(drv)) { |
|---|
| .. | .. |
|---|
| 1015 | 1113 | if (!dev->driver) { |
|---|
| 1016 | 1114 | get_device(dev); |
|---|
| 1017 | 1115 | dev->p->async_driver = drv; |
|---|
| 1018 | | - async_schedule(__driver_attach_async_helper, dev); |
|---|
| 1116 | + async = true; |
|---|
| 1019 | 1117 | } |
|---|
| 1020 | 1118 | device_unlock(dev); |
|---|
| 1119 | + if (async) |
|---|
| 1120 | + async_schedule_dev(__driver_attach_async_helper, dev); |
|---|
| 1021 | 1121 | return 0; |
|---|
| 1022 | 1122 | } |
|---|
| 1023 | 1123 | |
|---|
| .. | .. |
|---|
| 1070 | 1170 | } |
|---|
| 1071 | 1171 | } |
|---|
| 1072 | 1172 | |
|---|
| 1073 | | - pm_runtime_clean_up_links(dev); |
|---|
| 1074 | | - |
|---|
| 1075 | 1173 | driver_sysfs_remove(dev); |
|---|
| 1076 | 1174 | |
|---|
| 1077 | 1175 | if (dev->bus) |
|---|
| .. | .. |
|---|
| 1081 | 1179 | |
|---|
| 1082 | 1180 | pm_runtime_put_sync(dev); |
|---|
| 1083 | 1181 | |
|---|
| 1182 | + device_remove_file(dev, &dev_attr_state_synced); |
|---|
| 1183 | + device_remove_groups(dev, drv->dev_groups); |
|---|
| 1184 | + |
|---|
| 1084 | 1185 | if (dev->bus && dev->bus->remove) |
|---|
| 1085 | 1186 | dev->bus->remove(dev); |
|---|
| 1086 | 1187 | else if (drv->remove) |
|---|
| .. | .. |
|---|
| 1089 | 1190 | device_links_driver_cleanup(dev); |
|---|
| 1090 | 1191 | |
|---|
| 1091 | 1192 | devres_release_all(dev); |
|---|
| 1092 | | - dma_deconfigure(dev); |
|---|
| 1193 | + arch_teardown_dma_ops(dev); |
|---|
| 1194 | + kfree(dev->dma_range_map); |
|---|
| 1195 | + dev->dma_range_map = NULL; |
|---|
| 1093 | 1196 | dev->driver = NULL; |
|---|
| 1094 | 1197 | dev_set_drvdata(dev, NULL); |
|---|
| 1095 | 1198 | if (dev->pm_domain && dev->pm_domain->dismiss) |
|---|
| .. | .. |
|---|
| 1172 | 1275 | spin_unlock(&drv->p->klist_devices.k_lock); |
|---|
| 1173 | 1276 | break; |
|---|
| 1174 | 1277 | } |
|---|
| 1175 | | - dev_prv = list_entry(drv->p->klist_devices.k_list.prev, |
|---|
| 1278 | + dev_prv = list_last_entry(&drv->p->klist_devices.k_list, |
|---|
| 1176 | 1279 | struct device_private, |
|---|
| 1177 | 1280 | knode_driver.n_node); |
|---|
| 1178 | 1281 | dev = dev_prv->device; |
|---|