Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 204651
b: refs/heads/master
c: 5c0d72b
h: refs/heads/master
i:
  204649: 2ebf76f
  204647: f29b4a0
v: v3
  • Loading branch information
Michal Simek committed Aug 4, 2010
1 parent f20bb81 commit eb1ee03
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 24 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3fbd93e58e0f3589720798b7c8992a25e4a2d3a4
refs/heads/master: 5c0d72b1b35fd0dad7dd70a114df068eadcc1b16
43 changes: 20 additions & 23 deletions trunk/arch/microblaze/kernel/entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -275,9 +275,12 @@ C_ENTRY(_user_exception):
addi r14, r14, 4 /* return address is 4 byte after call */
swi r11, r0, TOPHYS(r0_ram + PTO + PT_R11); /* Save r11 */

lwi r11, r0, TOPHYS(PER_CPU(KM));/* See if already in kernel mode.*/
beqi r11, 1f; /* Jump ahead if coming from user */
/* Kernel-mode state save. */
mfs r11, rmsr
nop
andi r11, r11, MSR_UMS
bnei r11, 1f

/* Kernel-mode state save - kernel execve */
lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); /* Reload kernel stack-ptr*/
tophys(r1,r11);
swi r11, r1, (PT_R1-PT_SIZE); /* Save original SP. */
Expand Down Expand Up @@ -307,8 +310,6 @@ C_ENTRY(_user_exception):
swi r0, r1, PTO+PT_MODE; /* Was in user-mode. */
lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP));
swi r11, r1, PTO+PT_R1; /* Store user SP. */
addi r11, r0, 1;
swi r11, r0, TOPHYS(PER_CPU(KM)); /* Now we're in kernel-mode. */
2: lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE));
/* Save away the syscall number. */
swi r12, r1, PTO+PT_R0;
Expand Down Expand Up @@ -423,7 +424,6 @@ C_ENTRY(ret_from_trap):

/* Finally, return to user state. */
1:
swi r0, r0, PER_CPU(KM); /* Now officially in user state. */
swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */
VM_OFF;
tophys(r1,r1);
Expand Down Expand Up @@ -511,8 +511,10 @@ C_ENTRY(sys_rt_sigreturn_wrapper):
enable_irq; \
set_ee; \
/* See if already in kernel mode.*/ \
lwi r11, r0, TOPHYS(PER_CPU(KM)); \
beqi r11, 1f; /* Jump ahead if coming from user */\
mfs r11, rmsr; \
nop; \
andi r11, r11, MSR_UMS; \
bnei r11, 1f; \
/* Kernel-mode state save. */ \
/* Reload kernel stack-ptr. */ \
lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); \
Expand Down Expand Up @@ -544,8 +546,6 @@ C_ENTRY(sys_rt_sigreturn_wrapper):
swi r0, r1, PTO+PT_MODE; /* Was in user-mode. */ \
lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); \
swi r11, r1, PTO+PT_R1; /* Store user SP. */ \
addi r11, r0, 1; \
swi r11, r0, TOPHYS(PER_CPU(KM)); /* Now we're in kernel-mode.*/\
2: lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); \
/* Save away the syscall number. */ \
swi r0, r1, PTO+PT_R0; \
Expand Down Expand Up @@ -686,7 +686,7 @@ C_ENTRY(ret_from_exc):
add r6, r0, r0; /* Arg 2: sigset_t *oldset */

/* Finally, return to user state. */
1: swi r0, r0, PER_CPU(KM); /* Now officially in user state. */
1:
swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */
VM_OFF;
tophys(r1,r1);
Expand Down Expand Up @@ -724,8 +724,10 @@ C_ENTRY(_interrupt):
swi r1, r0, TOPHYS(PER_CPU(ENTRY_SP))
swi r11, r0, TOPHYS(PER_CPU(R11_SAVE));
/* MS: See if already in kernel mode. */
lwi r11, r0, TOPHYS(PER_CPU(KM));
beqi r11, 1f; /* MS: Jump ahead if coming from user */
mfs r11, rmsr
nop
andi r11, r11, MSR_UMS
bnei r11, 1f

/* Kernel-mode state save. */
or r11, r1, r0
Expand Down Expand Up @@ -761,10 +763,6 @@ C_ENTRY(_interrupt):
swi r0, r1, PTO + PT_MODE;
lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP));
swi r11, r1, PTO+PT_R1;
/* setup kernel mode to KM */
addi r11, r0, 1;
swi r11, r0, TOPHYS(PER_CPU(KM));

2:
lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE));
swi r0, r1, PTO + PT_R0;
Expand Down Expand Up @@ -803,7 +801,6 @@ ret_from_irq:
no_intr_resched:
/* Disable interrupts, we are now committed to the state restore */
disable_irq
swi r0, r0, PER_CPU(KM); /* MS: Now officially in user state. */
swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE);
VM_OFF;
tophys(r1,r1);
Expand Down Expand Up @@ -858,8 +855,10 @@ C_ENTRY(_debug_exception):
set_bip; /*equalize initial state for all possible entries*/
clear_eip;
enable_irq;
lwi r11, r0, TOPHYS(PER_CPU(KM));/* See if already in kernel mode.*/
beqi r11, 1f; /* Jump ahead if coming from user */
mfs r11, rmsr
nop
andi r11, r11, MSR_UMS
bnei r11, 1f
/* Kernel-mode state save. */
lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); /* Reload kernel stack-ptr*/
tophys(r1,r11);
Expand Down Expand Up @@ -887,8 +886,6 @@ C_ENTRY(_debug_exception):
swi r0, r1, PTO+PT_MODE; /* Was in user-mode. */
lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP));
swi r11, r1, PTO+PT_R1; /* Store user SP. */
addi r11, r0, 1;
swi r11, r0, TOPHYS(PER_CPU(KM)); /* Now we're in kernel-mode. */
2: lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE));
/* Save away the syscall number. */
swi r0, r1, PTO+PT_R0;
Expand Down Expand Up @@ -944,7 +941,7 @@ dbtrap_call: rtbd r11, 0;


/* Finally, return to user state. */
1: swi r0, r0, PER_CPU(KM); /* Now officially in user state. */
1:
swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */
VM_OFF;
tophys(r1,r1);
Expand Down

0 comments on commit eb1ee03

Please sign in to comment.