Merge ra.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux
All conflicts were trivial overlapping changes, so reasonably easy to resolve. Signed-off-by: David S. Miller <davem@davemloft.net>
此提交包含在:
@@ -102,7 +102,7 @@ static u32 phandle_cache_mask;
|
||||
* - the phandle lookup overhead reduction provided by the cache
|
||||
* will likely be less
|
||||
*/
|
||||
static void of_populate_phandle_cache(void)
|
||||
void of_populate_phandle_cache(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
u32 cache_entries;
|
||||
@@ -134,8 +134,7 @@ out:
|
||||
raw_spin_unlock_irqrestore(&devtree_lock, flags);
|
||||
}
|
||||
|
||||
#ifndef CONFIG_MODULES
|
||||
static int __init of_free_phandle_cache(void)
|
||||
int of_free_phandle_cache(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
@@ -148,6 +147,7 @@ static int __init of_free_phandle_cache(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
#if !defined(CONFIG_MODULES)
|
||||
late_initcall_sync(of_free_phandle_cache);
|
||||
#endif
|
||||
|
||||
|
@@ -79,6 +79,8 @@ int of_resolve_phandles(struct device_node *tree);
|
||||
#if defined(CONFIG_OF_OVERLAY)
|
||||
void of_overlay_mutex_lock(void);
|
||||
void of_overlay_mutex_unlock(void);
|
||||
int of_free_phandle_cache(void);
|
||||
void of_populate_phandle_cache(void);
|
||||
#else
|
||||
static inline void of_overlay_mutex_lock(void) {};
|
||||
static inline void of_overlay_mutex_unlock(void) {};
|
||||
|
@@ -804,6 +804,8 @@ static int of_overlay_apply(const void *fdt, struct device_node *tree,
|
||||
goto err_free_overlay_changeset;
|
||||
}
|
||||
|
||||
of_populate_phandle_cache();
|
||||
|
||||
ret = __of_changeset_apply_notify(&ovcs->cset);
|
||||
if (ret)
|
||||
pr_err("overlay changeset entry notify error %d\n", ret);
|
||||
@@ -1046,8 +1048,17 @@ int of_overlay_remove(int *ovcs_id)
|
||||
|
||||
list_del(&ovcs->ovcs_list);
|
||||
|
||||
/*
|
||||
* Disable phandle cache. Avoids race condition that would arise
|
||||
* from removing cache entry when the associated node is deleted.
|
||||
*/
|
||||
of_free_phandle_cache();
|
||||
|
||||
ret_apply = 0;
|
||||
ret = __of_changeset_revert_entries(&ovcs->cset, &ret_apply);
|
||||
|
||||
of_populate_phandle_cache();
|
||||
|
||||
if (ret) {
|
||||
if (ret_apply)
|
||||
devicetree_state_flags |= DTSF_REVERT_FAIL;
|
||||
|
新增問題並參考
封鎖使用者