Merge branch 'master' into queue
authorMarcelo Tosatti <mtosatti@redhat.com>
Mon, 4 Mar 2013 23:10:32 +0000 (20:10 -0300)
committerMarcelo Tosatti <mtosatti@redhat.com>
Mon, 4 Mar 2013 23:10:32 +0000 (20:10 -0300)
* master: (15791 commits)
  Linux 3.9-rc1
  btrfs/raid56: Add missing #include <linux/vmalloc.h>
  fix compat_sys_rt_sigprocmask()
  SUNRPC: One line comment fix
  ext4: enable quotas before orphan cleanup
  ext4: don't allow quota mount options when quota feature enabled
  ext4: fix a warning from sparse check for ext4_dir_llseek
  ext4: convert number of blocks to clusters properly
  ext4: fix possible memory leak in ext4_remount()
  jbd2: fix ERR_PTR dereference in jbd2__journal_start
  metag: Provide dma_get_sgtable()
  metag: prom.h: remove declaration of metag_dt_memblock_reserve()
  metag: copy devicetree to non-init memory
  metag: cleanup metag_ksyms.c includes
  metag: move mm/init.c exports out of metag_ksyms.c
  metag: move usercopy.c exports out of metag_ksyms.c
  metag: move setup.c exports out of metag_ksyms.c
  metag: move kick.c exports out of metag_ksyms.c
  metag: move traps.c exports out of metag_ksyms.c
  metag: move irq enable out of irqflags.h on SMP
  ...

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Conflicts:
arch/x86/kernel/kvmclock.c

1  2 
arch/x86/kernel/kvmclock.c
arch/x86/kvm/x86.c

