All of lore.kernel.org
 help / color / mirror / Atom feed
* Question about switch_mm function
@ 2015-01-28 16:26 Sreejith M M
  2015-03-25 13:30 ` Sreejith M M
  0 siblings, 1 reply; 10+ messages in thread
From: Sreejith M M @ 2015-01-28 16:26 UTC (permalink / raw)
  To: kernelnewbies

Hi,

I was trying to understand the difference in scheduling between
processes and threads(belong to same process).

I was thinking that, when kernel has to switch to a task which belong
to the same process, it does not have to clear / replace page global
directories and other memory related information.

But in switch_mm function some code is put under CONFIG_SMP function.
What is its signigicance? Code is
below(http://lxr.free-electrons.com/source/arch/x86/include/asm/mmu_context.h#L37)
.
What I infer is that the code is doing flush tlb, reload page table
directories etc in multiprocessor mode(obviously)  but I believe this
code may never be executed .

Can anyone help to understand what this part of the function supposed to do?

 60 #ifdef CONFIG_SMP
 61           else {
 62                 this_cpu_write(cpu_tlbstate.state, TLBSTATE_OK);
 63                 BUG_ON(this_cpu_read(cpu_tlbstate.active_mm) != next);
 64
 65                 if (!cpumask_test_cpu(cpu, mm_cpumask(next))) {
 66                         /*
 67                          * On established mms, the mm_cpumask is
only changed
 68                          * from irq context, from
ptep_clear_flush() while in
 69                          * lazy tlb mode, and here. Irqs are blocked during
 70                          * schedule, protecting us from
simultaneous changes.
 71                          */
 72                         cpumask_set_cpu(cpu, mm_cpumask(next));
 73                         /*
 74                          * We were in lazy tlb mode and leave_mm disabled
 75                          * tlb flush IPI delivery. We must reload CR3
 76                          * to make sure to use no freed page tables.
 77                          */
 78                         load_cr3(next->pgd);
 79                         trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH,
TLB_FLUSH_ALL);
 80                         load_LDT_nolock(&next->context);
 81                 }
 82         }
 83 #endif


-- 
Regards,
Sreejith

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2015-03-25 19:39 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-28 16:26 Question about switch_mm function Sreejith M M
2015-03-25 13:30 ` Sreejith M M
2015-03-25 16:00   ` Rajat Sharma
2015-03-25 16:05     ` Sreejith M M
2015-03-25 17:25       ` Valdis.Kletnieks at vt.edu
2015-03-25 17:31         ` Sreejith M M
2015-03-25 17:33           ` Rajat Sharma
2015-03-25 19:13             ` Rajat Sharma
2015-03-25 19:25               ` Valdis.Kletnieks at vt.edu
2015-03-25 19:39                 ` Rajat Sharma

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.