{
        ulong mp_pa = vcpu->arch.magic_page_pa & KVM_PAM & PAGE_MASK;
        struct kvmppc_pte pte;
-       int r;
+       int r = -EINVAL;
 
        vcpu->stat.st++;
 
+       if (vcpu->kvm->arch.kvm_ops && vcpu->kvm->arch.kvm_ops->store_to_eaddr)
+               r = vcpu->kvm->arch.kvm_ops->store_to_eaddr(vcpu, eaddr, ptr,
+                                                           size);
+
+       if ((!r) || (r == -EAGAIN))
+               return r;
+
        r = kvmppc_xlate(vcpu, *eaddr, data ? XLATE_DATA : XLATE_INST,
                         XLATE_WRITE, &pte);
        if (r < 0)
 {
        ulong mp_pa = vcpu->arch.magic_page_pa & KVM_PAM & PAGE_MASK;
        struct kvmppc_pte pte;
-       int rc;
+       int rc = -EINVAL;
 
        vcpu->stat.ld++;
 
+       if (vcpu->kvm->arch.kvm_ops && vcpu->kvm->arch.kvm_ops->load_from_eaddr)
+               rc = vcpu->kvm->arch.kvm_ops->load_from_eaddr(vcpu, eaddr, ptr,
+                                                             size);
+
+       if ((!rc) || (rc == -EAGAIN))
+               return rc;
+
        rc = kvmppc_xlate(vcpu, *eaddr, data ? XLATE_DATA : XLATE_INST,
                          XLATE_READ, &pte);
        if (rc)