Merge remote-tracking branch 'kvm-ppc-paulus/kvm-ppc-next'
authorStephen Rothwell <sfr@canb.auug.org.au>
Tue, 13 Sep 2016 02:26:25 +0000 (12:26 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Tue, 13 Sep 2016 02:26:25 +0000 (12:26 +1000)
1  2 
arch/mips/include/asm/kvm_host.h
arch/powerpc/platforms/powernv/pci-ioda.c
arch/s390/include/asm/kvm_host.h
arch/x86/include/asm/kvm_host.h
virt/kvm/kvm_main.c

index 4d7e0e466b5a02ddcc3c1d4f2a2938234dcb762b,5f488dc8a7d593755e5ef6e30ef7963db4b3fc4c..8365b0af7e6c98d55d3ebe2e12e1d2dc398d7bad
  #define KVM_INVALID_INST              0xdeadbeef
  #define KVM_INVALID_ADDR              0xdeadbeef
  
 +/*
 + * EVA has overlapping user & kernel address spaces, so user VAs may be >
 + * PAGE_OFFSET. For this reason we can't use the default KVM_HVA_ERR_BAD of
 + * PAGE_OFFSET.
 + */
 +
 +#define KVM_HVA_ERR_BAD                       (-1UL)
 +#define KVM_HVA_ERR_RO_BAD            (-2UL)
 +
 +static inline bool kvm_is_error_hva(unsigned long addr)
 +{
 +      return IS_ERR_VALUE(addr);
 +}
 +
  extern atomic_t kvm_mips_instance;
  
  struct kvm_vm_stat {
-       u32 remote_tlb_flush;
+       ulong remote_tlb_flush;
  };
  
  struct kvm_vcpu_stat {
-       u32 wait_exits;
-       u32 cache_exits;
-       u32 signal_exits;
-       u32 int_exits;
-       u32 cop_unusable_exits;
-       u32 tlbmod_exits;
-       u32 tlbmiss_ld_exits;
-       u32 tlbmiss_st_exits;
-       u32 addrerr_st_exits;
-       u32 addrerr_ld_exits;
-       u32 syscall_exits;
-       u32 resvd_inst_exits;
-       u32 break_inst_exits;
-       u32 trap_inst_exits;
-       u32 msa_fpe_exits;
-       u32 fpe_exits;
-       u32 msa_disabled_exits;
-       u32 flush_dcache_exits;
-       u32 halt_successful_poll;
-       u32 halt_attempted_poll;
-       u32 halt_poll_invalid;
-       u32 halt_wakeup;
+       u64 wait_exits;
+       u64 cache_exits;
+       u64 signal_exits;
+       u64 int_exits;
+       u64 cop_unusable_exits;
+       u64 tlbmod_exits;
+       u64 tlbmiss_ld_exits;
+       u64 tlbmiss_st_exits;
+       u64 addrerr_st_exits;
+       u64 addrerr_ld_exits;
+       u64 syscall_exits;
+       u64 resvd_inst_exits;
+       u64 break_inst_exits;
+       u64 trap_inst_exits;
+       u64 msa_fpe_exits;
+       u64 fpe_exits;
+       u64 msa_disabled_exits;
+       u64 flush_dcache_exits;
+       u64 halt_successful_poll;
+       u64 halt_attempted_poll;
+       u64 halt_poll_invalid;
+       u64 halt_wakeup;
  };
  
  struct kvm_arch_memory_slot {
index c16d790808f18cae1248d444253f12bee3c7fdd7,9ce48ae550623227b73e8bfc54ad504e04359653..71dde6c9d46f25a0875df1428af43f47fc2e2362
@@@ -149,7 -149,7 +149,7 @@@ static void pnv_ioda_reserve_pe(struct 
  
  static struct pnv_ioda_pe *pnv_ioda_alloc_pe(struct pnv_phb *phb)
  {
 -      unsigned long pe = phb->ioda.total_pe_num - 1;
 +      long pe;
  
        for (pe = phb->ioda.total_pe_num - 1; pe >= 0; pe--) {
                if (!test_and_set_bit(pe, phb->ioda.pe_alloc))
  static void pnv_ioda_free_pe(struct pnv_ioda_pe *pe)
  {
        struct pnv_phb *phb = pe->phb;
 +      unsigned int pe_num = pe->pe_number;
  
        WARN_ON(pe->pdev);
  
        memset(pe, 0, sizeof(struct pnv_ioda_pe));
 -      clear_bit(pe->pe_number, phb->ioda.pe_alloc);
 +      clear_bit(pe_num, phb->ioda.pe_alloc);
  }
  
  /* The default M64 BAR is shared by all PEs */
@@@ -2711,15 -2710,21 +2711,21 @@@ static void pnv_pci_ioda2_setup_dma_pe(
  }
  
  #ifdef CONFIG_PCI_MSI
static void pnv_ioda2_msi_eoi(struct irq_data *d)
int64_t pnv_opal_pci_msi_eoi(struct irq_chip *chip, unsigned int hw_irq)
  {
-       unsigned int hw_irq = (unsigned int)irqd_to_hwirq(d);
-       struct irq_chip *chip = irq_data_get_irq_chip(d);
        struct pnv_phb *phb = container_of(chip, struct pnv_phb,
                                           ioda.irq_chip);
+       return opal_pci_msi_eoi(phb->opal_id, hw_irq);
+ }
+ static void pnv_ioda2_msi_eoi(struct irq_data *d)
+ {
        int64_t rc;
+       unsigned int hw_irq = (unsigned int)irqd_to_hwirq(d);
+       struct irq_chip *chip = irq_data_get_irq_chip(d);
  
-       rc = opal_pci_msi_eoi(phb->opal_id, hw_irq);
+       rc = pnv_opal_pci_msi_eoi(chip, hw_irq);
        WARN_ON_ONCE(rc);
  
        icp_native_eoi(d);
@@@ -2749,6 -2754,16 +2755,16 @@@ void pnv_set_msi_irq_chip(struct pnv_ph
        irq_set_chip(virq, &phb->ioda.irq_chip);
  }
  
+ /*
+  * Returns true iff chip is something that we could call
+  * pnv_opal_pci_msi_eoi for.
+  */
+ bool is_pnv_opal_msi(struct irq_chip *chip)
+ {
+       return chip->irq_eoi == pnv_ioda2_msi_eoi;
+ }
+ EXPORT_SYMBOL_GPL(is_pnv_opal_msi);
  static int pnv_pci_ioda_msi_setup(struct pnv_phb *phb, struct pci_dev *dev,
                                  unsigned int hwirq, unsigned int virq,
                                  unsigned int is_64, struct msi_msg *msg)
@@@ -3403,6 -3418,12 +3419,6 @@@ static void pnv_ioda_release_pe(struct 
        struct pnv_phb *phb = pe->phb;
        struct pnv_ioda_pe *slave, *tmp;
  
 -      /* Release slave PEs in compound PE */
 -      if (pe->flags & PNV_IODA_PE_MASTER) {
 -              list_for_each_entry_safe(slave, tmp, &pe->slaves, list)
 -                      pnv_ioda_release_pe(slave);
 -      }
 -
        list_del(&pe->list);
        switch (phb->type) {
        case PNV_PHB_IODA1:
  
        pnv_ioda_release_pe_seg(pe);
        pnv_ioda_deconfigure_pe(pe->phb, pe);
 +
 +      /* Release slave PEs in the compound PE */
 +      if (pe->flags & PNV_IODA_PE_MASTER) {
 +              list_for_each_entry_safe(slave, tmp, &pe->slaves, list) {
 +                      list_del(&slave->list);
 +                      pnv_ioda_free_pe(slave);
 +              }
 +      }
 +
        pnv_ioda_free_pe(pe);
  }
  
index 876173ca815fd4ee0d1053a25968db04372c749f,2bbe675c96b96aa99d9603c3009d9ff9047ce0d8..a41faf34b034c86a7e0bb214597ac30f400ddae4
@@@ -28,7 -28,7 +28,7 @@@
  
  #define KVM_S390_BSCA_CPU_SLOTS 64
  #define KVM_S390_ESCA_CPU_SLOTS 248
 -#define KVM_MAX_VCPUS KVM_S390_ESCA_CPU_SLOTS
 +#define KVM_MAX_VCPUS 255
  #define KVM_USER_MEM_SLOTS 32
  
  /*
@@@ -245,72 -245,72 +245,72 @@@ struct sie_page 
  } __packed;
  
  struct kvm_vcpu_stat {
-       u32 exit_userspace;
-       u32 exit_null;
-       u32 exit_external_request;
-       u32 exit_external_interrupt;
-       u32 exit_stop_request;
-       u32 exit_validity;
-       u32 exit_instruction;
-       u32 exit_pei;
-       u32 halt_successful_poll;
-       u32 halt_attempted_poll;
-       u32 halt_poll_invalid;
-       u32 halt_wakeup;
-       u32 instruction_lctl;
-       u32 instruction_lctlg;
-       u32 instruction_stctl;
-       u32 instruction_stctg;
-       u32 exit_program_interruption;
-       u32 exit_instr_and_program;
-       u32 exit_operation_exception;
-       u32 deliver_external_call;
-       u32 deliver_emergency_signal;
-       u32 deliver_service_signal;
-       u32 deliver_virtio_interrupt;
-       u32 deliver_stop_signal;
-       u32 deliver_prefix_signal;
-       u32 deliver_restart_signal;
-       u32 deliver_program_int;
-       u32 deliver_io_int;
-       u32 exit_wait_state;
-       u32 instruction_pfmf;
-       u32 instruction_stidp;
-       u32 instruction_spx;
-       u32 instruction_stpx;
-       u32 instruction_stap;
-       u32 instruction_storage_key;
-       u32 instruction_ipte_interlock;
-       u32 instruction_stsch;
-       u32 instruction_chsc;
-       u32 instruction_stsi;
-       u32 instruction_stfl;
-       u32 instruction_tprot;
-       u32 instruction_sie;
-       u32 instruction_essa;
-       u32 instruction_sthyi;
-       u32 instruction_sigp_sense;
-       u32 instruction_sigp_sense_running;
-       u32 instruction_sigp_external_call;
-       u32 instruction_sigp_emergency;
-       u32 instruction_sigp_cond_emergency;
-       u32 instruction_sigp_start;
-       u32 instruction_sigp_stop;
-       u32 instruction_sigp_stop_store_status;
-       u32 instruction_sigp_store_status;
-       u32 instruction_sigp_store_adtl_status;
-       u32 instruction_sigp_arch;
-       u32 instruction_sigp_prefix;
-       u32 instruction_sigp_restart;
-       u32 instruction_sigp_init_cpu_reset;
-       u32 instruction_sigp_cpu_reset;
-       u32 instruction_sigp_unknown;
-       u32 diagnose_10;
-       u32 diagnose_44;
-       u32 diagnose_9c;
-       u32 diagnose_258;
-       u32 diagnose_308;
-       u32 diagnose_500;
+       u64 exit_userspace;
+       u64 exit_null;
+       u64 exit_external_request;
+       u64 exit_external_interrupt;
+       u64 exit_stop_request;
+       u64 exit_validity;
+       u64 exit_instruction;
+       u64 exit_pei;
+       u64 halt_successful_poll;
+       u64 halt_attempted_poll;
+       u64 halt_poll_invalid;
+       u64 halt_wakeup;
+       u64 instruction_lctl;
+       u64 instruction_lctlg;
+       u64 instruction_stctl;
+       u64 instruction_stctg;
+       u64 exit_program_interruption;
+       u64 exit_instr_and_program;
+       u64 exit_operation_exception;
+       u64 deliver_external_call;
+       u64 deliver_emergency_signal;
+       u64 deliver_service_signal;
+       u64 deliver_virtio_interrupt;
+       u64 deliver_stop_signal;
+       u64 deliver_prefix_signal;
+       u64 deliver_restart_signal;
+       u64 deliver_program_int;
+       u64 deliver_io_int;
+       u64 exit_wait_state;
+       u64 instruction_pfmf;
+       u64 instruction_stidp;
+       u64 instruction_spx;
+       u64 instruction_stpx;
+       u64 instruction_stap;
+       u64 instruction_storage_key;
+       u64 instruction_ipte_interlock;
+       u64 instruction_stsch;
+       u64 instruction_chsc;
+       u64 instruction_stsi;
+       u64 instruction_stfl;
+       u64 instruction_tprot;
+       u64 instruction_sie;
+       u64 instruction_essa;
+       u64 instruction_sthyi;
+       u64 instruction_sigp_sense;
+       u64 instruction_sigp_sense_running;
+       u64 instruction_sigp_external_call;
+       u64 instruction_sigp_emergency;
+       u64 instruction_sigp_cond_emergency;
+       u64 instruction_sigp_start;
+       u64 instruction_sigp_stop;
+       u64 instruction_sigp_stop_store_status;
+       u64 instruction_sigp_store_status;
+       u64 instruction_sigp_store_adtl_status;
+       u64 instruction_sigp_arch;
+       u64 instruction_sigp_prefix;
+       u64 instruction_sigp_restart;
+       u64 instruction_sigp_init_cpu_reset;
+       u64 instruction_sigp_cpu_reset;
+       u64 instruction_sigp_unknown;
+       u64 diagnose_10;
+       u64 diagnose_44;
+       u64 diagnose_9c;
+       u64 diagnose_258;
+       u64 diagnose_308;
+       u64 diagnose_500;
  };
  
  #define PGM_OPERATION                 0x01
@@@ -577,7 -577,7 +577,7 @@@ struct kvm_vcpu_arch 
  };
  
  struct kvm_vm_stat {
-       u32 remote_tlb_flush;
+       ulong remote_tlb_flush;
  };
  
  struct kvm_arch_memory_slot {
index 4c738c206be3830b66d387b951e4feac861985ed,67c8f5268af5d38725ab9e0d0b3b829e24210c08..cd82bf74e7a551ad3954498b03af7e1cec8021b1
@@@ -781,56 -781,54 +781,56 @@@ struct kvm_arch 
        bool disabled_lapic_found;
  
        /* Struct members for AVIC */
 +      u32 avic_vm_id;
        u32 ldr_mode;
        struct page *avic_logical_id_table_page;
        struct page *avic_physical_id_table_page;
 +      struct hlist_node hnode;
  
        bool x2apic_format;
        bool x2apic_broadcast_quirk_disabled;
  };
  
  struct kvm_vm_stat {
-       u32 mmu_shadow_zapped;
-       u32 mmu_pte_write;
-       u32 mmu_pte_updated;
-       u32 mmu_pde_zapped;
-       u32 mmu_flooded;
-       u32 mmu_recycled;
-       u32 mmu_cache_miss;
-       u32 mmu_unsync;
-       u32 remote_tlb_flush;
-       u32 lpages;
+       ulong mmu_shadow_zapped;
+       ulong mmu_pte_write;
+       ulong mmu_pte_updated;
+       ulong mmu_pde_zapped;
+       ulong mmu_flooded;
+       ulong mmu_recycled;
+       ulong mmu_cache_miss;
+       ulong mmu_unsync;
+       ulong remote_tlb_flush;
+       ulong lpages;
  };
  
  struct kvm_vcpu_stat {
-       u32 pf_fixed;
-       u32 pf_guest;
-       u32 tlb_flush;
-       u32 invlpg;
-       u32 exits;
-       u32 io_exits;
-       u32 mmio_exits;
-       u32 signal_exits;
-       u32 irq_window_exits;
-       u32 nmi_window_exits;
-       u32 halt_exits;
-       u32 halt_successful_poll;
-       u32 halt_attempted_poll;
-       u32 halt_poll_invalid;
-       u32 halt_wakeup;
-       u32 request_irq_exits;
-       u32 irq_exits;
-       u32 host_state_reload;
-       u32 efer_reload;
-       u32 fpu_reload;
-       u32 insn_emulation;
-       u32 insn_emulation_fail;
-       u32 hypercalls;
-       u32 irq_injections;
-       u32 nmi_injections;
+       u64 pf_fixed;
+       u64 pf_guest;
+       u64 tlb_flush;
+       u64 invlpg;
+       u64 exits;
+       u64 io_exits;
+       u64 mmio_exits;
+       u64 signal_exits;
+       u64 irq_window_exits;
+       u64 nmi_window_exits;
+       u64 halt_exits;
+       u64 halt_successful_poll;
+       u64 halt_attempted_poll;
+       u64 halt_poll_invalid;
+       u64 halt_wakeup;
+       u64 request_irq_exits;
+       u64 irq_exits;
+       u64 host_state_reload;
+       u64 efer_reload;
+       u64 fpu_reload;
+       u64 insn_emulation;
+       u64 insn_emulation_fail;
+       u64 hypercalls;
+       u64 irq_injections;
+       u64 nmi_injections;
  };
  
  struct x86_instruction_info;
diff --combined virt/kvm/kvm_main.c
index b3fa12ce116687b1b7ae8e468d5c71637e26ca3e,4171ef3265437ab246ab64c1fb4fb6c0f2cbcc01..a00f8e4045cf96973986ed680bebd8f164ad04a6
@@@ -3619,7 -3619,7 +3619,7 @@@ static int vm_stat_get_per_vm(void *dat
  {
        struct kvm_stat_data *stat_data = (struct kvm_stat_data *)data;
  
-       *val = *(u32 *)((void *)stat_data->kvm + stat_data->offset);
+       *val = *(ulong *)((void *)stat_data->kvm + stat_data->offset);
  
        return 0;
  }
@@@ -3649,7 -3649,7 +3649,7 @@@ static int vcpu_stat_get_per_vm(void *d
        *val = 0;
  
        kvm_for_each_vcpu(i, vcpu, stat_data->kvm)
-               *val += *(u32 *)((void *)vcpu + stat_data->offset);
+               *val += *(u64 *)((void *)vcpu + stat_data->offset);
  
        return 0;
  }
@@@ -3807,7 -3807,12 +3807,7 @@@ int kvm_init(void *opaque, unsigned vcp
         * kvm_arch_init makes sure there's at most one caller
         * for architectures that support multiple implementations,
         * like intel and amd on x86.
 -       * kvm_arch_init must be called before kvm_irqfd_init to avoid creating
 -       * conflicts in case kvm is already setup for another implementation.
         */
 -      r = kvm_irqfd_init();
 -      if (r)
 -              goto out_irqfd;
  
        if (!zalloc_cpumask_var(&cpus_hardware_enabled, GFP_KERNEL)) {
                r = -ENOMEM;
@@@ -3889,6 -3894,7 +3889,6 @@@ out_free_0a
        free_cpumask_var(cpus_hardware_enabled);
  out_free_0:
        kvm_irqfd_exit();
 -out_irqfd:
        kvm_arch_exit();
  out_fail:
        return r;
This page took 0.04091 seconds and 5 git commands to generate.