diff --git a/arch/s390/boot/text_dma.S b/arch/s390/boot/text_dma.S
index ea93314f449760ba22b0f4cb480148611bd603ef..9715715c4c28d2d976b404167ed1b35dfc823ab1 100644
--- a/arch/s390/boot/text_dma.S
+++ b/arch/s390/boot/text_dma.S
@@ -9,6 +9,16 @@
 #include <asm/errno.h>
 #include <asm/sigp.h>
 
+#ifdef CC_USING_EXPOLINE
+	.pushsection .dma.text.__s390_indirect_jump_r14,"axG"
+__dma__s390_indirect_jump_r14:
+	larl	%r1,0f
+	ex	0,0(%r1)
+	j	.
+0:	br	%r14
+	.popsection
+#endif
+
 	.section .dma.text,"ax"
 /*
  * Simplified version of expoline thunk. The normal thunks can not be used here,
@@ -17,10 +27,11 @@
  * affects a few functions that are not performance-relevant.
  */
 	.macro BR_EX_DMA_r14
-	larl	%r1,0f
-	ex	0,0(%r1)
-	j	.
-0:	br	%r14
+#ifdef CC_USING_EXPOLINE
+	jg	__dma__s390_indirect_jump_r14
+#else
+	br	%r14
+#endif
 	.endm
 
 /*