static void process_gib_alert_list(void)
 {
        struct kvm_s390_gisa_interrupt *gi;
+       u32 final, gisa_phys, origin = 0UL;
        struct kvm_s390_gisa *gisa;
        struct kvm *kvm;
-       u32 final, origin = 0UL;
 
        do {
                /*
                 * interruptions asap.
                 */
                while (origin & GISA_ADDR_MASK) {
-                       gisa = (struct kvm_s390_gisa *)(u64)origin;
+                       gisa_phys = origin;
+                       gisa = phys_to_virt(gisa_phys);
                        origin = gisa->next_alert;
-                       gisa->next_alert = (u32)(u64)gisa;
+                       gisa->next_alert = gisa_phys;
                        kvm = container_of(gisa, struct sie_page2, gisa)->kvm;
                        gi = &kvm->arch.gisa_int;
                        if (hrtimer_active(&gi->timer))
 
 int kvm_s390_gib_init(u8 nisc)
 {
+       u32 gib_origin;
        int rc = 0;
 
        if (!css_general_characteristics.aiv) {
        }
 
        gib->nisc = nisc;
-       if (chsc_sgib((u32)(u64)gib)) {
+       gib_origin = virt_to_phys(gib);
+       if (chsc_sgib(gib_origin)) {
                pr_err("Associating the GIB with the AIV facility failed\n");
                free_page((unsigned long)gib);
                gib = NULL;