diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-22 19:02:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-22 19:02:13 -0400 |
commit | 5d4e2d08e7fdf7339f84a1c670d296a77e02f881 (patch) | |
tree | 1c419660defa56191091dfdf50fdb57a72009173 /drivers/base | |
parent | fb2123fad3b499f0898835b19dbb93b18d27ee98 (diff) | |
parent | 94ca629e40eb7e997be21d8065c25e4f3797b03f (diff) |
Merge tag 'driver-core-3.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
Pull driver core updates from Greg Kroah-Hartman:
"Here's the driver core, and other driver subsystems, pull request for
the 3.5-rc1 merge window.
Outside of a few minor driver core changes, we ended up with the
following different subsystem and core changes as well, due to
interdependancies on the driver core:
- hyperv driver updates
- drivers/memory being created and some drivers moved into it
- extcon driver subsystem created out of the old Android staging
switch driver code
- dynamic debug updates
- printk rework, and /dev/kmsg changes
All of this has been tested in the linux-next releases for a few weeks
with no reported problems.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>"
Fix up conflicts in drivers/extcon/extcon-max8997.c where git noticed
that a patch to the deleted drivers/misc/max8997-muic.c driver needs to
be applied to this one.
* tag 'driver-core-3.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (90 commits)
uio_pdrv_genirq: get irq through platform resource if not set otherwise
memory: tegra{20,30}-mc: Remove empty *_remove()
printk() - isolate KERN_CONT users from ordinary complete lines
sysfs: get rid of some lockdep false positives
Drivers: hv: util: Properly handle version negotiations.
Drivers: hv: Get rid of an unnecessary check in vmbus_prep_negotiate_resp()
memory: tegra{20,30}-mc: Use dev_err_ratelimited()
driver core: Add dev_*_ratelimited() family
Driver Core: don't oops with unregistered driver in driver_find_device()
printk() - restore prefix/timestamp printing for multi-newline strings
printk: add stub for prepend_timestamp()
ARM: tegra30: Make MC optional in Kconfig
ARM: tegra20: Make MC optional in Kconfig
ARM: tegra30: MC: Remove unnecessary BUG*()
ARM: tegra20: MC: Remove unnecessary BUG*()
printk: correctly align __log_buf
ARM: tegra30: Add Tegra Memory Controller(MC) driver
ARM: tegra20: Add Tegra Memory Controller(MC) driver
printk() - restore timestamp printing at console output
printk() - do not merge continuation lines of different threads
...
Diffstat (limited to 'drivers/base')
-rw-r--r-- | drivers/base/bus.c | 3 | ||||
-rw-r--r-- | drivers/base/core.c | 58 | ||||
-rw-r--r-- | drivers/base/devres.c | 35 | ||||
-rw-r--r-- | drivers/base/devtmpfs.c | 6 | ||||
-rw-r--r-- | drivers/base/dma-buf.c | 12 | ||||
-rw-r--r-- | drivers/base/driver.c | 2 |
6 files changed, 98 insertions, 18 deletions
diff --git a/drivers/base/bus.c b/drivers/base/bus.c index 26a06b801b5b..2bcef657a60c 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c | |||
@@ -21,8 +21,7 @@ | |||
21 | #include "power/power.h" | 21 | #include "power/power.h" |
22 | 22 | ||
23 | /* /sys/devices/system */ | 23 | /* /sys/devices/system */ |
24 | /* FIXME: make static after drivers/base/sys.c is deleted */ | 24 | static struct kset *system_kset; |
25 | struct kset *system_kset; | ||
26 | 25 | ||
27 | #define to_bus_attr(_attr) container_of(_attr, struct bus_attribute, attr) | 26 | #define to_bus_attr(_attr) container_of(_attr, struct bus_attribute, attr) |
28 | 27 | ||
diff --git a/drivers/base/core.c b/drivers/base/core.c index e28ce9898af4..346be8b78b24 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/mutex.h> | 25 | #include <linux/mutex.h> |
26 | #include <linux/async.h> | 26 | #include <linux/async.h> |
27 | #include <linux/pm_runtime.h> | 27 | #include <linux/pm_runtime.h> |
28 | #include <linux/netdevice.h> | ||
28 | 29 | ||
29 | #include "base.h" | 30 | #include "base.h" |
30 | #include "power/power.h" | 31 | #include "power/power.h" |
@@ -65,7 +66,7 @@ static inline int device_is_not_partition(struct device *dev) | |||
65 | * @dev: struct device to get the name of | 66 | * @dev: struct device to get the name of |
66 | * | 67 | * |
67 | * Will return the device's driver's name if it is bound to a device. If | 68 | * Will return the device's driver's name if it is bound to a device. If |
68 | * the device is not bound to a device, it will return the name of the bus | 69 | * the device is not bound to a driver, it will return the name of the bus |
69 | * it is attached to. If it is not attached to a bus either, an empty | 70 | * it is attached to. If it is not attached to a bus either, an empty |
70 | * string will be returned. | 71 | * string will be returned. |
71 | */ | 72 | */ |
@@ -878,8 +879,8 @@ EXPORT_SYMBOL_GPL(dev_set_name); | |||
878 | * to NULL prevents an entry from being created. class->dev_kobj must | 879 | * to NULL prevents an entry from being created. class->dev_kobj must |
879 | * be set (or cleared) before any devices are registered to the class | 880 | * be set (or cleared) before any devices are registered to the class |
880 | * otherwise device_create_sys_dev_entry() and | 881 | * otherwise device_create_sys_dev_entry() and |
881 | * device_remove_sys_dev_entry() will disagree about the the presence | 882 | * device_remove_sys_dev_entry() will disagree about the presence of |
882 | * of the link. | 883 | * the link. |
883 | */ | 884 | */ |
884 | static struct kobject *device_to_dev_kobj(struct device *dev) | 885 | static struct kobject *device_to_dev_kobj(struct device *dev) |
885 | { | 886 | { |
@@ -1843,15 +1844,60 @@ void device_shutdown(void) | |||
1843 | */ | 1844 | */ |
1844 | 1845 | ||
1845 | #ifdef CONFIG_PRINTK | 1846 | #ifdef CONFIG_PRINTK |
1846 | |||
1847 | int __dev_printk(const char *level, const struct device *dev, | 1847 | int __dev_printk(const char *level, const struct device *dev, |
1848 | struct va_format *vaf) | 1848 | struct va_format *vaf) |
1849 | { | 1849 | { |
1850 | char dict[128]; | ||
1851 | size_t dictlen = 0; | ||
1852 | const char *subsys; | ||
1853 | |||
1850 | if (!dev) | 1854 | if (!dev) |
1851 | return printk("%s(NULL device *): %pV", level, vaf); | 1855 | return printk("%s(NULL device *): %pV", level, vaf); |
1852 | 1856 | ||
1853 | return printk("%s%s %s: %pV", | 1857 | if (dev->class) |
1854 | level, dev_driver_string(dev), dev_name(dev), vaf); | 1858 | subsys = dev->class->name; |
1859 | else if (dev->bus) | ||
1860 | subsys = dev->bus->name; | ||
1861 | else | ||
1862 | goto skip; | ||
1863 | |||
1864 | dictlen += snprintf(dict + dictlen, sizeof(dict) - dictlen, | ||
1865 | "SUBSYSTEM=%s", subsys); | ||
1866 | |||
1867 | /* | ||
1868 | * Add device identifier DEVICE=: | ||
1869 | * b12:8 block dev_t | ||
1870 | * c127:3 char dev_t | ||
1871 | * n8 netdev ifindex | ||
1872 | * +sound:card0 subsystem:devname | ||
1873 | */ | ||
1874 | if (MAJOR(dev->devt)) { | ||
1875 | char c; | ||
1876 | |||
1877 | if (strcmp(subsys, "block") == 0) | ||
1878 | c = 'b'; | ||
1879 | else | ||
1880 | c = 'c'; | ||
1881 | dictlen++; | ||
1882 | dictlen += snprintf(dict + dictlen, sizeof(dict) - dictlen, | ||
1883 | "DEVICE=%c%u:%u", | ||
1884 | c, MAJOR(dev->devt), MINOR(dev->devt)); | ||
1885 | } else if (strcmp(subsys, "net") == 0) { | ||
1886 | struct net_device *net = to_net_dev(dev); | ||
1887 | |||
1888 | dictlen++; | ||
1889 | dictlen += snprintf(dict + dictlen, sizeof(dict) - dictlen, | ||
1890 | "DEVICE=n%u", net->ifindex); | ||
1891 | } else { | ||
1892 | dictlen++; | ||
1893 | dictlen += snprintf(dict + dictlen, sizeof(dict) - dictlen, | ||
1894 | "DEVICE=+%s:%s", subsys, dev_name(dev)); | ||
1895 | } | ||
1896 | skip: | ||
1897 | return printk_emit(0, level[1] - '0', | ||
1898 | dictlen ? dict : NULL, dictlen, | ||
1899 | "%s %s: %pV", | ||
1900 | dev_driver_string(dev), dev_name(dev), vaf); | ||
1855 | } | 1901 | } |
1856 | EXPORT_SYMBOL(__dev_printk); | 1902 | EXPORT_SYMBOL(__dev_printk); |
1857 | 1903 | ||
diff --git a/drivers/base/devres.c b/drivers/base/devres.c index 524bf96c289f..2360adb7a58f 100644 --- a/drivers/base/devres.c +++ b/drivers/base/devres.c | |||
@@ -309,6 +309,10 @@ EXPORT_SYMBOL_GPL(devres_remove); | |||
309 | * which @match returns 1. If @match is NULL, it's considered to | 309 | * which @match returns 1. If @match is NULL, it's considered to |
310 | * match all. If found, the resource is removed atomically and freed. | 310 | * match all. If found, the resource is removed atomically and freed. |
311 | * | 311 | * |
312 | * Note that the release function for the resource will not be called, | ||
313 | * only the devres-allocated data will be freed. The caller becomes | ||
314 | * responsible for freeing any other data. | ||
315 | * | ||
312 | * RETURNS: | 316 | * RETURNS: |
313 | * 0 if devres is found and freed, -ENOENT if not found. | 317 | * 0 if devres is found and freed, -ENOENT if not found. |
314 | */ | 318 | */ |
@@ -326,6 +330,37 @@ int devres_destroy(struct device *dev, dr_release_t release, | |||
326 | } | 330 | } |
327 | EXPORT_SYMBOL_GPL(devres_destroy); | 331 | EXPORT_SYMBOL_GPL(devres_destroy); |
328 | 332 | ||
333 | |||
334 | /** | ||
335 | * devres_release - Find a device resource and destroy it, calling release | ||
336 | * @dev: Device to find resource from | ||
337 | * @release: Look for resources associated with this release function | ||
338 | * @match: Match function (optional) | ||
339 | * @match_data: Data for the match function | ||
340 | * | ||
341 | * Find the latest devres of @dev associated with @release and for | ||
342 | * which @match returns 1. If @match is NULL, it's considered to | ||
343 | * match all. If found, the resource is removed atomically, the | ||
344 | * release function called and the resource freed. | ||
345 | * | ||
346 | * RETURNS: | ||
347 | * 0 if devres is found and freed, -ENOENT if not found. | ||
348 | */ | ||
349 | int devres_release(struct device *dev, dr_release_t release, | ||
350 | dr_match_t match, void *match_data) | ||
351 | { | ||
352 | void *res; | ||
353 | |||
354 | res = devres_remove(dev, release, match, match_data); | ||
355 | if (unlikely(!res)) | ||
356 | return -ENOENT; | ||
357 | |||
358 | (*release)(dev, res); | ||
359 | devres_free(res); | ||
360 | return 0; | ||
361 | } | ||
362 | EXPORT_SYMBOL_GPL(devres_release); | ||
363 | |||
329 | static int remove_nodes(struct device *dev, | 364 | static int remove_nodes(struct device *dev, |
330 | struct list_head *first, struct list_head *end, | 365 | struct list_head *first, struct list_head *end, |
331 | struct list_head *todo) | 366 | struct list_head *todo) |
diff --git a/drivers/base/devtmpfs.c b/drivers/base/devtmpfs.c index 8493536ea55b..765c3a28077a 100644 --- a/drivers/base/devtmpfs.c +++ b/drivers/base/devtmpfs.c | |||
@@ -7,9 +7,9 @@ | |||
7 | * devtmpfs, a tmpfs-based filesystem is created. Every driver-core | 7 | * devtmpfs, a tmpfs-based filesystem is created. Every driver-core |
8 | * device which requests a device node, will add a node in this | 8 | * device which requests a device node, will add a node in this |
9 | * filesystem. | 9 | * filesystem. |
10 | * By default, all devices are named after the the name of the | 10 | * By default, all devices are named after the name of the device, |
11 | * device, owned by root and have a default mode of 0600. Subsystems | 11 | * owned by root and have a default mode of 0600. Subsystems can |
12 | * can overwrite the default setting if needed. | 12 | * overwrite the default setting if needed. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
diff --git a/drivers/base/dma-buf.c b/drivers/base/dma-buf.c index 07cbbc6fddb4..05c64c11bad2 100644 --- a/drivers/base/dma-buf.c +++ b/drivers/base/dma-buf.c | |||
@@ -293,7 +293,7 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment); | |||
293 | * cpu in the kernel context. Calls begin_cpu_access to allow exporter-specific | 293 | * cpu in the kernel context. Calls begin_cpu_access to allow exporter-specific |
294 | * preparations. Coherency is only guaranteed in the specified range for the | 294 | * preparations. Coherency is only guaranteed in the specified range for the |
295 | * specified access direction. | 295 | * specified access direction. |
296 | * @dma_buf: [in] buffer to prepare cpu access for. | 296 | * @dmabuf: [in] buffer to prepare cpu access for. |
297 | * @start: [in] start of range for cpu access. | 297 | * @start: [in] start of range for cpu access. |
298 | * @len: [in] length of range for cpu access. | 298 | * @len: [in] length of range for cpu access. |
299 | * @direction: [in] length of range for cpu access. | 299 | * @direction: [in] length of range for cpu access. |
@@ -320,7 +320,7 @@ EXPORT_SYMBOL_GPL(dma_buf_begin_cpu_access); | |||
320 | * cpu in the kernel context. Calls end_cpu_access to allow exporter-specific | 320 | * cpu in the kernel context. Calls end_cpu_access to allow exporter-specific |
321 | * actions. Coherency is only guaranteed in the specified range for the | 321 | * actions. Coherency is only guaranteed in the specified range for the |
322 | * specified access direction. | 322 | * specified access direction. |
323 | * @dma_buf: [in] buffer to complete cpu access for. | 323 | * @dmabuf: [in] buffer to complete cpu access for. |
324 | * @start: [in] start of range for cpu access. | 324 | * @start: [in] start of range for cpu access. |
325 | * @len: [in] length of range for cpu access. | 325 | * @len: [in] length of range for cpu access. |
326 | * @direction: [in] length of range for cpu access. | 326 | * @direction: [in] length of range for cpu access. |
@@ -340,7 +340,7 @@ EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access); | |||
340 | /** | 340 | /** |
341 | * dma_buf_kmap_atomic - Map a page of the buffer object into kernel address | 341 | * dma_buf_kmap_atomic - Map a page of the buffer object into kernel address |
342 | * space. The same restrictions as for kmap_atomic and friends apply. | 342 | * space. The same restrictions as for kmap_atomic and friends apply. |
343 | * @dma_buf: [in] buffer to map page from. | 343 | * @dmabuf: [in] buffer to map page from. |
344 | * @page_num: [in] page in PAGE_SIZE units to map. | 344 | * @page_num: [in] page in PAGE_SIZE units to map. |
345 | * | 345 | * |
346 | * This call must always succeed, any necessary preparations that might fail | 346 | * This call must always succeed, any necessary preparations that might fail |
@@ -356,7 +356,7 @@ EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic); | |||
356 | 356 | ||
357 | /** | 357 | /** |
358 | * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic. | 358 | * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic. |
359 | * @dma_buf: [in] buffer to unmap page from. | 359 | * @dmabuf: [in] buffer to unmap page from. |
360 | * @page_num: [in] page in PAGE_SIZE units to unmap. | 360 | * @page_num: [in] page in PAGE_SIZE units to unmap. |
361 | * @vaddr: [in] kernel space pointer obtained from dma_buf_kmap_atomic. | 361 | * @vaddr: [in] kernel space pointer obtained from dma_buf_kmap_atomic. |
362 | * | 362 | * |
@@ -375,7 +375,7 @@ EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic); | |||
375 | /** | 375 | /** |
376 | * dma_buf_kmap - Map a page of the buffer object into kernel address space. The | 376 | * dma_buf_kmap - Map a page of the buffer object into kernel address space. The |
377 | * same restrictions as for kmap and friends apply. | 377 | * same restrictions as for kmap and friends apply. |
378 | * @dma_buf: [in] buffer to map page from. | 378 | * @dmabuf: [in] buffer to map page from. |
379 | * @page_num: [in] page in PAGE_SIZE units to map. | 379 | * @page_num: [in] page in PAGE_SIZE units to map. |
380 | * | 380 | * |
381 | * This call must always succeed, any necessary preparations that might fail | 381 | * This call must always succeed, any necessary preparations that might fail |
@@ -391,7 +391,7 @@ EXPORT_SYMBOL_GPL(dma_buf_kmap); | |||
391 | 391 | ||
392 | /** | 392 | /** |
393 | * dma_buf_kunmap - Unmap a page obtained by dma_buf_kmap. | 393 | * dma_buf_kunmap - Unmap a page obtained by dma_buf_kmap. |
394 | * @dma_buf: [in] buffer to unmap page from. | 394 | * @dmabuf: [in] buffer to unmap page from. |
395 | * @page_num: [in] page in PAGE_SIZE units to unmap. | 395 | * @page_num: [in] page in PAGE_SIZE units to unmap. |
396 | * @vaddr: [in] kernel space pointer obtained from dma_buf_kmap. | 396 | * @vaddr: [in] kernel space pointer obtained from dma_buf_kmap. |
397 | * | 397 | * |
diff --git a/drivers/base/driver.c b/drivers/base/driver.c index 3ec3896c83a6..207c27ddf828 100644 --- a/drivers/base/driver.c +++ b/drivers/base/driver.c | |||
@@ -80,7 +80,7 @@ struct device *driver_find_device(struct device_driver *drv, | |||
80 | struct klist_iter i; | 80 | struct klist_iter i; |
81 | struct device *dev; | 81 | struct device *dev; |
82 | 82 | ||
83 | if (!drv) | 83 | if (!drv || !drv->p) |
84 | return NULL; | 84 | return NULL; |
85 | 85 | ||
86 | klist_iter_init_node(&drv->p->klist_devices, &i, | 86 | klist_iter_init_node(&drv->p->klist_devices, &i, |