mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 17:57:38 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
No conflicts. Build issue in drivers/net/ethernet/sfc/ptp.c54fccfdd7c("sfc: efx_default_channel_type APIs can be static")49e6123c65("net: sfc: fix memory leak due to ptp channel") https://lore.kernel.org/all/20220510130556.52598fe2@canb.auug.org.au/ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -3390,8 +3390,11 @@ static struct notifier_block cpuset_track_online_nodes_nb = {
|
||||
*/
|
||||
void __init cpuset_init_smp(void)
|
||||
{
|
||||
cpumask_copy(top_cpuset.cpus_allowed, cpu_active_mask);
|
||||
top_cpuset.mems_allowed = node_states[N_MEMORY];
|
||||
/*
|
||||
* cpus_allowd/mems_allowed set to v2 values in the initial
|
||||
* cpuset_bind() call will be reset to v1 values in another
|
||||
* cpuset_bind() call when v1 cpuset is mounted.
|
||||
*/
|
||||
top_cpuset.old_mems_allowed = top_cpuset.mems_allowed;
|
||||
|
||||
cpumask_copy(top_cpuset.effective_cpus, cpu_active_mask);
|
||||
|
||||
@@ -792,6 +792,7 @@ void __mmdrop(struct mm_struct *mm)
|
||||
mmu_notifier_subscriptions_destroy(mm);
|
||||
check_mm(mm);
|
||||
put_user_ns(mm->user_ns);
|
||||
mm_pasid_drop(mm);
|
||||
free_mm(mm);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__mmdrop);
|
||||
@@ -1190,7 +1191,6 @@ static inline void __mmput(struct mm_struct *mm)
|
||||
}
|
||||
if (mm->binfmt)
|
||||
module_put(mm->binfmt->module);
|
||||
mm_pasid_drop(mm);
|
||||
mmdrop(mm);
|
||||
}
|
||||
|
||||
|
||||
@@ -29,12 +29,14 @@ extern struct irqaction chained_action;
|
||||
* IRQTF_WARNED - warning "IRQ_WAKE_THREAD w/o thread_fn" has been printed
|
||||
* IRQTF_AFFINITY - irq thread is requested to adjust affinity
|
||||
* IRQTF_FORCED_THREAD - irq action is force threaded
|
||||
* IRQTF_READY - signals that irq thread is ready
|
||||
*/
|
||||
enum {
|
||||
IRQTF_RUNTHREAD,
|
||||
IRQTF_WARNED,
|
||||
IRQTF_AFFINITY,
|
||||
IRQTF_FORCED_THREAD,
|
||||
IRQTF_READY,
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -407,6 +407,7 @@ static struct irq_desc *alloc_desc(int irq, int node, unsigned int flags,
|
||||
lockdep_set_class(&desc->lock, &irq_desc_lock_class);
|
||||
mutex_init(&desc->request_mutex);
|
||||
init_rcu_head(&desc->rcu);
|
||||
init_waitqueue_head(&desc->wait_for_threads);
|
||||
|
||||
desc_set_defaults(irq, desc, node, affinity, owner);
|
||||
irqd_set(&desc->irq_data, flags);
|
||||
@@ -575,6 +576,7 @@ int __init early_irq_init(void)
|
||||
raw_spin_lock_init(&desc[i].lock);
|
||||
lockdep_set_class(&desc[i].lock, &irq_desc_lock_class);
|
||||
mutex_init(&desc[i].request_mutex);
|
||||
init_waitqueue_head(&desc[i].wait_for_threads);
|
||||
desc_set_defaults(i, &desc[i], node, NULL, NULL);
|
||||
}
|
||||
return arch_early_irq_init();
|
||||
|
||||
@@ -1248,6 +1248,31 @@ static void irq_wake_secondary(struct irq_desc *desc, struct irqaction *action)
|
||||
raw_spin_unlock_irq(&desc->lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* Internal function to notify that a interrupt thread is ready.
|
||||
*/
|
||||
static void irq_thread_set_ready(struct irq_desc *desc,
|
||||
struct irqaction *action)
|
||||
{
|
||||
set_bit(IRQTF_READY, &action->thread_flags);
|
||||
wake_up(&desc->wait_for_threads);
|
||||
}
|
||||
|
||||
/*
|
||||
* Internal function to wake up a interrupt thread and wait until it is
|
||||
* ready.
|
||||
*/
|
||||
static void wake_up_and_wait_for_irq_thread_ready(struct irq_desc *desc,
|
||||
struct irqaction *action)
|
||||
{
|
||||
if (!action || !action->thread)
|
||||
return;
|
||||
|
||||
wake_up_process(action->thread);
|
||||
wait_event(desc->wait_for_threads,
|
||||
test_bit(IRQTF_READY, &action->thread_flags));
|
||||
}
|
||||
|
||||
/*
|
||||
* Interrupt handler thread
|
||||
*/
|
||||
@@ -1259,6 +1284,8 @@ static int irq_thread(void *data)
|
||||
irqreturn_t (*handler_fn)(struct irq_desc *desc,
|
||||
struct irqaction *action);
|
||||
|
||||
irq_thread_set_ready(desc, action);
|
||||
|
||||
sched_set_fifo(current);
|
||||
|
||||
if (force_irqthreads() && test_bit(IRQTF_FORCED_THREAD,
|
||||
@@ -1683,8 +1710,6 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
|
||||
}
|
||||
|
||||
if (!shared) {
|
||||
init_waitqueue_head(&desc->wait_for_threads);
|
||||
|
||||
/* Setup the type (level, edge polarity) if configured: */
|
||||
if (new->flags & IRQF_TRIGGER_MASK) {
|
||||
ret = __irq_set_trigger(desc,
|
||||
@@ -1780,14 +1805,8 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
|
||||
|
||||
irq_setup_timings(desc, new);
|
||||
|
||||
/*
|
||||
* Strictly no need to wake it up, but hung_task complains
|
||||
* when no hard interrupt wakes the thread up.
|
||||
*/
|
||||
if (new->thread)
|
||||
wake_up_process(new->thread);
|
||||
if (new->secondary)
|
||||
wake_up_process(new->secondary->thread);
|
||||
wake_up_and_wait_for_irq_thread_ready(desc, new);
|
||||
wake_up_and_wait_for_irq_thread_ready(desc, new->secondary);
|
||||
|
||||
register_irq_proc(irq, desc);
|
||||
new->dir = NULL;
|
||||
|
||||
@@ -482,7 +482,7 @@ static __always_inline u64 __ktime_get_fast_ns(struct tk_fast *tkf)
|
||||
* of the following timestamps. Callers need to be aware of that and
|
||||
* deal with it.
|
||||
*/
|
||||
u64 ktime_get_mono_fast_ns(void)
|
||||
u64 notrace ktime_get_mono_fast_ns(void)
|
||||
{
|
||||
return __ktime_get_fast_ns(&tk_fast_mono);
|
||||
}
|
||||
@@ -494,7 +494,7 @@ EXPORT_SYMBOL_GPL(ktime_get_mono_fast_ns);
|
||||
* Contrary to ktime_get_mono_fast_ns() this is always correct because the
|
||||
* conversion factor is not affected by NTP/PTP correction.
|
||||
*/
|
||||
u64 ktime_get_raw_fast_ns(void)
|
||||
u64 notrace ktime_get_raw_fast_ns(void)
|
||||
{
|
||||
return __ktime_get_fast_ns(&tk_fast_raw);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user