int i;
 
                        /* skip iucv_array lying in the headroom */
-                       iba[0].address = (u32)(addr_t)skb->data;
+                       iba[0].address = (u32)virt_to_phys(skb->data);
                        iba[0].length = (u32)skb_headlen(skb);
                        for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
                                skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
 
-                               iba[i + 1].address =
-                                       (u32)(addr_t)skb_frag_address(frag);
+                               iba[i + 1].address = (u32)virt_to_phys(skb_frag_address(frag));
                                iba[i + 1].length = (u32)skb_frag_size(frag);
                        }
                        err = pr_iucv->message_send(iucv->path, &txmsg,
                        struct iucv_array *iba = (struct iucv_array *)skb->head;
                        int i;
 
-                       iba[0].address = (u32)(addr_t)skb->data;
+                       iba[0].address = (u32)virt_to_phys(skb->data);
                        iba[0].length = (u32)skb_headlen(skb);
                        for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
                                skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
 
-                               iba[i + 1].address =
-                                       (u32)(addr_t)skb_frag_address(frag);
+                               iba[i + 1].address = (u32)virt_to_phys(skb_frag_address(frag));
                                iba[i + 1].length = (u32)skb_frag_size(frag);
                        }
                        rc = pr_iucv->message_receive(path, msg,