bitkeeper revision 1.887.1.2 (409a50dbLW3CCQd-ZdsTiKjfkeHXCw)
authormwilli2@equilibrium.research.intel-research.net <mwilli2@equilibrium.research.intel-research.net>
Thu, 6 May 2004 14:51:07 +0000 (14:51 +0000)
committermwilli2@equilibrium.research.intel-research.net <mwilli2@equilibrium.research.intel-research.net>
Thu, 6 May 2004 14:51:07 +0000 (14:51 +0000)
Fix calculation of TSS offset on SMP systems when creating bounce frame.

xen/arch/i386/entry.S
xen/include/asm-i386/processor.h

index 155ad23c4d96230a0605698a7d9b3539bf9dda49..a0ca4b4e27590d1d9fdb4baf7a7eb3b22b8758f7 100644 (file)
@@ -406,7 +406,11 @@ create_bounce_frame:
         jz   1f /* jump if returning to an existing ring-1 activation */
         /* obtain ss/esp from TSS -- no current ring-1 activations */
         movzwl PROCESSOR(%ebx),%eax
-        shll $8,%eax /* multiply by 256 */
+        /* next 4 lines multiply %eax by 8320, which is sizeof(tss_struct) */
+        movl %eax, %ecx
+        shll $7, %ecx
+        shll $13, %eax
+        addl %ecx,%eax
         addl $init_tss + 12,%eax
         movl (%eax),%esi /* tss->esp1 */
 FAULT6: movl 4(%eax),%ds /* tss->ss1  */
index 2968e2e4e9dfb9806a0b1caac40ac72b04e210d5..aa5048c6ec533d8ce2e3ab715ef74b223c5b6469 100644 (file)
@@ -375,7 +375,7 @@ struct tss_struct {
     unsigned short     trace, bitmap;
     unsigned long      io_bitmap[IO_BITMAP_SIZE+1];
     /*
-     * pads the TSS to be cacheline-aligned (size is 0x100)
+     * pads the TSS to be cacheline-aligned (total size is 0x2080)
      */
     unsigned long __cacheline_filler[5];
 };