Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
fe53673
driver-core: Move kobj_to_dev from genhd.h to device.h
larsclausen Jul 3, 2012
be7228d
driver-core: Use kobj_to_dev instead of re-implementing it
larsclausen Jul 3, 2012
8d3e81f
PM / Sleep: introduce dpm_for_each_dev
Aug 17, 2012
3e51138
driver core: devres: introduce devres_for_each_res
Aug 4, 2012
0e6a5ee
firmware loader: simplify pages ownership transfer
Aug 4, 2012
c296c06
firmware loader: fix races during loading firmware
Aug 4, 2012
1ce7be8
firmware loader: remove unnecessary wmb()
Aug 4, 2012
f4a16dd
firmware loader: fix creation failure of fw loader device
Aug 4, 2012
f340987
firmware loader: introduce firmware_buf
Aug 4, 2012
e58851a
firmware loader: always let firmware_buf own the pages buffer
Aug 4, 2012
cbb704d
firmware loader: introduce cache_firmware and uncache_firmware
Aug 4, 2012
0948575
firmware loader: fix device lifetime
Aug 4, 2012
568ae9b
firmware loader: fix comments on request_firmware_nowait
Aug 4, 2012
9bae2f8
firmware loader: store firmware name into devres list
Aug 4, 2012
826942e
firmware: introduce device_cache/uncache_fw_images
Aug 4, 2012
eebdf5d
firmware loader: use small timeout for cache device firmware
Aug 4, 2012
dafec07
firmware loader: cache devices firmware during suspend/resume cycle
Aug 4, 2012
5cbbcef
firmware loader: fix compile failure if !PM
Aug 17, 2012
95c6a9c
firmware loader: fix build failure if FW_LOADER is m
Aug 17, 2012
d18bd19
firmware loader: fix firmware -ENOENT situations
Aug 20, 2012
d6a6fff
firmware loader: let caching firmware piggyback on loading firmware
Aug 20, 2012
e51108d
firmware loader: fix compile warning when CONFIG_PM=n
Sep 8, 2012
61f88f8
firmware: teach the kernel to load firmware files directly from the f…
torvalds Oct 3, 2012
9be6153
firmware: use 'kernel_read()' to read firmware into kernel buffer
torvalds Oct 4, 2012
8bd47a5
kgsl: fix null ptr on cache flush
robclark Apr 14, 2013
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 8 additions & 9 deletions drivers/base/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,14 +84,13 @@ const char *dev_driver_string(const struct device *dev)
}
EXPORT_SYMBOL(dev_driver_string);

#define to_dev(obj) container_of(obj, struct device, kobj)
#define to_dev_attr(_attr) container_of(_attr, struct device_attribute, attr)

static ssize_t dev_attr_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct device_attribute *dev_attr = to_dev_attr(attr);
struct device *dev = to_dev(kobj);
struct device *dev = kobj_to_dev(kobj);
ssize_t ret = -EIO;

if (dev_attr->show)
Expand All @@ -107,7 +106,7 @@ static ssize_t dev_attr_store(struct kobject *kobj, struct attribute *attr,
const char *buf, size_t count)
{
struct device_attribute *dev_attr = to_dev_attr(attr);
struct device *dev = to_dev(kobj);
struct device *dev = kobj_to_dev(kobj);
ssize_t ret = -EIO;

if (dev_attr->store)
Expand Down Expand Up @@ -181,7 +180,7 @@ EXPORT_SYMBOL_GPL(device_show_int);
*/
static void device_release(struct kobject *kobj)
{
struct device *dev = to_dev(kobj);
struct device *dev = kobj_to_dev(kobj);
struct device_private *p = dev->p;

if (dev->release)
Expand All @@ -199,7 +198,7 @@ static void device_release(struct kobject *kobj)

static const void *device_namespace(struct kobject *kobj)
{
struct device *dev = to_dev(kobj);
struct device *dev = kobj_to_dev(kobj);
const void *ns = NULL;

if (dev->class && dev->class->ns_type)
Expand All @@ -220,7 +219,7 @@ static int dev_uevent_filter(struct kset *kset, struct kobject *kobj)
struct kobj_type *ktype = get_ktype(kobj);

if (ktype == &device_ktype) {
struct device *dev = to_dev(kobj);
struct device *dev = kobj_to_dev(kobj);
if (dev->bus)
return 1;
if (dev->class)
Expand All @@ -231,7 +230,7 @@ static int dev_uevent_filter(struct kset *kset, struct kobject *kobj)

static const char *dev_uevent_name(struct kset *kset, struct kobject *kobj)
{
struct device *dev = to_dev(kobj);
struct device *dev = kobj_to_dev(kobj);

if (dev->bus)
return dev->bus->name;
Expand All @@ -243,7 +242,7 @@ static const char *dev_uevent_name(struct kset *kset, struct kobject *kobj)
static int dev_uevent(struct kset *kset, struct kobject *kobj,
struct kobj_uevent_env *env)
{
struct device *dev = to_dev(kobj);
struct device *dev = kobj_to_dev(kobj);
int retval = 0;

/* add device node properties if present */
Expand Down Expand Up @@ -1131,7 +1130,7 @@ int device_register(struct device *dev)
*/
struct device *get_device(struct device *dev)
{
return dev ? to_dev(kobject_get(&dev->kobj)) : NULL;
return dev ? kobj_to_dev(kobject_get(&dev->kobj)) : NULL;
}

/**
Expand Down
42 changes: 42 additions & 0 deletions drivers/base/devres.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,48 @@ void * devres_alloc(dr_release_t release, size_t size, gfp_t gfp)
EXPORT_SYMBOL_GPL(devres_alloc);
#endif

/**
* devres_for_each_res - Resource iterator
* @dev: Device to iterate resource from
* @release: Look for resources associated with this release function
* @match: Match function (optional)
* @match_data: Data for the match function
* @fn: Function to be called for each matched resource.
* @data: Data for @fn, the 3rd parameter of @fn
*
* Call @fn for each devres of @dev which is associated with @release
* and for which @match returns 1.
*
* RETURNS:
* void
*/
void devres_for_each_res(struct device *dev, dr_release_t release,
dr_match_t match, void *match_data,
void (*fn)(struct device *, void *, void *),
void *data)
{
struct devres_node *node;
struct devres_node *tmp;
unsigned long flags;

if (!fn)
return;

spin_lock_irqsave(&dev->devres_lock, flags);
list_for_each_entry_safe_reverse(node, tmp,
&dev->devres_head, entry) {
struct devres *dr = container_of(node, struct devres, node);

if (node->release != release)
continue;
if (match && !match(dev, dr->data, match_data))
continue;
fn(dev, dr->data, data);
}
spin_unlock_irqrestore(&dev->devres_lock, flags);
}
EXPORT_SYMBOL_GPL(devres_for_each_res);

/**
* devres_free - Free device resource data
* @res: Pointer to devres data to free
Expand Down
Loading