WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [HVM] vlapic: Synchronously determine PPR

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [HVM] vlapic: Synchronously determine PPR register value whenevr it is needed.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 31 Oct 2006 17:40:20 +0000
Delivery-date: Thu, 02 Nov 2006 13:59:28 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Node ID ceedd98b9afb9d32cdfec370f1e221fa13906b60
# Parent  1c506820c46864e337fcbe79f091ce38b4ec8c31
[HVM] vlapic: Synchronously determine PPR register value whenevr it is needed.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 xen/arch/x86/hvm/svm/svm.c       |    2 --
 xen/arch/x86/hvm/vlapic.c        |   29 +++++++++--------------------
 xen/arch/x86/hvm/vmx/vmx.c       |    4 ----
 xen/include/asm-x86/hvm/vlapic.h |    2 --
 4 files changed, 9 insertions(+), 28 deletions(-)

diff -r 1c506820c468 -r ceedd98b9afb xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c        Tue Oct 31 13:26:49 2006 +0000
+++ b/xen/arch/x86/hvm/svm/svm.c        Tue Oct 31 14:39:50 2006 +0000
@@ -56,7 +56,6 @@
 
 extern int inst_copy_from_guest(unsigned char *buf, unsigned long guest_eip,
                                 int inst_len);
-extern uint32_t vlapic_update_ppr(struct vlapic *vlapic);
 extern asmlinkage void do_IRQ(struct cpu_user_regs *);
 extern void svm_dump_inst(unsigned long eip);
 extern int svm_dbg_on;
@@ -1838,7 +1837,6 @@ static int mov_to_cr(int gpreg, int cr, 
         if ( vlapic == NULL )
             break;
         vlapic_set_reg(vlapic, APIC_TASKPRI, ((value & 0x0F) << 4));
-        vlapic_update_ppr(vlapic);
         break;
     }
 
diff -r 1c506820c468 -r ceedd98b9afb xen/arch/x86/hvm/vlapic.c
--- a/xen/arch/x86/hvm/vlapic.c Tue Oct 31 13:26:49 2006 +0000
+++ b/xen/arch/x86/hvm/vlapic.c Tue Oct 31 14:39:50 2006 +0000
@@ -181,26 +181,19 @@ int vlapic_find_highest_isr(struct vlapi
     return result;
 }
 
