driver core: Add device_link_remove function
Device_link_remove uses the same arguments than device_link_add. The Goal is to avoid storing the link pointer. Signed-off-by: pascal paillet <p.paillet@st.com> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
0380cf7dba
commit
d8842211b6
|
@ -365,6 +365,36 @@ void device_link_del(struct device_link *link)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(device_link_del);
|
EXPORT_SYMBOL_GPL(device_link_del);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* device_link_remove - remove a link between two devices.
|
||||||
|
* @consumer: Consumer end of the link.
|
||||||
|
* @supplier: Supplier end of the link.
|
||||||
|
*
|
||||||
|
* The caller must ensure proper synchronization of this function with runtime
|
||||||
|
* PM.
|
||||||
|
*/
|
||||||
|
void device_link_remove(void *consumer, struct device *supplier)
|
||||||
|
{
|
||||||
|
struct device_link *link;
|
||||||
|
|
||||||
|
if (WARN_ON(consumer == supplier))
|
||||||
|
return;
|
||||||
|
|
||||||
|
device_links_write_lock();
|
||||||
|
device_pm_lock();
|
||||||
|
|
||||||
|
list_for_each_entry(link, &supplier->links.consumers, s_node) {
|
||||||
|
if (link->consumer == consumer) {
|
||||||
|
kref_put(&link->kref, __device_link_del);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
device_pm_unlock();
|
||||||
|
device_links_write_unlock();
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(device_link_remove);
|
||||||
|
|
||||||
static void device_links_missing_supplier(struct device *dev)
|
static void device_links_missing_supplier(struct device *dev)
|
||||||
{
|
{
|
||||||
struct device_link *link;
|
struct device_link *link;
|
||||||
|
|
|
@ -1316,6 +1316,7 @@ extern const char *dev_driver_string(const struct device *dev);
|
||||||
struct device_link *device_link_add(struct device *consumer,
|
struct device_link *device_link_add(struct device *consumer,
|
||||||
struct device *supplier, u32 flags);
|
struct device *supplier, u32 flags);
|
||||||
void device_link_del(struct device_link *link);
|
void device_link_del(struct device_link *link);
|
||||||
|
void device_link_remove(void *consumer, struct device *supplier);
|
||||||
|
|
||||||
#ifdef CONFIG_PRINTK
|
#ifdef CONFIG_PRINTK
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue