]> git.baikalelectronics.ru Git - kernel.git/commit
[IA64-SGI] Missed TLB flush
authorJack Steiner <steiner@sgi.com>
Thu, 15 Dec 2005 18:41:22 +0000 (12:41 -0600)
committerTony Luck <tony.luck@intel.com>
Fri, 16 Dec 2005 18:46:25 +0000 (10:46 -0800)
commit9c469a68eeaacf8d1200722e2c8e790c24e9d9c5
tree2a8df4baec55fba949d4b02b95c611fe96cdce78
parentcf51468d592a7b12c2f24e19292d7792518fb9a7
[IA64-SGI] Missed TLB flush

I see why the problem exists only on SN. SN uses a different hardware
mechanism to purge TLB entries across nodes.

It looks like there is a bug in the SN TLB flushing code. During context switch,
kernel threads inherit the mm of the task that was previously running on the
cpu. This confuses the code in sn2_global_tlb_purge().

The result is a missed TLB purge for the task that owns the "borrowed" mm.

(I hit the problem running heavy stress where kswapd was purging code pages of
a user task that woke kswapd. The user task took a SIGILL fault trying to
execute code in the page that had been ripped out from underneath it).

Signed-off-by: Jack Steiner <steiner@sgi.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
arch/ia64/sn/kernel/sn2/sn2_smp.c