Merge tag 'driver-core-4.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
Pull driver core updates from Greg KH: "Just a few patches this time around for the 4.6-rc1 merge window. Largest is a new firmware driver, but there are some other updates to the driver core in here as well, the shortlog has the details. All have been in linux-next for a while with no reported issues" * tag 'driver-core-4.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: Revert "driver-core: platform: probe of-devices only using list of compatibles" firmware: qemu config needs I/O ports firmware: qemu_fw_cfg.c: fix typo FW_CFG_DATA_OFF driver-core: platform: probe of-devices only using list of compatibles driver-core: platform: fix typo in documentation for multi-driver helper component: remove impossible condition drivers: dma-coherent: simplify dma_init_coherent_memory return value devicetree: update documentation for fw_cfg ARM bindings firmware: create directory hierarchy for sysfs fw_cfg entries firmware: introduce sysfs driver for QEMU's fw_cfg device kobject: export kset_find_obj() for module use driver core: bus: use to_subsys_private and to_device_private_bus driver core: bus: use list_for_each_entry* debugfs: Add stub function for debugfs_create_automount(). kernfs: make kernfs_walk_ns() use kernfs_pr_cont_buf[]
Esse commit está contido em:
@@ -149,8 +149,7 @@ EXPORT_SYMBOL_GPL(bus_remove_file);
|
||||
|
||||
static void bus_release(struct kobject *kobj)
|
||||
{
|
||||
struct subsys_private *priv =
|
||||
container_of(kobj, typeof(*priv), subsys.kobj);
|
||||
struct subsys_private *priv = to_subsys_private(kobj);
|
||||
struct bus_type *bus = priv->bus;
|
||||
|
||||
kfree(priv);
|
||||
@@ -1019,13 +1018,11 @@ static void device_insertion_sort_klist(struct device *a, struct list_head *list
|
||||
int (*compare)(const struct device *a,
|
||||
const struct device *b))
|
||||
{
|
||||
struct list_head *pos;
|
||||
struct klist_node *n;
|
||||
struct device_private *dev_prv;
|
||||
struct device *b;
|
||||
|
||||
list_for_each(pos, list) {
|
||||
n = container_of(pos, struct klist_node, n_node);
|
||||
list_for_each_entry(n, list, n_node) {
|
||||
dev_prv = to_device_private_bus(n);
|
||||
b = dev_prv->device;
|
||||
if (compare(a, b) <= 0) {
|
||||
@@ -1042,8 +1039,7 @@ void bus_sort_breadthfirst(struct bus_type *bus,
|
||||
const struct device *b))
|
||||
{
|
||||
LIST_HEAD(sorted_devices);
|
||||
struct list_head *pos, *tmp;
|
||||
struct klist_node *n;
|
||||
struct klist_node *n, *tmp;
|
||||
struct device_private *dev_prv;
|
||||
struct device *dev;
|
||||
struct klist *device_klist;
|
||||
@@ -1051,8 +1047,7 @@ void bus_sort_breadthfirst(struct bus_type *bus,
|
||||
device_klist = bus_get_device_klist(bus);
|
||||
|
||||
spin_lock(&device_klist->k_lock);
|
||||
list_for_each_safe(pos, tmp, &device_klist->k_list) {
|
||||
n = container_of(pos, struct klist_node, n_node);
|
||||
list_for_each_entry_safe(n, tmp, &device_klist->k_list, n_node) {
|
||||
dev_prv = to_device_private_bus(n);
|
||||
dev = dev_prv->device;
|
||||
device_insertion_sort_klist(dev, &sorted_devices, compare);
|
||||
@@ -1107,7 +1102,7 @@ struct device *subsys_dev_iter_next(struct subsys_dev_iter *iter)
|
||||
knode = klist_next(&iter->ki);
|
||||
if (!knode)
|
||||
return NULL;
|
||||
dev = container_of(knode, struct device_private, knode_bus)->device;
|
||||
dev = to_device_private_bus(knode)->device;
|
||||
if (!iter->type || iter->type == dev->type)
|
||||
return dev;
|
||||
}
|
||||
|
@@ -267,7 +267,7 @@ void component_match_add_release(struct device *master,
|
||||
}
|
||||
|
||||
if (match->num == match->alloc) {
|
||||
size_t new_size = match ? match->alloc + 16 : 15;
|
||||
size_t new_size = match->alloc + 16;
|
||||
int ret;
|
||||
|
||||
ret = component_match_realloc(master, match, new_size);
|
||||
|
@@ -17,9 +17,9 @@ struct dma_coherent_mem {
|
||||
spinlock_t spinlock;
|
||||
};
|
||||
|
||||
static int dma_init_coherent_memory(phys_addr_t phys_addr, dma_addr_t device_addr,
|
||||
size_t size, int flags,
|
||||
struct dma_coherent_mem **mem)
|
||||
static bool dma_init_coherent_memory(
|
||||
phys_addr_t phys_addr, dma_addr_t device_addr, size_t size, int flags,
|
||||
struct dma_coherent_mem **mem)
|
||||
{
|
||||
struct dma_coherent_mem *dma_mem = NULL;
|
||||
void __iomem *mem_base = NULL;
|
||||
@@ -50,17 +50,13 @@ static int dma_init_coherent_memory(phys_addr_t phys_addr, dma_addr_t device_add
|
||||
spin_lock_init(&dma_mem->spinlock);
|
||||
|
||||
*mem = dma_mem;
|
||||
|
||||
if (flags & DMA_MEMORY_MAP)
|
||||
return DMA_MEMORY_MAP;
|
||||
|
||||
return DMA_MEMORY_IO;
|
||||
return true;
|
||||
|
||||
out:
|
||||
kfree(dma_mem);
|
||||
if (mem_base)
|
||||
iounmap(mem_base);
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
static void dma_release_coherent_memory(struct dma_coherent_mem *mem)
|
||||
@@ -88,15 +84,13 @@ int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr,
|
||||
dma_addr_t device_addr, size_t size, int flags)
|
||||
{
|
||||
struct dma_coherent_mem *mem;
|
||||
int ret;
|
||||
|
||||
ret = dma_init_coherent_memory(phys_addr, device_addr, size, flags,
|
||||
&mem);
|
||||
if (ret == 0)
|
||||
if (!dma_init_coherent_memory(phys_addr, device_addr, size, flags,
|
||||
&mem))
|
||||
return 0;
|
||||
|
||||
if (dma_assign_coherent_memory(dev, mem) == 0)
|
||||
return ret;
|
||||
return flags & DMA_MEMORY_MAP ? DMA_MEMORY_MAP : DMA_MEMORY_IO;
|
||||
|
||||
dma_release_coherent_memory(mem);
|
||||
return 0;
|
||||
@@ -281,9 +275,9 @@ static int rmem_dma_device_init(struct reserved_mem *rmem, struct device *dev)
|
||||
struct dma_coherent_mem *mem = rmem->priv;
|
||||
|
||||
if (!mem &&
|
||||
dma_init_coherent_memory(rmem->base, rmem->base, rmem->size,
|
||||
DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE,
|
||||
&mem) != DMA_MEMORY_MAP) {
|
||||
!dma_init_coherent_memory(rmem->base, rmem->base, rmem->size,
|
||||
DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE,
|
||||
&mem)) {
|
||||
pr_err("Reserved memory: failed to init DMA memory pool at %pa, size %ld MiB\n",
|
||||
&rmem->base, (unsigned long)rmem->size / SZ_1M);
|
||||
return -ENODEV;
|
||||
|
Referência em uma nova issue
Block a user