Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ce91ddc4 authored by Alexander Graf's avatar Alexander Graf
Browse files

KVM: PPC: Remove DCR handling



DCR handling was only needed for 440 KVM. Since we removed it, we can also
remove handling of DCR accesses.

Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
parent 8de12015
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -2613,8 +2613,8 @@ The 'data' member contains, in its first 'len' bytes, the value as it would
appear if the VCPU performed a load or store of the appropriate width directly
appear if the VCPU performed a load or store of the appropriate width directly
to the byte array.
to the byte array.


NOTE: For KVM_EXIT_IO, KVM_EXIT_MMIO, KVM_EXIT_OSI, KVM_EXIT_DCR,
NOTE: For KVM_EXIT_IO, KVM_EXIT_MMIO, KVM_EXIT_OSI KVM_EXIT_PAPR and
      KVM_EXIT_PAPR and KVM_EXIT_EPR the corresponding
      KVM_EXIT_EPR the corresponding
operations are complete (and guest state is consistent) only after userspace
operations are complete (and guest state is consistent) only after userspace
has re-entered the kernel with KVM_RUN.  The kernel side will first finish
has re-entered the kernel with KVM_RUN.  The kernel side will first finish
incomplete operations and then check for pending signals.  Userspace
incomplete operations and then check for pending signals.  Userspace
@@ -2685,7 +2685,7 @@ Principles of Operation Book in the Chapter for Dynamic Address Translation
			__u8  is_write;
			__u8  is_write;
		} dcr;
		} dcr;


powerpc specific.
Deprecated - was used for 440 KVM.


		/* KVM_EXIT_OSI */
		/* KVM_EXIT_OSI */
		struct {
		struct {
+0 −4
Original line number Original line Diff line number Diff line
@@ -94,7 +94,6 @@ struct kvm_vm_stat {
struct kvm_vcpu_stat {
struct kvm_vcpu_stat {
	u32 sum_exits;
	u32 sum_exits;
	u32 mmio_exits;
	u32 mmio_exits;
	u32 dcr_exits;
	u32 signal_exits;
	u32 signal_exits;
	u32 light_exits;
	u32 light_exits;
	/* Account for special types of light exits: */
	/* Account for special types of light exits: */
@@ -126,7 +125,6 @@ struct kvm_vcpu_stat {


enum kvm_exit_types {
enum kvm_exit_types {
	MMIO_EXITS,
	MMIO_EXITS,
	DCR_EXITS,
	SIGNAL_EXITS,
	SIGNAL_EXITS,
	ITLB_REAL_MISS_EXITS,
	ITLB_REAL_MISS_EXITS,
	ITLB_VIRT_MISS_EXITS,
	ITLB_VIRT_MISS_EXITS,
@@ -601,8 +599,6 @@ struct kvm_vcpu_arch {
	u8 io_gpr; /* GPR used as IO source/target */
	u8 io_gpr; /* GPR used as IO source/target */
	u8 mmio_is_bigendian;
	u8 mmio_is_bigendian;
	u8 mmio_sign_extend;
	u8 mmio_sign_extend;
	u8 dcr_needed;
	u8 dcr_is_write;
	u8 osi_needed;
	u8 osi_needed;
	u8 osi_enabled;
	u8 osi_enabled;
	u8 papr_enabled;
	u8 papr_enabled;
+0 −1
Original line number Original line Diff line number Diff line
@@ -41,7 +41,6 @@
enum emulation_result {
enum emulation_result {
	EMULATE_DONE,         /* no further processing */
	EMULATE_DONE,         /* no further processing */
	EMULATE_DO_MMIO,      /* kvm_run filled with MMIO request */
	EMULATE_DO_MMIO,      /* kvm_run filled with MMIO request */
	EMULATE_DO_DCR,       /* kvm_run filled with DCR request */
	EMULATE_FAIL,         /* can't emulate this instruction */
	EMULATE_FAIL,         /* can't emulate this instruction */
	EMULATE_AGAIN,        /* something went wrong. go again */
	EMULATE_AGAIN,        /* something went wrong. go again */
	EMULATE_EXIT_USER,    /* emulation requires exit to user-space */
	EMULATE_EXIT_USER,    /* emulation requires exit to user-space */
+0 −5
Original line number Original line Diff line number Diff line
@@ -51,7 +51,6 @@ unsigned long kvmppc_booke_handlers;


struct kvm_stats_debugfs_item debugfs_entries[] = {
struct kvm_stats_debugfs_item debugfs_entries[] = {
	{ "mmio",       VCPU_STAT(mmio_exits) },
	{ "mmio",       VCPU_STAT(mmio_exits) },
	{ "dcr",        VCPU_STAT(dcr_exits) },
	{ "sig",        VCPU_STAT(signal_exits) },
	{ "sig",        VCPU_STAT(signal_exits) },
	{ "itlb_r",     VCPU_STAT(itlb_real_miss_exits) },
	{ "itlb_r",     VCPU_STAT(itlb_real_miss_exits) },
	{ "itlb_v",     VCPU_STAT(itlb_virt_miss_exits) },
	{ "itlb_v",     VCPU_STAT(itlb_virt_miss_exits) },
@@ -709,10 +708,6 @@ static int emulation_exit(struct kvm_run *run, struct kvm_vcpu *vcpu)
	case EMULATE_AGAIN:
	case EMULATE_AGAIN:
		return RESUME_GUEST;
		return RESUME_GUEST;


	case EMULATE_DO_DCR:
		run->exit_reason = KVM_EXIT_DCR;
		return RESUME_HOST;

	case EMULATE_FAIL:
	case EMULATE_FAIL:
		printk(KERN_CRIT "%s: emulation at %lx failed (%08x)\n",
		printk(KERN_CRIT "%s: emulation at %lx failed (%08x)\n",
		       __func__, vcpu->arch.pc, vcpu->arch.last_inst);
		       __func__, vcpu->arch.pc, vcpu->arch.last_inst);
+0 −10
Original line number Original line Diff line number Diff line
@@ -743,12 +743,6 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
#endif
#endif
}
}


static void kvmppc_complete_dcr_load(struct kvm_vcpu *vcpu,
                                     struct kvm_run *run)
{
	kvmppc_set_gpr(vcpu, vcpu->arch.io_gpr, run->dcr.data);
}

static void kvmppc_complete_mmio_load(struct kvm_vcpu *vcpu,
static void kvmppc_complete_mmio_load(struct kvm_vcpu *vcpu,
                                      struct kvm_run *run)
                                      struct kvm_run *run)
{
{
@@ -945,10 +939,6 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
		if (!vcpu->mmio_is_write)
		if (!vcpu->mmio_is_write)
			kvmppc_complete_mmio_load(vcpu, run);
			kvmppc_complete_mmio_load(vcpu, run);
		vcpu->mmio_needed = 0;
		vcpu->mmio_needed = 0;
	} else if (vcpu->arch.dcr_needed) {
		if (!vcpu->arch.dcr_is_write)
			kvmppc_complete_dcr_load(vcpu, run);
		vcpu->arch.dcr_needed = 0;
	} else if (vcpu->arch.osi_needed) {
	} else if (vcpu->arch.osi_needed) {
		u64 *gprs = run->osi.gprs;
		u64 *gprs = run->osi.gprs;
		int i;
		int i;
Loading