PERFORCE change 93688 for review
Kip Macy
kmacy at FreeBSD.org
Tue Mar 21 04:58:55 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=93688
Change 93688 by kmacy at kmacy_storage:sun4vtmp on 2006/03/21 04:58:03
add non control flow changes for spill/fill exception handlers to use
physical addresses
Affected files ...
.. //depot/projects/kmacy_sun4v/src/sys/sparc64/sparc64/genassym.c#13 edit
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/include/asmacros.h#11 edit
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/include/pcb.h#8 edit
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/include/pcpu.h#8 edit
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/machdep.c#16 edit
Differences ...
==== //depot/projects/kmacy_sun4v/src/sys/sparc64/sparc64/genassym.c#13 (text+ko) ====
@@ -201,9 +201,6 @@
ASSYM(PC_IRTAIL, offsetof(struct pcpu, pc_irtail));
ASSYM(PC_IRFREE, offsetof(struct pcpu, pc_irfree));
ASSYM(PC_MID, offsetof(struct pcpu, pc_mid));
-ASSYM(PC_TLB_CTX, offsetof(struct pcpu, pc_tlb_ctx));
-ASSYM(PC_TLB_CTX_MAX, offsetof(struct pcpu, pc_tlb_ctx_max));
-ASSYM(PC_TLB_CTX_MIN, offsetof(struct pcpu, pc_tlb_ctx_min));
ASSYM(PC_CNT, offsetof(struct pcpu, pc_cnt));
ASSYM(PC_SIZEOF, sizeof(struct pcpu));
@@ -223,6 +220,9 @@
ASSYM(PC_KWBUF, offsetof(struct pcpu, pc_kwbuf));
ASSYM(PC_PMAP, offsetof(struct pcpu, pc_curpmap));
#else
+ASSYM(PC_TLB_CTX, offsetof(struct pcpu, pc_tlb_ctx));
+ASSYM(PC_TLB_CTX_MAX, offsetof(struct pcpu, pc_tlb_ctx_max));
+ASSYM(PC_TLB_CTX_MIN, offsetof(struct pcpu, pc_tlb_ctx_min));
ASSYM(PC_PMAP, offsetof(struct pcpu, pc_pmap));
#endif
@@ -273,6 +273,9 @@
ASSYM(TD_KSTACK, offsetof(struct thread, td_kstack));
ASSYM(TD_PCB, offsetof(struct thread, td_pcb));
ASSYM(TD_PROC, offsetof(struct thread, td_proc));
+ASSYM(TD_MD, offsetof(struct thread, td_md));
+ASSYM(MD_SAVED_PIL, offsetof(struct mdthread, md_saved_pil));
+
ASSYM(PCB_SIZEOF, sizeof(struct pcb));
ASSYM(PCB_RW, offsetof(struct pcb, pcb_rw));
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/include/asmacros.h#11 (text+ko) ====
@@ -131,6 +131,14 @@
#define GET_MMFSA_SCRATCH(reg) \
ldxa [%g0 + %g0]ASI_SCRATCHPAD, reg;
+
+#define GET_PCPU_PHYS_SCRATCH(tmp) \
+ sethi %uhi(VM_MIN_DIRECT_ADDRESS), tmp; \
+ mov SCRATCH_REG_PCPU, PCPU_REG; \
+ sllx tmp, 32, tmp; \
+ ldxa [%g0 + PCPU_REG]ASI_SCRATCHPAD, PCPU_REG; \
+ andn PCPU_REG, tmp, PCPU_REG
+
#define GET_PCPU_SCRATCH \
mov SCRATCH_REG_PCPU, PCPU_REG; \
ldxa [%g0 + PCPU_REG]ASI_SCRATCHPAD, PCPU_REG;
@@ -171,6 +179,13 @@
#define SET_SCRATCH(offsetreg, reg) stxa reg, [%g0 + offsetreg]ASI_SCRATCHPAD
+
+#define GET_PCB_PHYS(tmp, reg) \
+ mov PC_CURPCB_RA, reg; \
+ GET_PCPU_PHYS_SCRATCH(tmp); \
+ ldxa [PCPU_REG + reg]ASI_REAL, reg;
+
+
#define GET_PCB(reg) \
GET_PCPU_SCRATCH; \
ldx [PCPU_REG + PC_CURPCB], reg;
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/include/pcb.h#8 (text+ko) ====
@@ -45,7 +45,7 @@
uint64_t pcb_nsaved; /* number of windows saved in pcb_rw */
uint64_t pcb_pc;
uint64_t pcb_sp;
- uint64_t pcb_pa; /* physical address of pcb */
+ uint64_t pcb_ra; /* physical address of pcb */
uint64_t pcb_pad[4];
} __aligned(64);
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/include/pcpu.h#8 (text+ko) ====
@@ -74,10 +74,8 @@
struct rwindow pc_kwbuf; \
u_long pc_kwbuf_sp; \
u_int pc_kwbuf_full; \
- u_int pc_node; \
- u_int pc_tlb_ctx; \
- u_int pc_tlb_ctx_max; \
- u_int pc_tlb_ctx_min
+ u_int pc_node; \
+ u_long pc_curpcb_ra;
/* XXX SUN4V_FIXME - as we access the *_ra and *_size fields in quick
* succession we _really_ want them to be L1 cache line size aligned
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/machdep.c#16 (text+ko) ====
@@ -384,9 +384,6 @@
#endif
pc->pc_addr = (vm_offset_t)pcpu0;
pc->pc_node = child;
- pc->pc_tlb_ctx = TLB_CTX_USER_MIN;
- pc->pc_tlb_ctx_min = TLB_CTX_USER_MIN;
- pc->pc_tlb_ctx_max = TLB_CTX_USER_MAX;
/*
* Initialize global registers.
More information about the p4-projects
mailing list