|
@@ -389,6 +389,13 @@
|
|
|
* that register for the time this macro runs
|
|
|
*/
|
|
|
|
|
|
+ /*
|
|
|
+ * The high bits of the CS dword (__csh) are used for
|
|
|
+ * CS_FROM_ENTRY_STACK and CS_FROM_USER_CR3. Clear them in case
|
|
|
+ * hardware didn't do this for us.
|
|
|
+ */
|
|
|
+ andl $(0x0000ffff), PT_CS(%esp)
|
|
|
+
|
|
|
/* Are we on the entry stack? Bail out if not! */
|
|
|
movl PER_CPU_VAR(cpu_entry_area), %ecx
|
|
|
addl $CPU_ENTRY_AREA_entry_stack + SIZEOF_entry_stack, %ecx
|
|
@@ -407,12 +414,6 @@
|
|
|
/* Load top of task-stack into %edi */
|
|
|
movl TSS_entry2task_stack(%edi), %edi
|
|
|
|
|
|
- /*
|
|
|
- * Clear unused upper bits of the dword containing the word-sized CS
|
|
|
- * slot in pt_regs in case hardware didn't clear it for us.
|
|
|
- */
|
|
|
- andl $(0x0000ffff), PT_CS(%esp)
|
|
|
-
|
|
|
/* Special case - entry from kernel mode via entry stack */
|
|
|
#ifdef CONFIG_VM86
|
|
|
movl PT_EFLAGS(%esp), %ecx # mix EFLAGS and CS
|