clear_page.S (e5451c8f8330e03ad3cfa16048b4daf961af434f) clear_page.S (d3867f0483103b8ff7edfdea3ef1981c03d96891)
1/* clear_page.S: UltraSparc optimized clear page.
2 *
3 * Copyright (C) 1996, 1998, 1999, 2000, 2004 David S. Miller (davem@redhat.com)
4 * Copyright (C) 1997 Jakub Jelinek (jakub@redhat.com)
5 */
6
7#include <asm/visasm.h>
8#include <asm/thread_info.h>
9#include <asm/page.h>
10#include <asm/pgtable.h>
11#include <asm/spitfire.h>
12#include <asm/head.h>
1/* clear_page.S: UltraSparc optimized clear page.
2 *
3 * Copyright (C) 1996, 1998, 1999, 2000, 2004 David S. Miller (davem@redhat.com)
4 * Copyright (C) 1997 Jakub Jelinek (jakub@redhat.com)
5 */
6
7#include <asm/visasm.h>
8#include <asm/thread_info.h>
9#include <asm/page.h>
10#include <asm/pgtable.h>
11#include <asm/spitfire.h>
12#include <asm/head.h>
13#include <asm/export.h>
13
14 /* What we used to do was lock a TLB entry into a specific
15 * TLB slot, clear the page with interrupts disabled, then
16 * restore the original TLB entry. This was great for
17 * disturbing the TLB as little as possible, but it meant
18 * we had to keep interrupts disabled for a long time.
19 *
20 * Now, we simply use the normal TLB loading mechanism,
21 * and this makes the cpu choose a slot all by itself.
22 * Then we do a normal TLB flush on exit. We need only
23 * disable preemption during the clear.
24 */
25
26 .text
27
28 .globl _clear_page
14
15 /* What we used to do was lock a TLB entry into a specific
16 * TLB slot, clear the page with interrupts disabled, then
17 * restore the original TLB entry. This was great for
18 * disturbing the TLB as little as possible, but it meant
19 * we had to keep interrupts disabled for a long time.
20 *
21 * Now, we simply use the normal TLB loading mechanism,
22 * and this makes the cpu choose a slot all by itself.
23 * Then we do a normal TLB flush on exit. We need only
24 * disable preemption during the clear.
25 */
26
27 .text
28
29 .globl _clear_page
30 EXPORT_SYMBOL(_clear_page)
29_clear_page: /* %o0=dest */
30 ba,pt %xcc, clear_page_common
31 clr %o4
32
33 /* This thing is pretty important, it shows up
34 * on the profiles via do_anonymous_page().
35 */
36 .align 32
37 .globl clear_user_page
31_clear_page: /* %o0=dest */
32 ba,pt %xcc, clear_page_common
33 clr %o4
34
35 /* This thing is pretty important, it shows up
36 * on the profiles via do_anonymous_page().
37 */
38 .align 32
39 .globl clear_user_page
40 EXPORT_SYMBOL(clear_user_page)
38clear_user_page: /* %o0=dest, %o1=vaddr */
39 lduw [%g6 + TI_PRE_COUNT], %o2
40 sethi %hi(PAGE_OFFSET), %g2
41 sethi %hi(PAGE_SIZE), %o4
42
43 ldx [%g2 + %lo(PAGE_OFFSET)], %g2
44 sethi %hi(PAGE_KERNEL_LOCKED), %g3
45

--- 58 unchanged lines hidden ---
41clear_user_page: /* %o0=dest, %o1=vaddr */
42 lduw [%g6 + TI_PRE_COUNT], %o2
43 sethi %hi(PAGE_OFFSET), %g2
44 sethi %hi(PAGE_SIZE), %o4
45
46 ldx [%g2 + %lo(PAGE_OFFSET)], %g2
47 sethi %hi(PAGE_KERNEL_LOCKED), %g3
48

--- 58 unchanged lines hidden ---