@ -46,6 +46,9 @@ debug_info_t *cio_debug_msg_id;
debug_info_t * cio_debug_trace_id ;
debug_info_t * cio_debug_crw_id ;
DEFINE_PER_CPU_ALIGNED ( struct irb , cio_irb ) ;
EXPORT_PER_CPU_SYMBOL ( cio_irb ) ;
/*
* Function : cio_debug_init
* Initializes three debug logs for common I / O :
@ -560,7 +563,7 @@ static irqreturn_t do_cio_interrupt(int irq, void *dummy)
__this_cpu_write ( s390_idle . nohz_delay , 1 ) ;
tpi_info = ( struct tpi_info * ) & get_irq_regs ( ) - > int_code ;
irb = ( struct irb * ) & S390_lowcore . irb ;
irb = & __get_cpu_var ( cio_irb ) ;
sch = ( struct subchannel * ) ( unsigned long ) tpi_info - > intparm ;
if ( ! sch ) {
/* Clear pending interrupt condition. */
@ -609,7 +612,7 @@ void cio_tsch(struct subchannel *sch)
struct irb * irb ;
int irq_context ;
irb = ( struct irb * ) & S390_lowcore . irb ;
irb = & __get_cpu_var ( cio_irb ) ;
/* Store interrupt response block to lowcore. */
if ( tsch ( sch - > schid , irb ) ! = 0 )
/* Not status pending or not operational. */
@ -746,7 +749,7 @@ __clear_io_subchannel_easy(struct subchannel_id schid)
struct tpi_info ti ;
if ( tpi ( & ti ) ) {
tsch ( ti . schid , ( struct irb * ) & S390_lowcore . irb ) ;
tsch ( ti . schid , & __get_cpu_var ( cio_irb ) ) ;
if ( schid_equal ( & ti . schid , & schid ) )
return 0 ;
}