mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 21:07:02 +09:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
net/devlink/leftover.c / net/core/devlink.c:565b4824c3("devlink: change port event netdev notifier from per-net to global")f05bd8ebeb("devlink: move code to a dedicated directory")687125b579("devlink: split out core code") https://lore.kernel.org/all/20230208094657.379f2b1a@canb.auug.org.au/ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -1205,12 +1205,13 @@ void rebuild_sched_domains(void)
|
||||
/**
|
||||
* update_tasks_cpumask - Update the cpumasks of tasks in the cpuset.
|
||||
* @cs: the cpuset in which each task's cpus_allowed mask needs to be changed
|
||||
* @new_cpus: the temp variable for the new effective_cpus mask
|
||||
*
|
||||
* Iterate through each task of @cs updating its cpus_allowed to the
|
||||
* effective cpuset's. As this function is called with cpuset_rwsem held,
|
||||
* cpuset membership stays stable.
|
||||
*/
|
||||
static void update_tasks_cpumask(struct cpuset *cs)
|
||||
static void update_tasks_cpumask(struct cpuset *cs, struct cpumask *new_cpus)
|
||||
{
|
||||
struct css_task_iter it;
|
||||
struct task_struct *task;
|
||||
@@ -1224,7 +1225,10 @@ static void update_tasks_cpumask(struct cpuset *cs)
|
||||
if (top_cs && (task->flags & PF_KTHREAD) &&
|
||||
kthread_is_per_cpu(task))
|
||||
continue;
|
||||
set_cpus_allowed_ptr(task, cs->effective_cpus);
|
||||
|
||||
cpumask_and(new_cpus, cs->effective_cpus,
|
||||
task_cpu_possible_mask(task));
|
||||
set_cpus_allowed_ptr(task, new_cpus);
|
||||
}
|
||||
css_task_iter_end(&it);
|
||||
}
|
||||
@@ -1509,7 +1513,7 @@ static int update_parent_subparts_cpumask(struct cpuset *cs, int cmd,
|
||||
spin_unlock_irq(&callback_lock);
|
||||
|
||||
if (adding || deleting)
|
||||
update_tasks_cpumask(parent);
|
||||
update_tasks_cpumask(parent, tmp->new_cpus);
|
||||
|
||||
/*
|
||||
* Set or clear CS_SCHED_LOAD_BALANCE when partcmd_update, if necessary.
|
||||
@@ -1661,7 +1665,7 @@ update_parent_subparts:
|
||||
WARN_ON(!is_in_v2_mode() &&
|
||||
!cpumask_equal(cp->cpus_allowed, cp->effective_cpus));
|
||||
|
||||
update_tasks_cpumask(cp);
|
||||
update_tasks_cpumask(cp, tmp->new_cpus);
|
||||
|
||||
/*
|
||||
* On legacy hierarchy, if the effective cpumask of any non-
|
||||
@@ -2309,7 +2313,7 @@ static int update_prstate(struct cpuset *cs, int new_prs)
|
||||
}
|
||||
}
|
||||
|
||||
update_tasks_cpumask(parent);
|
||||
update_tasks_cpumask(parent, tmpmask.new_cpus);
|
||||
|
||||
if (parent->child_ecpus_count)
|
||||
update_sibling_cpumasks(parent, cs, &tmpmask);
|
||||
@@ -3348,7 +3352,7 @@ hotplug_update_tasks_legacy(struct cpuset *cs,
|
||||
* as the tasks will be migrated to an ancestor.
|
||||
*/
|
||||
if (cpus_updated && !cpumask_empty(cs->cpus_allowed))
|
||||
update_tasks_cpumask(cs);
|
||||
update_tasks_cpumask(cs, new_cpus);
|
||||
if (mems_updated && !nodes_empty(cs->mems_allowed))
|
||||
update_tasks_nodemask(cs);
|
||||
|
||||
@@ -3385,7 +3389,7 @@ hotplug_update_tasks(struct cpuset *cs,
|
||||
spin_unlock_irq(&callback_lock);
|
||||
|
||||
if (cpus_updated)
|
||||
update_tasks_cpumask(cs);
|
||||
update_tasks_cpumask(cs, new_cpus);
|
||||
if (mems_updated)
|
||||
update_tasks_nodemask(cs);
|
||||
}
|
||||
@@ -3692,15 +3696,38 @@ void __init cpuset_init_smp(void)
|
||||
* Description: Returns the cpumask_var_t cpus_allowed of the cpuset
|
||||
* attached to the specified @tsk. Guaranteed to return some non-empty
|
||||
* subset of cpu_online_mask, even if this means going outside the
|
||||
* tasks cpuset.
|
||||
* tasks cpuset, except when the task is in the top cpuset.
|
||||
**/
|
||||
|
||||
void cpuset_cpus_allowed(struct task_struct *tsk, struct cpumask *pmask)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct cpuset *cs;
|
||||
|
||||
spin_lock_irqsave(&callback_lock, flags);
|
||||
guarantee_online_cpus(tsk, pmask);
|
||||
rcu_read_lock();
|
||||
|
||||
cs = task_cs(tsk);
|
||||
if (cs != &top_cpuset)
|
||||
guarantee_online_cpus(tsk, pmask);
|
||||
/*
|
||||
* Tasks in the top cpuset won't get update to their cpumasks
|
||||
* when a hotplug online/offline event happens. So we include all
|
||||
* offline cpus in the allowed cpu list.
|
||||
*/
|
||||
if ((cs == &top_cpuset) || cpumask_empty(pmask)) {
|
||||
const struct cpumask *possible_mask = task_cpu_possible_mask(tsk);
|
||||
|
||||
/*
|
||||
* We first exclude cpus allocated to partitions. If there is no
|
||||
* allowable online cpu left, we fall back to all possible cpus.
|
||||
*/
|
||||
cpumask_andnot(pmask, possible_mask, top_cpuset.subparts_cpus);
|
||||
if (!cpumask_intersects(pmask, cpu_online_mask))
|
||||
cpumask_copy(pmask, possible_mask);
|
||||
}
|
||||
|
||||
rcu_read_unlock();
|
||||
spin_unlock_irqrestore(&callback_lock, flags);
|
||||
}
|
||||
|
||||
|
||||
@@ -4813,19 +4813,17 @@ find_get_pmu_context(struct pmu *pmu, struct perf_event_context *ctx,
|
||||
|
||||
cpc = per_cpu_ptr(pmu->cpu_pmu_context, event->cpu);
|
||||
epc = &cpc->epc;
|
||||
|
||||
raw_spin_lock_irq(&ctx->lock);
|
||||
if (!epc->ctx) {
|
||||
atomic_set(&epc->refcount, 1);
|
||||
epc->embedded = 1;
|
||||
raw_spin_lock_irq(&ctx->lock);
|
||||
list_add(&epc->pmu_ctx_entry, &ctx->pmu_ctx_list);
|
||||
epc->ctx = ctx;
|
||||
raw_spin_unlock_irq(&ctx->lock);
|
||||
} else {
|
||||
WARN_ON_ONCE(epc->ctx != ctx);
|
||||
atomic_inc(&epc->refcount);
|
||||
}
|
||||
|
||||
raw_spin_unlock_irq(&ctx->lock);
|
||||
return epc;
|
||||
}
|
||||
|
||||
@@ -4896,33 +4894,30 @@ static void free_epc_rcu(struct rcu_head *head)
|
||||
|
||||
static void put_pmu_ctx(struct perf_event_pmu_context *epc)
|
||||
{
|
||||
struct perf_event_context *ctx = epc->ctx;
|
||||
unsigned long flags;
|
||||
|
||||
if (!atomic_dec_and_test(&epc->refcount))
|
||||
/*
|
||||
* XXX
|
||||
*
|
||||
* lockdep_assert_held(&ctx->mutex);
|
||||
*
|
||||
* can't because of the call-site in _free_event()/put_event()
|
||||
* which isn't always called under ctx->mutex.
|
||||
*/
|
||||
if (!atomic_dec_and_raw_lock_irqsave(&epc->refcount, &ctx->lock, flags))
|
||||
return;
|
||||
|
||||
if (epc->ctx) {
|
||||
struct perf_event_context *ctx = epc->ctx;
|
||||
WARN_ON_ONCE(list_empty(&epc->pmu_ctx_entry));
|
||||
|
||||
/*
|
||||
* XXX
|
||||
*
|
||||
* lockdep_assert_held(&ctx->mutex);
|
||||
*
|
||||
* can't because of the call-site in _free_event()/put_event()
|
||||
* which isn't always called under ctx->mutex.
|
||||
*/
|
||||
|
||||
WARN_ON_ONCE(list_empty(&epc->pmu_ctx_entry));
|
||||
raw_spin_lock_irqsave(&ctx->lock, flags);
|
||||
list_del_init(&epc->pmu_ctx_entry);
|
||||
epc->ctx = NULL;
|
||||
raw_spin_unlock_irqrestore(&ctx->lock, flags);
|
||||
}
|
||||
list_del_init(&epc->pmu_ctx_entry);
|
||||
epc->ctx = NULL;
|
||||
|
||||
WARN_ON_ONCE(!list_empty(&epc->pinned_active));
|
||||
WARN_ON_ONCE(!list_empty(&epc->flexible_active));
|
||||
|
||||
raw_spin_unlock_irqrestore(&ctx->lock, flags);
|
||||
|
||||
if (epc->embedded)
|
||||
return;
|
||||
|
||||
|
||||
@@ -1915,7 +1915,7 @@ static void debugfs_add_domain_dir(struct irq_domain *d)
|
||||
|
||||
static void debugfs_remove_domain_dir(struct irq_domain *d)
|
||||
{
|
||||
debugfs_remove(debugfs_lookup(d->name, domain_dir));
|
||||
debugfs_lookup_and_remove(d->name, domain_dir);
|
||||
}
|
||||
|
||||
void __init irq_domain_debugfs_init(struct dentry *root)
|
||||
|
||||
@@ -9148,9 +9148,6 @@ buffer_percent_write(struct file *filp, const char __user *ubuf,
|
||||
if (val > 100)
|
||||
return -EINVAL;
|
||||
|
||||
if (!val)
|
||||
val = 1;
|
||||
|
||||
tr->buffer_percent = val;
|
||||
|
||||
(*ppos)++;
|
||||
|
||||
Reference in New Issue
Block a user