-uint32_t vlapic_update_ppr(struct vlapic *vlapic)
+uint32_t vlapic_get_ppr(struct vlapic *vlapic)
 {
     uint32_t tpr, isrv, ppr;
     int isr;
 
-    tpr = vlapic_get_reg(vlapic, APIC_TASKPRI);
-
-    isr = vlapic_find_highest_isr(vlapic);
-
-    if ( isr != -1 )
-        isrv = (isr >> 4) & 0xf;   /* ditto */
-    else
-        isrv = 0;
-
-    if ( (tpr >> 4) >= isrv )
+    tpr  = vlapic_get_reg(vlapic, APIC_TASKPRI);
+    isr  = vlapic_find_highest_isr(vlapic);
+    isrv = (isr != -1) ? isr : 0;
+
+    if ( (tpr & 0xf0) >= (isrv & 0xf0) )
         ppr = tpr & 0xff;
     else
-        ppr = isrv << 4;  /* low 4 bits of PPR have to be cleared */
-
-    vlapic_set_reg(vlapic, APIC_PROCPRI, ppr);
+        ppr = isrv & 0xf0;
 
     HVM_DBG_LOG(DBG_LEVEL_VLAPIC_INTERRUPT,
                 "vlapic %p, ppr 0x%x, isr 0x%x, isrv 0x%x.",
@@ -444,7 +437,6 @@ void vlapic_EOI_set(struct vlapic *vlapi
         return ;
 
     vlapic_clear_vector(vector, vlapic->regs + APIC_ISR);
-    vlapic_update_ppr(vlapic);
 
     if ( vlapic_test_and_clear_vector(vector, vlapic->regs + APIC_TMR) )
         ioapic_update_EOI(vlapic->domain, vector);
@@ -555,8 +547,7 @@ static void vlapic_read_aligned(struct v
 
     switch ( offset ) {
     case APIC_PROCPRI:
-        vlapic_update_ppr(vlapic);
-        *result = vlapic_get_reg(vlapic, offset);
+        *result = vlapic_get_ppr(vlapic);
         break;
 
     case APIC_ARBPRI:
@@ -683,7 +674,6 @@ static void vlapic_write(struct vcpu *v,
 
     case APIC_TASKPRI:
         vlapic_set_reg(vlapic, APIC_TASKPRI, val & 0xff);
-        vlapic_update_ppr(vlapic);
         vlapic->flush_tpr_threshold = 1;
         break;
 
@@ -912,7 +902,7 @@ int cpu_get_apic_interrupt(struct vcpu *
 
     highest_irr = vlapic_find_highest_irr(vlapic);
     if ( (highest_irr == -1) ||
-         ((highest_irr & 0xF0) <= vlapic_get_reg(vlapic, APIC_PROCPRI)) )
+         ((highest_irr & 0xF0) <= vlapic_get_ppr(vlapic)) )
         return -1;
 
     *mode = APIC_DM_FIXED;
@@ -949,7 +939,6 @@ void vlapic_post_injection(struct vcpu *
     case APIC_DM_LOWEST:
         vlapic_set_vector(vector, vlapic->regs + APIC_ISR);
         vlapic_clear_irr(vector, vlapic);
-        vlapic_update_ppr(vlapic);
         if ( (vector == vlapic_lvt_vector(vlapic, APIC_LVTT)) &&
              (vlapic->timer_pending_count != 0) )
         {
diff -r 1c506820c468 -r ceedd98b9afb xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c        Tue Oct 31 13:26:49 2006 +0000
+++ b/xen/arch/x86/hvm/vmx/vmx.c        Tue Oct 31 14:39:50 2006 +0000
@@ -46,8 +46,6 @@
 #include <asm/hvm/vpic.h>
 #include <asm/hvm/vlapic.h>
 #include <asm/x86_emulate.h>
-
-extern uint32_t vlapic_update_ppr(struct vlapic *vlapic);
 
 static DEFINE_PER_CPU(unsigned long, trace_values[5]);
 #define TRACE_VMEXIT(index,value) this_cpu(trace_values)[index]=value
@@ -1808,7 +1806,6 @@ static int mov_to_cr(int gp, int cr, str
         if ( vlapic == NULL )
             break;
         vlapic_set_reg(vlapic, APIC_TASKPRI, ((value & 0x0F) << 4));
-        vlapic_update_ppr(vlapic);
         break;
     }
     default:
@@ -2410,7 +2407,6 @@ asmlinkage void vmx_vmexit_handler(struc
         break;
 
     case EXIT_REASON_TPR_BELOW_THRESHOLD:
-        vlapic_update_ppr(VLAPIC(v));
         VLAPIC(v)->flush_tpr_threshold = 1;
         break;
 
diff -r 1c506820c468 -r ceedd98b9afb xen/include/asm-x86/hvm/vlapic.h
--- a/xen/include/asm-x86/hvm/vlapic.h  Tue Oct 31 13:26:49 2006 +0000
+++ b/xen/include/asm-x86/hvm/vlapic.h  Tue Oct 31 14:39:50 2006 +0000
@@ -81,8 +81,6 @@ int vlapic_init(struct vcpu *vc);
 
 void vlapic_msr_set(struct vlapic *vlapic, uint64_t value);
 
-uint32_t vlapic_update_ppr(struct vlapic *vlapic);
-
 int vlapic_accept_pic_intr(struct vcpu *v);
 
 struct vlapic *apic_round_robin(struct domain *d,

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [HVM] vlapic: Synchronously determine PPR register value whenevr it is needed., Xen patchbot-unstable <=