Blackfin: optimize double fault boot checking
This moves the double fault data used at boot time into a single struct which can then easily be addressed with indexed loads rather than having to explicitly load multiple addresses. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
这个提交包含在:
@@ -85,37 +85,25 @@ ENTRY(__start)
|
||||
SSYNC;
|
||||
|
||||
/* in case of double faults, save a few things */
|
||||
p0.l = _init_retx;
|
||||
p0.h = _init_retx;
|
||||
R0 = RETX;
|
||||
[P0] = R0;
|
||||
|
||||
p1.l = _initial_pda;
|
||||
p1.h = _initial_pda;
|
||||
r4 = RETX;
|
||||
#ifdef CONFIG_DEBUG_DOUBLEFAULT
|
||||
/* Only save these if we are storing them,
|
||||
* This happens here, since L1 gets clobbered
|
||||
* below
|
||||
*/
|
||||
GET_PDA(p0, r0);
|
||||
r5 = [p0 + PDA_DF_RETX];
|
||||
p1.l = _init_saved_retx;
|
||||
p1.h = _init_saved_retx;
|
||||
[p1] = r5;
|
||||
|
||||
r5 = [p0 + PDA_DF_DCPLB];
|
||||
p1.l = _init_saved_dcplb_fault_addr;
|
||||
p1.h = _init_saved_dcplb_fault_addr;
|
||||
[p1] = r5;
|
||||
|
||||
r5 = [p0 + PDA_DF_ICPLB];
|
||||
p1.l = _init_saved_icplb_fault_addr;
|
||||
p1.h = _init_saved_icplb_fault_addr;
|
||||
[p1] = r5;
|
||||
|
||||
r5 = [p0 + PDA_DF_SEQSTAT];
|
||||
p1.l = _init_saved_seqstat;
|
||||
p1.h = _init_saved_seqstat;
|
||||
[p1] = r5;
|
||||
r0 = [p0 + PDA_DF_RETX];
|
||||
r1 = [p0 + PDA_DF_DCPLB];
|
||||
r2 = [p0 + PDA_DF_ICPLB];
|
||||
r3 = [p0 + PDA_DF_SEQSTAT];
|
||||
[p1 + PDA_INIT_DF_RETX] = r0;
|
||||
[p1 + PDA_INIT_DF_DCPLB] = r1;
|
||||
[p1 + PDA_INIT_DF_ICPLB] = r2;
|
||||
[p1 + PDA_INIT_DF_SEQSTAT] = r3;
|
||||
#endif
|
||||
[p1 + PDA_INIT_RETX] = r4;
|
||||
|
||||
/* Initialize stack pointer */
|
||||
sp.l = _init_thread_union + THREAD_SIZE;
|
||||
|
在新工单中引用
屏蔽一个用户