KVM: remove status in kvm_lapic structure
    
    status is a redundancy to apic spurious vector, it's not needed.
Removing it
    also reduces the states that should be saved.
    
    Signed-off-by: Yaozu (Eddie) Dong <[EMAIL PROTECTED]>
    Signed-off-by: Qing He <[EMAIL PROTECTED]>

---
 drivers/kvm/irq.h   |    1 -
 drivers/kvm/lapic.c |   29 ++++++++++++-----------------
 2 files changed, 12 insertions(+), 18 deletions(-)

diff --git a/drivers/kvm/irq.h b/drivers/kvm/irq.h
index 700db5e..9e184d7 100644
--- a/drivers/kvm/irq.h
+++ b/drivers/kvm/irq.h
@@ -106,7 +106,6 @@ struct kvm_ioapic {
 
 struct kvm_lapic {
        spinlock_t lock;        /* TODO for revise */
-       u32 status;
        unsigned long base_address;
        struct kvm_io_device dev;
        struct {
diff --git a/drivers/kvm/lapic.c b/drivers/kvm/lapic.c
index ca592b7..b198434 100644
--- a/drivers/kvm/lapic.c
+++ b/drivers/kvm/lapic.c
@@ -50,12 +50,20 @@
 #define APIC_SHORT_MASK                        0xc0000
 #define APIC_DEST_NOSHORT              0x0
 #define APIC_DEST_MASK                 0x800
-#define _APIC_SW_DISABLE               0
-#define APIC_SW_DISABLE                        (1 << _APIC_SW_DISABLE)
 #define MAX_APIC_VECTOR                        256
 
 #define VEC_POS(v) ((v) & (32 - 1))
 #define REG_POS(v) (((v) >> 5) << 4)
+static inline u32 apic_get_reg(struct kvm_lapic *apic, int reg_off)
+{
+       return *((u32 *) (apic->regs + reg_off));
+}
+
+static inline void apic_set_reg(struct kvm_lapic *apic, int reg_off,
u32 val)
+{
+       *((u32 *) (apic->regs + reg_off)) = val;
+}
+
 static inline int apic_test_and_set_vector(int vec, void *bitmap)
 {
        return test_and_set_bit(VEC_POS(vec), (bitmap) + REG_POS(vec));
@@ -83,7 +91,7 @@ static inline int apic_hw_enabled(struct kvm_lapic
*apic)
 
 static inline int  apic_sw_enabled(struct kvm_lapic *apic)
 {
-       return !((apic)->status & APIC_SW_DISABLE);
+       return apic_get_reg(apic, APIC_SPIV) & APIC_SPIV_APIC_ENABLED;
 }
 
 static inline int apic_enabled(struct kvm_lapic *apic)
@@ -98,16 +106,6 @@ static inline int apic_enabled(struct kvm_lapic
*apic)
        (LVT_MASK | APIC_MODE_MASK | APIC_INPUT_POLARITY | \
         APIC_LVT_REMOTE_IRR | APIC_LVT_LEVEL_TRIGGER)
 
-static inline u32 apic_get_reg(struct kvm_lapic *apic, int reg_off)
-{
-       return *((u32 *) (apic->regs + reg_off));
-}
-
-static inline void apic_set_reg(struct kvm_lapic *apic, int reg_off,
u32 val)
-{
-       *((u32 *) (apic->regs + reg_off)) = val;
-}
-
 static inline int kvm_apic_id(struct kvm_lapic *apic)
 {
        return GET_APIC_ID(apic_get_reg(apic, APIC_ID));
@@ -592,7 +590,6 @@ static void apic_mmio_write(struct kvm_io_device
*this,
                        int i;
                        u32 lvt_val;
 
-                       apic->status |= APIC_SW_DISABLE;
                        for (i = 0; i < APIC_LVT_NUM; i++) {
                                lvt_val = apic_get_reg(apic,
                                                       APIC_LVTT + 0x10
* i);
@@ -600,8 +597,7 @@ static void apic_mmio_write(struct kvm_io_device
*this,
                                             lvt_val | APIC_LVT_MASKED);
                        }
 
-               } else
-                       apic->status &= ~APIC_SW_DISABLE;
+               }
                break;
 
        case APIC_ICR:
@@ -825,7 +821,6 @@ static void lapic_reset(struct kvm_vcpu *vcpu)
        }
        apic->timer.divide_count = 0;
        apic->timer.pending = 0;
-       apic->status = APIC_SW_DISABLE;
        if (vcpu->vcpu_id == 0)
                vcpu->apic_base |= MSR_IA32_APICBASE_BSP;
        apic_update_ppr(apic);

Attachment: kvm-kern-lapic-remove-status.patch
Description: kvm-kern-lapic-remove-status.patch

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to