Hi all,

Today's linux-next merge of the kvm tree got conflicts in
arch/s390/include/asm/irq.h and arch/s390/kernel/irq.c between commit
bfb048f594d5 ("s390/irq: remove split irq fields from /proc/stat") from
the s390 tree and commit 7e64e0597fd6 ("KVM: s390: Add a channel I/O
based virtio transport driver") from the kvm tree.

I fixed it up (I think - see below) including the following merge fix
patch and can carry the fix as necessary (more action may be required).

From: Stephen Rothwell <s...@canb.auug.org.au>
Date: Thu, 3 Jan 2013 12:04:39 +1100
Subject: [PATCH] KVM: s390: fix for IOINT_VIR name change

Signed-off-by: Stephen Rothwell <s...@canb.auug.org.au>
---
 drivers/s390/kvm/virtio_ccw.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/s390/kvm/virtio_ccw.c b/drivers/s390/kvm/virtio_ccw.c
index 1a5aff3..f94a0b1 100644
--- a/drivers/s390/kvm/virtio_ccw.c
+++ b/drivers/s390/kvm/virtio_ccw.c
@@ -745,7 +745,7 @@ static struct ccw_driver virtio_ccw_driver = {
        .set_offline = virtio_ccw_offline,
        .set_online = virtio_ccw_online,
        .notify = virtio_ccw_cio_notify,
-       .int_class = IOINT_VIR,
+       .int_class = IRQIO_VIR,
 };
 
 static int __init pure_hex(char **cp, unsigned int *val, int min_digit,
-- 
1.7.10.280.gaa39

-- 
Cheers,
Stephen Rothwell                    s...@canb.auug.org.au

diff --cc arch/s390/include/asm/irq.h
index 7def773,aa6d0d7..0000000
--- a/arch/s390/include/asm/irq.h
+++ b/arch/s390/include/asm/irq.h
@@@ -2,61 -2,44 +2,62 @@@
  #define _ASM_IRQ_H
  
  #include <linux/hardirq.h>
 +#include <linux/percpu.h>
 +#include <linux/cache.h>
  #include <linux/types.h>
  
 -enum interruption_class {
 +enum interruption_main_class {
        EXTERNAL_INTERRUPT,
        IO_INTERRUPT,
 -      EXTINT_CLK,
 -      EXTINT_EXC,
 -      EXTINT_EMS,
 -      EXTINT_TMR,
 -      EXTINT_TLA,
 -      EXTINT_PFL,
 -      EXTINT_DSD,
 -      EXTINT_VRT,
 -      EXTINT_SCP,
 -      EXTINT_IUC,
 -      EXTINT_CMS,
 -      EXTINT_CMC,
 -      EXTINT_CMR,
 -      IOINT_CIO,
 -      IOINT_QAI,
 -      IOINT_DAS,
 -      IOINT_C15,
 -      IOINT_C70,
 -      IOINT_TAP,
 -      IOINT_VMR,
 -      IOINT_LCS,
 -      IOINT_CLW,
 -      IOINT_CTC,
 -      IOINT_APB,
 -      IOINT_ADM,
 -      IOINT_CSC,
 -      IOINT_PCI,
 -      IOINT_MSI,
 -      IOINT_VIR,
 +      NR_IRQS
 +};
 +
 +enum interruption_class {
 +      IRQEXT_CLK,
 +      IRQEXT_EXC,
 +      IRQEXT_EMS,
 +      IRQEXT_TMR,
 +      IRQEXT_TLA,
 +      IRQEXT_PFL,
 +      IRQEXT_DSD,
 +      IRQEXT_VRT,
 +      IRQEXT_SCP,
 +      IRQEXT_IUC,
 +      IRQEXT_CMS,
 +      IRQEXT_CMC,
 +      IRQEXT_CMR,
 +      IRQIO_CIO,
 +      IRQIO_QAI,
 +      IRQIO_DAS,
 +      IRQIO_C15,
 +      IRQIO_C70,
 +      IRQIO_TAP,
 +      IRQIO_VMR,
 +      IRQIO_LCS,
 +      IRQIO_CLW,
 +      IRQIO_CTC,
 +      IRQIO_APB,
 +      IRQIO_ADM,
 +      IRQIO_CSC,
 +      IRQIO_PCI,
 +      IRQIO_MSI,
++      IRQIO_VIR,
        NMI_NMI,
 -      NR_IRQS,
 +      CPU_RST,
 +      NR_ARCH_IRQS
  };
  
 +struct irq_stat {
 +      unsigned int irqs[NR_ARCH_IRQS];
 +};
 +
 +DECLARE_PER_CPU_SHARED_ALIGNED(struct irq_stat, irq_stat);
 +
 +static __always_inline void inc_irq_stat(enum interruption_class irq)
 +{
 +      __get_cpu_var(irq_stat).irqs[irq]++;
 +}
 +
  struct ext_code {
        unsigned short subcode;
        unsigned short code;
diff --cc arch/s390/kernel/irq.c
index 9df824e,a9806ea..0000000
--- a/arch/s390/kernel/irq.c
+++ b/arch/s390/kernel/irq.c
@@@ -32,57 -29,39 +32,58 @@@ struct irq_class 
        char *desc;
  };
  
 -static const struct irq_class intrclass_names[] = {
 +/*
 + * The list of "main" irq classes on s390. This is the list of interrrupts
 + * that appear both in /proc/stat ("intr" line) and /proc/interrupts.
 + * Historically only external and I/O interrupts have been part of /proc/stat.
 + * We can't add the split external and I/O sub classes since the first field
 + * in the "intr" line in /proc/stat is supposed to be the sum of all other
 + * fields.
 + * Since the external and I/O interrupt fields are already sums we would end
 + * up with having a sum which accounts each interrupt twice.
 + */
 +static const struct irq_class irqclass_main_desc[NR_IRQS] = {
        [EXTERNAL_INTERRUPT] = {.name = "EXT"},
 -      [IO_INTERRUPT]       = {.name = "I/O"},
 -      [EXTINT_CLK] = {.name = "CLK", .desc = "[EXT] Clock Comparator"},
 -      [EXTINT_EXC] = {.name = "EXC", .desc = "[EXT] External Call"},
 -      [EXTINT_EMS] = {.name = "EMS", .desc = "[EXT] Emergency Signal"},
 -      [EXTINT_TMR] = {.name = "TMR", .desc = "[EXT] CPU Timer"},
 -      [EXTINT_TLA] = {.name = "TAL", .desc = "[EXT] Timing Alert"},
 -      [EXTINT_PFL] = {.name = "PFL", .desc = "[EXT] Pseudo Page Fault"},
 -      [EXTINT_DSD] = {.name = "DSD", .desc = "[EXT] DASD Diag"},
 -      [EXTINT_VRT] = {.name = "VRT", .desc = "[EXT] Virtio"},
 -      [EXTINT_SCP] = {.name = "SCP", .desc = "[EXT] Service Call"},
 -      [EXTINT_IUC] = {.name = "IUC", .desc = "[EXT] IUCV"},
 -      [EXTINT_CMS] = {.name = "CMS", .desc = "[EXT] CPU-Measurement: 
Sampling"},
 -      [EXTINT_CMC] = {.name = "CMC", .desc = "[EXT] CPU-Measurement: 
Counter"},
 -      [EXTINT_CMR] = {.name = "CMR", .desc = "[EXT] CPU-Measurement: RI"},
 -      [IOINT_CIO]  = {.name = "CIO", .desc = "[I/O] Common I/O Layer 
Interrupt"},
 -      [IOINT_QAI]  = {.name = "QAI", .desc = "[I/O] QDIO Adapter Interrupt"},
 -      [IOINT_DAS]  = {.name = "DAS", .desc = "[I/O] DASD"},
 -      [IOINT_C15]  = {.name = "C15", .desc = "[I/O] 3215"},
 -      [IOINT_C70]  = {.name = "C70", .desc = "[I/O] 3270"},
 -      [IOINT_TAP]  = {.name = "TAP", .desc = "[I/O] Tape"},
 -      [IOINT_VMR]  = {.name = "VMR", .desc = "[I/O] Unit Record Devices"},
 -      [IOINT_LCS]  = {.name = "LCS", .desc = "[I/O] LCS"},
 -      [IOINT_CLW]  = {.name = "CLW", .desc = "[I/O] CLAW"},
 -      [IOINT_CTC]  = {.name = "CTC", .desc = "[I/O] CTC"},
 -      [IOINT_APB]  = {.name = "APB", .desc = "[I/O] AP Bus"},
 -      [IOINT_ADM]  = {.name = "ADM", .desc = "[I/O] EADM Subchannel"},
 -      [IOINT_CSC]  = {.name = "CSC", .desc = "[I/O] CHSC Subchannel"},
 -      [IOINT_PCI]  = {.name = "PCI", .desc = "[I/O] PCI Interrupt" },
 -      [IOINT_MSI] =  {.name = "MSI", .desc = "[I/O] MSI Interrupt" },
 -      [IOINT_VIR]  = {.name = "VIR", .desc = "[I/O] Virtual I/O Devices"},
 +      [IO_INTERRUPT]       = {.name = "I/O"}
 +};
 +
 +/*
 + * The list of split external and I/O interrupts that appear only in
 + * /proc/interrupts.
 + * In addition this list contains non external / I/O events like NMIs.
 + */
 +static const struct irq_class irqclass_sub_desc[NR_ARCH_IRQS] = {
 +      [IRQEXT_CLK] = {.name = "CLK", .desc = "[EXT] Clock Comparator"},
 +      [IRQEXT_EXC] = {.name = "EXC", .desc = "[EXT] External Call"},
 +      [IRQEXT_EMS] = {.name = "EMS", .desc = "[EXT] Emergency Signal"},
 +      [IRQEXT_TMR] = {.name = "TMR", .desc = "[EXT] CPU Timer"},
 +      [IRQEXT_TLA] = {.name = "TAL", .desc = "[EXT] Timing Alert"},
 +      [IRQEXT_PFL] = {.name = "PFL", .desc = "[EXT] Pseudo Page Fault"},
 +      [IRQEXT_DSD] = {.name = "DSD", .desc = "[EXT] DASD Diag"},
 +      [IRQEXT_VRT] = {.name = "VRT", .desc = "[EXT] Virtio"},
 +      [IRQEXT_SCP] = {.name = "SCP", .desc = "[EXT] Service Call"},
 +      [IRQEXT_IUC] = {.name = "IUC", .desc = "[EXT] IUCV"},
 +      [IRQEXT_CMS] = {.name = "CMS", .desc = "[EXT] CPU-Measurement: 
Sampling"},
 +      [IRQEXT_CMC] = {.name = "CMC", .desc = "[EXT] CPU-Measurement: 
Counter"},
 +      [IRQEXT_CMR] = {.name = "CMR", .desc = "[EXT] CPU-Measurement: RI"},
 +      [IRQIO_CIO]  = {.name = "CIO", .desc = "[I/O] Common I/O Layer 
Interrupt"},
 +      [IRQIO_QAI]  = {.name = "QAI", .desc = "[I/O] QDIO Adapter Interrupt"},
 +      [IRQIO_DAS]  = {.name = "DAS", .desc = "[I/O] DASD"},
 +      [IRQIO_C15]  = {.name = "C15", .desc = "[I/O] 3215"},
 +      [IRQIO_C70]  = {.name = "C70", .desc = "[I/O] 3270"},
 +      [IRQIO_TAP]  = {.name = "TAP", .desc = "[I/O] Tape"},
 +      [IRQIO_VMR]  = {.name = "VMR", .desc = "[I/O] Unit Record Devices"},
 +      [IRQIO_LCS]  = {.name = "LCS", .desc = "[I/O] LCS"},
 +      [IRQIO_CLW]  = {.name = "CLW", .desc = "[I/O] CLAW"},
 +      [IRQIO_CTC]  = {.name = "CTC", .desc = "[I/O] CTC"},
 +      [IRQIO_APB]  = {.name = "APB", .desc = "[I/O] AP Bus"},
 +      [IRQIO_ADM]  = {.name = "ADM", .desc = "[I/O] EADM Subchannel"},
 +      [IRQIO_CSC]  = {.name = "CSC", .desc = "[I/O] CHSC Subchannel"},
 +      [IRQIO_PCI]  = {.name = "PCI", .desc = "[I/O] PCI Interrupt" },
 +      [IRQIO_MSI]  = {.name = "MSI", .desc = "[I/O] MSI Interrupt" },
++      [IRQIO_VIR]  = {.name = "VIR", .desc = "[I/O] Virtual I/O Devices"},
        [NMI_NMI]    = {.name = "NMI", .desc = "[NMI] Machine Check"},
 +      [CPU_RST]    = {.name = "RST", .desc = "[CPU] CPU Restart"},
  };
  
  /*

Attachment: pgpBfYs2xBurp.pgp
Description: PGP signature

Reply via email to