diff --git a/arch/s390/include/asm/pci_insn.h b/arch/s390/include/asm/pci_insn.h
index c6649e7..e6a2bdd 100644
--- a/arch/s390/include/asm/pci_insn.h
+++ b/arch/s390/include/asm/pci_insn.h
@@ -79,11 +79,11 @@
 } __packed;
 
 
-int mpcifc_instr(u64 req, struct zpci_fib *fib);
-int rpcit_instr(u64 fn, u64 addr, u64 range);
-void sic_instr(u16 ctl, char *unused, u8 isc);
-int pcilg_instr(u64 *data, u64 req, u64 offset);
-int pcistg_instr(u64 data, u64 req, u64 offset);
-int pcistb_instr(const u64 *data, u64 req, u64 offset);
+int s390pci_mod_fc(u64 req, struct zpci_fib *fib);
+int s390pci_refresh_trans(u64 fn, u64 addr, u64 range);
+int s390pci_load(u64 *data, u64 req, u64 offset);
+int s390pci_store(u64 data, u64 req, u64 offset);
+int s390pci_store_block(const u64 *data, u64 req, u64 offset);
+void set_irq_ctrl(u16 ctl, char *unused, u8 isc);
 
 #endif
diff --git a/arch/s390/include/asm/pci_io.h b/arch/s390/include/asm/pci_io.h
index 5fd81f3..a312c7e 100644
--- a/arch/s390/include/asm/pci_io.h
+++ b/arch/s390/include/asm/pci_io.h
@@ -36,7 +36,7 @@
 	u64 data;								\
 	int rc;									\
 										\
-	rc = pcilg_instr(&data, req, ZPCI_OFFSET(addr));			\
+	rc = s390pci_load(&data, req, ZPCI_OFFSET(addr));			\
 	if (rc)									\
 		data = -1ULL;							\
 	return (RETTYPE) data;							\
@@ -50,7 +50,7 @@
 	u64 req = ZPCI_CREATE_REQ(entry->fh, entry->bar, LENGTH);		\
 	u64 data = (VALTYPE) val;						\
 										\
-	pcistg_instr(data, req, ZPCI_OFFSET(addr));				\
+	s390pci_store(data, req, ZPCI_OFFSET(addr));				\
 }
 
 zpci_read(8, u64)
@@ -83,7 +83,7 @@
 		val = 0;		/* let FW report error */
 		break;
 	}
-	return pcistg_instr(val, req, offset);
+	return s390pci_store(val, req, offset);
 }
 
 static inline int zpci_read_single(u64 req, u64 *dst, u64 offset, u8 len)
@@ -91,7 +91,7 @@
 	u64 data;
 	u8 cc;
 
-	cc = pcilg_instr(&data,	 req, offset);
+	cc = s390pci_load(&data, req, offset);
 	switch (len) {
 	case 1:
 		*((u8 *) dst) = (u8) data;
@@ -111,7 +111,7 @@
 
 static inline int zpci_write_block(u64 req, const u64 *data, u64 offset)
 {
-	return pcistb_instr(data, req, offset);
+	return s390pci_store_block(data, req, offset);
 }
 
 static inline u8 zpci_get_max_write_size(u64 src, u64 dst, int len, int max)
diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c
index 01478f6..2b21749 100644
--- a/arch/s390/pci/pci.c
+++ b/arch/s390/pci/pci.c
@@ -176,7 +176,7 @@
 	fib->aisb = (u64) bucket->aisb + aisb / 8;
 	fib->aisbo = aisb & ZPCI_MSI_MASK;
 
-	rc = mpcifc_instr(req, fib);
+	rc = s390pci_mod_fc(req, fib);
 	pr_debug("%s mpcifc returned noi: %d\n", __func__, fib->noi);
 
 	free_page((unsigned long) fib);
@@ -206,7 +206,7 @@
 	fib->iota = args->iota;
 	fib->fmb_addr = args->fmb_addr;
 
-	rc = mpcifc_instr(req, fib);
+	rc = s390pci_mod_fc(req, fib);
 	free_page((unsigned long) fib);
 	return rc;
 }
@@ -280,7 +280,7 @@
 	u64 data;
 	int rc;
 
-	rc = pcilg_instr(&data, req, offset);
+	rc = s390pci_load(&data, req, offset);
 	data = data << ((8 - len) * 8);
 	data = le64_to_cpu(data);
 	if (!rc)
@@ -298,7 +298,7 @@
 
 	data = cpu_to_le64(data);
 	data = data >> ((8 - len) * 8);
