Re: [PATCH v9 2/3] sched: Move task_mm_cid_work to mm work_struct

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2025-02-24 08:28, Gabriele Monaco wrote:
[...]
diff --git a/kernel/rseq.c b/kernel/rseq.c
index 2cb16091ec0ae..936863fe7eb37 100644
--- a/kernel/rseq.c
+++ b/kernel/rseq.c
@@ -419,6 +419,7 @@ void __rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs)
  	}
  	if (unlikely(rseq_update_cpu_node_id(t)))
  		goto error;
+	task_queue_mm_cid(t);

Given that task_queue_mm_cid() will be called quite frequently from
__rseq_handle_notify_resume, perhaps it would be best to move at least
the portion responsible for checks (including the time_before()) to
include/linux/sched.h to eliminate a function call from the fast path.

  	return;
error:

[...]

-void task_tick_mm_cid(struct rq *rq, struct task_struct *curr)
+void task_queue_mm_cid(struct task_struct *curr)
  {
-	struct callback_head *work = &curr->cid_work;
+	struct work_struct *work = &curr->mm->cid_work;
  	unsigned long now = jiffies;
- if (!curr->mm || (curr->flags & (PF_EXITING | PF_KTHREAD)) ||
-	    work->next != work)
+	if (!curr->mm || (curr->flags & (PF_EXITING | PF_KTHREAD)))
  		return;
  	if (time_before(now, READ_ONCE(curr->mm->mm_cid_next_scan)))
  		return;
- /* No page allocation under rq lock */
-	task_work_add(curr, work, TWA_RESUME);
+	/* Ensure the mm exists when we run. */
+	mmgrab(curr->mm);
+	queue_work(system_unbound_wq, work);
  }

Thanks,

Mathieu


--
Mathieu Desnoyers
EfficiOS Inc.
https://www.efficios.com




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux