s390/lowcore: replace lowcore irb array with a per-cpu variable
Remove the 96-byte irb array from the lowcore and create a per-cpu variable instead. That way we will pick up any change in the definition of the struct irb automatically. Acked-By: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user