-	rc = pcistg_instr(data, req, offset);
+	rc = s390pci_store(data, req, offset);
 	return rc;
 }
 
@@ -470,7 +470,7 @@
 	}
 
 	/* enable interrupts again */
-	sic_instr(SIC_IRQ_MODE_SINGLE, NULL, PCI_ISC);
+	set_irq_ctrl(SIC_IRQ_MODE_SINGLE, NULL, PCI_ISC);
 
 	/* check again to not lose initiative */
 	rmb();
@@ -785,7 +785,7 @@
 	spin_lock_init(&bucket->lock);
 	/* set summary to 1 to be called every time for the ISC */
 	*zpci_irq_si = 1;
-	sic_instr(SIC_IRQ_MODE_SINGLE, NULL, PCI_ISC);
+	set_irq_ctrl(SIC_IRQ_MODE_SINGLE, NULL, PCI_ISC);
 	return 0;
 
 out_ai:
diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c
index a547419..60e4999 100644
--- a/arch/s390/pci/pci_dma.c
+++ b/arch/s390/pci/pci_dma.c
@@ -169,8 +169,9 @@
 		 * needs to be redone!
 		 */
 		goto no_refresh;
-	rc = rpcit_instr((u64) zdev->fh << 32, start_dma_addr,
-			  nr_pages * PAGE_SIZE);
+
+	rc = s390pci_refresh_trans((u64) zdev->fh << 32, start_dma_addr,
+				   nr_pages * PAGE_SIZE);
 
 no_refresh:
 	spin_unlock_irqrestore(&zdev->dma_table_lock, irq_flags);
diff --git a/arch/s390/pci/pci_insn.c b/arch/s390/pci/pci_insn.c
index c559625..d9b573b 100644
--- a/arch/s390/pci/pci_insn.c
+++ b/arch/s390/pci/pci_insn.c
@@ -26,7 +26,7 @@
 	return cc;
 }
 
-int mpcifc_instr(u64 req, struct zpci_fib *fib)
+int s390pci_mod_fc(u64 req, struct zpci_fib *fib)
 {
 	u8 cc, status;
 
@@ -60,7 +60,7 @@
 	return cc;
 }
 
-int rpcit_instr(u64 fn, u64 addr, u64 range)
+int s390pci_refresh_trans(u64 fn, u64 addr, u64 range)
 {
 	u8 cc, status;
 
@@ -77,7 +77,7 @@
 }
 
 /* Set Interruption Controls */
-void sic_instr(u16 ctl, char *unused, u8 isc)
+void set_irq_ctrl(u16 ctl, char *unused, u8 isc)
 {
 	asm volatile (
 		"	.insn	rsy,0xeb00000000d1,%[ctl],%[isc],%[u]\n"
@@ -104,7 +104,7 @@
 	return cc;
 }
 
-int pcilg_instr(u64 *data, u64 req, u64 offset)
+int s390pci_load(u64 *data, u64 req, u64 offset)
 {
 	u8 cc, status;
 
@@ -123,7 +123,7 @@
 	}
 	return (cc) ? -EIO : 0;
 }
-EXPORT_SYMBOL_GPL(pcilg_instr);
+EXPORT_SYMBOL_GPL(s390pci_load);
 
 /* PCI Store */
 static inline u8 __pcistg(u64 data, u64 req, u64 offset, u8 *status)
@@ -143,7 +143,7 @@
 	return cc;
 }
 
-int pcistg_instr(u64 data, u64 req, u64 offset)
+int s390pci_store(u64 data, u64 req, u64 offset)
 {
 	u8 cc, status;
 
@@ -158,7 +158,7 @@
 			__func__, cc, status, req, offset);
 	return (cc) ? -EIO : 0;
 }
-EXPORT_SYMBOL_GPL(pcistg_instr);
+EXPORT_SYMBOL_GPL(s390pci_store);
 
 /* PCI Store Block */
 static inline u8 __pcistb(const u64 *data, u64 req, u64 offset, u8 *status)
@@ -176,7 +176,7 @@
 	return cc;
 }
 
-int pcistb_instr(const u64 *data, u64 req, u64 offset)
+int s390pci_store_block(const u64 *data, u64 req, u64 offset)
 {
 	u8 cc, status;
 
@@ -191,4 +191,4 @@
 			    __func__, cc, status, req, offset);
 	return (cc) ? -EIO : 0;
 }
-EXPORT_SYMBOL_GPL(pcistb_instr);
+EXPORT_SYMBOL_GPL(s390pci_store_block);
