#include <asm/tlbflush.h>
  #include <asm/kvm_ppc.h>
  #include <asm/kvm_book3s.h>
- #include <asm/mmu-hash64.h>
+ #include <asm/book3s/64/mmu-hash.h>
 +#include <asm/mmu_context.h>
  #include <asm/hvcall.h>
  #include <asm/synch.h>
  #include <asm/ppc-opcode.h>
 
        return device_str_attr_create(name, nl, nonce, desc, dl);
  }
  
- static ssize_t event_data_to_attrs(unsigned ix, struct attribute **attrs,
+ static int event_data_to_attrs(unsigned ix, struct attribute **attrs,
                                   struct hv_24x7_event_data *event, int nonce)
  {
-       unsigned i;
- 
-       switch (event->domain) {
-       case HV_PERF_DOMAIN_PHYS_CHIP:
-               *attrs = event_to_attr(ix, event, event->domain, nonce);
-               return 1;
-       case HV_PERF_DOMAIN_PHYS_CORE:
-               for (i = 0; i < ARRAY_SIZE(core_domains); i++) {
-                       attrs[i] = event_to_attr(ix, event, core_domains[i],
-                                               nonce);
-                       if (!attrs[i]) {
-                               pr_warn("catalog event %u: individual attr %u "
-                                       "creation failure\n", ix, i);
-                               for (; i; i--)
-                                       device_str_attr_destroy(attrs[i - 1]);
-                               return -1;
-                       }
-               }
-               return i;
-       default:
-               pr_warn("catalog event %u: domain %u is not allowed in the "
-                               "catalog\n", ix, event->domain);
+       *attrs = event_to_attr(ix, event, event->domain, nonce);
+       if (!*attrs)
                return -1;
-       }
- }
  
- static size_t event_to_attr_ct(struct hv_24x7_event_data *event)
- {
-       switch (event->domain) {
-       case HV_PERF_DOMAIN_PHYS_CHIP:
-               return 1;
-       case HV_PERF_DOMAIN_PHYS_CORE:
-               return ARRAY_SIZE(core_domains);
-       default:
-               return 0;
-       }
+       return 0;
  }
  
 -static unsigned long vmalloc_to_phys(void *v)
 -{
 -      struct page *p = vmalloc_to_page(v);
 -
 -      BUG_ON(!p);
 -      return page_to_phys(p) + offset_in_page(v);
 -}
 -
  /* */
  struct event_uniq {
        struct rb_node node;
 
                               struct bin_attribute *bin_attr, char *buf,
                               loff_t off, size_t count)
  {
 -      struct cxl_afu *afu = to_cxl_afu(container_of(kobj,
 -                                                    struct device, kobj));
 +      struct cxl_afu *afu = to_cxl_afu(kobj_to_dev(kobj));
  
-       return cxl_afu_read_err_buffer(afu, buf, off, count);
+       return cxl_ops->afu_read_err_buffer(afu, buf, off, count);
  }
  
  static struct device_attribute afu_attrs[] = {
                               loff_t off, size_t count)
  {
        struct afu_config_record *cr = to_cr(kobj);
 -      struct cxl_afu *afu = to_cxl_afu(container_of(kobj->parent, struct device, kobj));
 +      struct cxl_afu *afu = to_cxl_afu(kobj_to_dev(kobj->parent));
  
-       u64 i, j, val;
+       u64 i, j, val, rc;
  
        for (i = 0; i < count;) {
-               val = cxl_afu_cr_read64(afu, cr->cr, off & ~0x7);
+               rc = cxl_ops->afu_cr_read64(afu, cr->cr, off & ~0x7, &val);
+               if (rc)
+                       val = ~0ULL;
                for (j = off & 0x7; j < 8 && i < count; i++, j++, off++)
                        buf[i] = (val >> (j * 8)) & 0xff;
        }
 
                pmd_t *____pmd = (__pmd);                               \
                if (pmd_trans_huge(*____pmd)                            \
                                        || pmd_devmap(*____pmd))        \
 -                      __split_huge_pmd(__vma, __pmd, __address);      \
 +                      __split_huge_pmd(__vma, __pmd, __address,       \
 +                                              false);                 \
        }  while (0)
  
- #if HPAGE_PMD_ORDER >= MAX_ORDER
- #error "hugepages can't be allocated by the buddy allocator"
- #endif
 +
 +void split_huge_pmd_address(struct vm_area_struct *vma, unsigned long address,
 +              bool freeze, struct page *page);
 +
  extern int hugepage_madvise(struct vm_area_struct *vma,
                            unsigned long *vm_flags, int advice);
  extern void vma_adjust_trans_huge(struct vm_area_struct *vma,