KVM: ia64: fix build breakage due to host spinlock change

Len Brown pointed out that allmodconfig is broken for
ia64 because of:

arch/ia64/kvm/vmm.c: In function 'vmm_spin_unlock':
arch/ia64/kvm/vmm.c:70: error: 'spinlock_t' has no member named 'raw_lock'

KVM has it's own spinlock routines. It should not depend on the base kernel
spinlock_t type (which changed when ia64 switched to ticket locks).  Define
its own vmm_spinlock_t type.

Signed-off-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
Luck, Tony 2009-12-17 17:05:03 -08:00 committed by Marcelo Tosatti
parent dab4b911a5
commit a662b8135a
3 changed files with 9 additions and 6 deletions

View File

@ -388,6 +388,9 @@ static inline u64 __gpfn_is_io(u64 gpfn)
#define _vmm_raw_spin_lock(x) do {}while(0) #define _vmm_raw_spin_lock(x) do {}while(0)
#define _vmm_raw_spin_unlock(x) do {}while(0) #define _vmm_raw_spin_unlock(x) do {}while(0)
#else #else
typedef struct {
volatile unsigned int lock;
} vmm_spinlock_t;
#define _vmm_raw_spin_lock(x) \ #define _vmm_raw_spin_lock(x) \
do { \ do { \
__u32 *ia64_spinlock_ptr = (__u32 *) (x); \ __u32 *ia64_spinlock_ptr = (__u32 *) (x); \
@ -405,12 +408,12 @@ static inline u64 __gpfn_is_io(u64 gpfn)
#define _vmm_raw_spin_unlock(x) \ #define _vmm_raw_spin_unlock(x) \
do { barrier(); \ do { barrier(); \
((spinlock_t *)x)->raw_lock.lock = 0; } \ ((vmm_spinlock_t *)x)->lock = 0; } \
while (0) while (0)
#endif #endif
void vmm_spin_lock(spinlock_t *lock); void vmm_spin_lock(vmm_spinlock_t *lock);
void vmm_spin_unlock(spinlock_t *lock); void vmm_spin_unlock(vmm_spinlock_t *lock);
enum { enum {
I_TLB = 1, I_TLB = 1,
D_TLB = 2 D_TLB = 2

View File

@ -60,12 +60,12 @@ static void __exit kvm_vmm_exit(void)
return ; return ;
} }
void vmm_spin_lock(spinlock_t *lock) void vmm_spin_lock(vmm_spinlock_t *lock)
{ {
_vmm_raw_spin_lock(lock); _vmm_raw_spin_lock(lock);
} }
void vmm_spin_unlock(spinlock_t *lock) void vmm_spin_unlock(vmm_spinlock_t *lock)
{ {
_vmm_raw_spin_unlock(lock); _vmm_raw_spin_unlock(lock);
} }

View File

@ -182,7 +182,7 @@ void mark_pages_dirty(struct kvm_vcpu *v, u64 pte, u64 ps)
{ {
u64 i, dirty_pages = 1; u64 i, dirty_pages = 1;
u64 base_gfn = (pte&_PAGE_PPN_MASK) >> PAGE_SHIFT; u64 base_gfn = (pte&_PAGE_PPN_MASK) >> PAGE_SHIFT;
spinlock_t *lock = __kvm_va(v->arch.dirty_log_lock_pa); vmm_spinlock_t *lock = __kvm_va(v->arch.dirty_log_lock_pa);
void *dirty_bitmap = (void *)KVM_MEM_DIRTY_LOG_BASE; void *dirty_bitmap = (void *)KVM_MEM_DIRTY_LOG_BASE;
dirty_pages <<= ps <= PAGE_SHIFT ? 0 : ps - PAGE_SHIFT; dirty_pages <<= ps <= PAGE_SHIFT ? 0 : ps - PAGE_SHIFT;