@@@ -160,14 -160,10 +160,14 @@@ int kvm_register_clock(char *txt
  {
        int cpu = smp_processor_id();
        int low, high, ret;
 -      struct pvclock_vcpu_time_info *src = &hv_clock[cpu].pvti;
 +      struct pvclock_vcpu_time_info *src;
 +
 +      if (!hv_clock)
 +              return 0;
  
-       low = (int)__pa(src) | 1;
-       high = ((u64)__pa(src) >> 32);
 +      src = &hv_clock[cpu].pvti;
+       low = (int)slow_virt_to_phys(src) | 1;
+       high = ((u64)slow_virt_to_phys(src) >> 32);
        ret = native_write_msr_safe(msr_kvm_system_time, low, high);
        printk(KERN_INFO "kvm-clock: cpu %d, msr %x:%x, %s\n",
               cpu, high, low, txt);
@@@ -280,9 -276,6 +280,9 @@@ int __init kvm_setup_vsyscall_timeinfo(
        struct pvclock_vcpu_time_info *vcpu_time;
        unsigned int size;
  
 +      if (!hv_clock)
 +              return 0;
 +
        size = PAGE_ALIGN(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS);
  
        preempt_disable();
diff --combined arch/x86/kvm/x86.c
@@@ -120,7 -120,7 +120,7 @@@ struct kvm_shared_msrs 
  };
  
  static struct kvm_shared_msrs_global __read_mostly shared_msrs_global;
- static DEFINE_PER_CPU(struct kvm_shared_msrs, shared_msrs);
+ static struct kvm_shared_msrs __percpu *shared_msrs;
  
  struct kvm_stats_debugfs_item debugfs_entries[] = {
        { "pf_fixed", VCPU_STAT(pf_fixed) },
@@@ -191,10 -191,10 +191,10 @@@ static void kvm_on_user_return(struct u
  
  static void shared_msr_update(unsigned slot, u32 msr)
  {
-       struct kvm_shared_msrs *smsr;
        u64 value;
+       unsigned int cpu = smp_processor_id();
+       struct kvm_shared_msrs *smsr = per_cpu_ptr(shared_msrs, cpu);
  
-       smsr = &__get_cpu_var(shared_msrs);
        /* only read, and nobody should modify it at this time,
         * so don't need lock */
        if (slot >= shared_msrs_global.nr) {
@@@ -226,7 -226,8 +226,8 @@@ static void kvm_shared_msr_cpu_online(v
  
  void kvm_set_shared_msr(unsigned slot, u64 value, u64 mask)
  {
-       struct kvm_shared_msrs *smsr = &__get_cpu_var(shared_msrs);
+       unsigned int cpu = smp_processor_id();
+       struct kvm_shared_msrs *smsr = per_cpu_ptr(shared_msrs, cpu);
  
        if (((value ^ smsr->values[slot].curr) & mask) == 0)
                return;
@@@ -242,7 -243,8 +243,8 @@@ EXPORT_SYMBOL_GPL(kvm_set_shared_msr)
  
  static void drop_user_return_notifiers(void *ignore)
  {
-       struct kvm_shared_msrs *smsr = &__get_cpu_var(shared_msrs);
+       unsigned int cpu = smp_processor_id();
+       struct kvm_shared_msrs *smsr = per_cpu_ptr(shared_msrs, cpu);
  
        if (smsr->registered)
                kvm_on_user_return(&smsr->urn);
@@@ -1877,6 -1879,14 +1879,14 @@@ int kvm_set_msr_common(struct kvm_vcpu 
        u64 data = msr_info->data;
  
        switch (msr) {
+       case MSR_AMD64_NB_CFG:
+       case MSR_IA32_UCODE_REV:
+       case MSR_IA32_UCODE_WRITE:
+       case MSR_VM_HSAVE_PA:
+       case MSR_AMD64_PATCH_LOADER:
+       case MSR_AMD64_BU_CFG2:
+               break;
        case MSR_EFER:
                return set_efer(vcpu, data);
        case MSR_K7_HWCR:
                        return 1;
                }
                break;
-       case MSR_AMD64_NB_CFG:
-               break;
        case MSR_IA32_DEBUGCTLMSR:
                if (!data) {
                        /* We support the non-activated case already */
                vcpu_unimpl(vcpu, "%s: MSR_IA32_DEBUGCTLMSR 0x%llx, nop\n",
                            __func__, data);
                break;
-       case MSR_IA32_UCODE_REV:
-       case MSR_IA32_UCODE_WRITE:
-       case MSR_VM_HSAVE_PA:
-       case MSR_AMD64_PATCH_LOADER:
-               break;
        case 0x200 ... 0x2ff:
                return set_msr_mtrr(vcpu, msr, data);
        case MSR_IA32_APICBASE:
@@@ -2249,6 -2252,7 +2252,7 @@@ int kvm_get_msr_common(struct kvm_vcpu 
        case MSR_K8_INT_PENDING_MSG:
        case MSR_AMD64_NB_CFG:
        case MSR_FAM10H_MMIO_CONF_BASE:
+       case MSR_AMD64_BU_CFG2:
                data = 0;
                break;
        case MSR_P6_PERFCTR0:
@@@ -2696,7 -2700,7 +2700,7 @@@ static int kvm_vcpu_ioctl_set_lapic(str
  static int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu,
                                    struct kvm_interrupt *irq)
  {
 -      if (irq->irq < 0 || irq->irq >= KVM_NR_INTERRUPTS)
 +      if (irq->irq >= KVM_NR_INTERRUPTS)
                return -EINVAL;
        if (irqchip_in_kernel(vcpu->kvm))
                return -ENXIO;
@@@ -5269,9 -5273,16 +5273,16 @@@ int kvm_arch_init(void *opaque
                goto out;
        }
  
+       r = -ENOMEM;
+       shared_msrs = alloc_percpu(struct kvm_shared_msrs);
+       if (!shared_msrs) {
+               printk(KERN_ERR "kvm: failed to allocate percpu kvm_shared_msrs\n");
+               goto out;
+       }
        r = kvm_mmu_module_init();
        if (r)
-               goto out;
+               goto out_free_percpu;
  
        kvm_set_mmio_spte_mask();
        kvm_init_msr_list();
  
        return 0;
  
+ out_free_percpu:
+       free_percpu(shared_msrs);
  out:
        return r;
  }
@@@ -5311,6 -5324,7 +5324,7 @@@ void kvm_arch_exit(void
  #endif
        kvm_x86_ops = NULL;
        kvm_mmu_module_exit();
+       free_percpu(shared_msrs);
  }
  
  int kvm_emulate_halt(struct kvm_vcpu *vcpu)