diff options
author | Sebastian Ott <sebott@linux.ibm.com> | 2018-10-28 06:51:56 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2019-04-29 04:47:01 -0400 |
commit | 30e63ef2ef43f014bf2039bd57cc917780d6a44b (patch) | |
tree | 9cdcede18e3b4465dd20f4baf5e9d9e01c4bea52 | |
parent | 0a9fddfaa8ea0f66564329ce89390c8dd38b2df0 (diff) |
s390/airq: recognize directed interrupts
Add an extra parameter for airq handlers to recognize
floating vs. directed interrupts.
Signed-off-by: Sebastian Ott <sebott@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r-- | arch/s390/include/asm/airq.h | 2 | ||||
-rw-r--r-- | arch/s390/kvm/interrupt.c | 2 | ||||
-rw-r--r-- | arch/s390/pci/pci_irq.c | 2 | ||||
-rw-r--r-- | drivers/s390/cio/airq.c | 2 | ||||
-rw-r--r-- | drivers/s390/cio/cio.h | 2 | ||||
-rw-r--r-- | drivers/s390/cio/qdio_thinint.c | 4 | ||||
-rw-r--r-- | drivers/s390/crypto/ap_bus.c | 4 | ||||
-rw-r--r-- | drivers/s390/virtio/virtio_ccw.c | 2 |
8 files changed, 10 insertions, 10 deletions
diff --git a/arch/s390/include/asm/airq.h b/arch/s390/include/asm/airq.h index fcf539efb32f..91e78df365c7 100644 --- a/arch/s390/include/asm/airq.h +++ b/arch/s390/include/asm/airq.h | |||
@@ -14,7 +14,7 @@ | |||
14 | 14 | ||
15 | struct airq_struct { | 15 | struct airq_struct { |
16 | struct hlist_node list; /* Handler queueing. */ | 16 | struct hlist_node list; /* Handler queueing. */ |
17 | void (*handler)(struct airq_struct *); /* Thin-interrupt handler */ | 17 | void (*handler)(struct airq_struct *airq, bool floating); |
18 | u8 *lsi_ptr; /* Local-Summary-Indicator pointer */ | 18 | u8 *lsi_ptr; /* Local-Summary-Indicator pointer */ |
19 | u8 lsi_mask; /* Local-Summary-Indicator mask */ | 19 | u8 lsi_mask; /* Local-Summary-Indicator mask */ |
20 | u8 isc; /* Interrupt-subclass */ | 20 | u8 isc; /* Interrupt-subclass */ |
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c index 82162867f378..37503ae62486 100644 --- a/arch/s390/kvm/interrupt.c +++ b/arch/s390/kvm/interrupt.c | |||
@@ -3194,7 +3194,7 @@ out: | |||
3194 | } | 3194 | } |
3195 | EXPORT_SYMBOL_GPL(kvm_s390_gisc_unregister); | 3195 | EXPORT_SYMBOL_GPL(kvm_s390_gisc_unregister); |
3196 | 3196 | ||
3197 | static void gib_alert_irq_handler(struct airq_struct *airq) | 3197 | static void gib_alert_irq_handler(struct airq_struct *airq, bool floating) |
3198 | { | 3198 | { |
3199 | inc_irq_stat(IRQIO_GAL); | 3199 | inc_irq_stat(IRQIO_GAL); |
3200 | process_gib_alert_list(); | 3200 | process_gib_alert_list(); |
diff --git a/arch/s390/pci/pci_irq.c b/arch/s390/pci/pci_irq.c index 3b129cd35b6e..55e22e392376 100644 --- a/arch/s390/pci/pci_irq.c +++ b/arch/s390/pci/pci_irq.c | |||
@@ -56,7 +56,7 @@ static struct irq_chip zpci_irq_chip = { | |||
56 | .irq_mask = pci_msi_mask_irq, | 56 | .irq_mask = pci_msi_mask_irq, |
57 | }; | 57 | }; |
58 | 58 | ||
59 | static void zpci_irq_handler(struct airq_struct *airq) | 59 | static void zpci_irq_handler(struct airq_struct *airq, bool floating) |
60 | { | 60 | { |
61 | unsigned long si, ai; | 61 | unsigned long si, ai; |
62 | struct airq_iv *aibv; | 62 | struct airq_iv *aibv; |
diff --git a/drivers/s390/cio/airq.c b/drivers/s390/cio/airq.c index a45011e4529e..e045e79f061c 100644 --- a/drivers/s390/cio/airq.c +++ b/drivers/s390/cio/airq.c | |||
@@ -95,7 +95,7 @@ static irqreturn_t do_airq_interrupt(int irq, void *dummy) | |||
95 | rcu_read_lock(); | 95 | rcu_read_lock(); |
96 | hlist_for_each_entry_rcu(airq, head, list) | 96 | hlist_for_each_entry_rcu(airq, head, list) |
97 | if ((*airq->lsi_ptr & airq->lsi_mask) != 0) | 97 | if ((*airq->lsi_ptr & airq->lsi_mask) != 0) |
98 | airq->handler(airq); | 98 | airq->handler(airq, !tpi_info->directed_irq); |
99 | rcu_read_unlock(); | 99 | rcu_read_unlock(); |
100 | 100 | ||
101 | return IRQ_HANDLED; | 101 | return IRQ_HANDLED; |
diff --git a/drivers/s390/cio/cio.h b/drivers/s390/cio/cio.h index 92eabbb5f18d..06a91743335a 100644 --- a/drivers/s390/cio/cio.h +++ b/drivers/s390/cio/cio.h | |||
@@ -51,7 +51,7 @@ struct tpi_info { | |||
51 | struct subchannel_id schid; | 51 | struct subchannel_id schid; |
52 | u32 intparm; | 52 | u32 intparm; |
53 | u32 adapter_IO:1; | 53 | u32 adapter_IO:1; |
54 | u32 :1; | 54 | u32 directed_irq:1; |
55 | u32 isc:3; | 55 | u32 isc:3; |
56 | u32 :27; | 56 | u32 :27; |
57 | u32 type:3; | 57 | u32 type:3; |
diff --git a/drivers/s390/cio/qdio_thinint.c b/drivers/s390/cio/qdio_thinint.c index 07dea602205b..28d59ac2204c 100644 --- a/drivers/s390/cio/qdio_thinint.c +++ b/drivers/s390/cio/qdio_thinint.c | |||
@@ -40,7 +40,7 @@ static LIST_HEAD(tiq_list); | |||
40 | static DEFINE_MUTEX(tiq_list_lock); | 40 | static DEFINE_MUTEX(tiq_list_lock); |
41 | 41 | ||
42 | /* Adapter interrupt definitions */ | 42 | /* Adapter interrupt definitions */ |
43 | static void tiqdio_thinint_handler(struct airq_struct *airq); | 43 | static void tiqdio_thinint_handler(struct airq_struct *airq, bool floating); |
44 | 44 | ||
45 | static struct airq_struct tiqdio_airq = { | 45 | static struct airq_struct tiqdio_airq = { |
46 | .handler = tiqdio_thinint_handler, | 46 | .handler = tiqdio_thinint_handler, |
@@ -179,7 +179,7 @@ static inline void tiqdio_call_inq_handlers(struct qdio_irq *irq) | |||
179 | * tiqdio_thinint_handler - thin interrupt handler for qdio | 179 | * tiqdio_thinint_handler - thin interrupt handler for qdio |
180 | * @airq: pointer to adapter interrupt descriptor | 180 | * @airq: pointer to adapter interrupt descriptor |
181 | */ | 181 | */ |
182 | static void tiqdio_thinint_handler(struct airq_struct *airq) | 182 | static void tiqdio_thinint_handler(struct airq_struct *airq, bool floating) |
183 | { | 183 | { |
184 | u32 si_used = clear_shared_ind(); | 184 | u32 si_used = clear_shared_ind(); |
185 | struct qdio_q *q; | 185 | struct qdio_q *q; |
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c index 1546389d71db..cc30e4f07fff 100644 --- a/drivers/s390/crypto/ap_bus.c +++ b/drivers/s390/crypto/ap_bus.c | |||
@@ -116,7 +116,7 @@ static int user_set_domain; | |||
116 | static struct bus_type ap_bus_type; | 116 | static struct bus_type ap_bus_type; |
117 | 117 | ||
118 | /* Adapter interrupt definitions */ | 118 | /* Adapter interrupt definitions */ |
119 | static void ap_interrupt_handler(struct airq_struct *airq); | 119 | static void ap_interrupt_handler(struct airq_struct *airq, bool floating); |
120 | 120 | ||
121 | static int ap_airq_flag; | 121 | static int ap_airq_flag; |
122 | 122 | ||
@@ -393,7 +393,7 @@ static enum hrtimer_restart ap_poll_timeout(struct hrtimer *unused) | |||
393 | * ap_interrupt_handler() - Schedule ap_tasklet on interrupt | 393 | * ap_interrupt_handler() - Schedule ap_tasklet on interrupt |
394 | * @airq: pointer to adapter interrupt descriptor | 394 | * @airq: pointer to adapter interrupt descriptor |
395 | */ | 395 | */ |
396 | static void ap_interrupt_handler(struct airq_struct *airq) | 396 | static void ap_interrupt_handler(struct airq_struct *airq, bool floating) |
397 | { | 397 | { |
398 | inc_irq_stat(IRQIO_APB); | 398 | inc_irq_stat(IRQIO_APB); |
399 | if (!ap_suspend_flag) | 399 | if (!ap_suspend_flag) |
diff --git a/drivers/s390/virtio/virtio_ccw.c b/drivers/s390/virtio/virtio_ccw.c index 74c328321889..991420caa4f2 100644 --- a/drivers/s390/virtio/virtio_ccw.c +++ b/drivers/s390/virtio/virtio_ccw.c | |||
@@ -182,7 +182,7 @@ static void drop_airq_indicator(struct virtqueue *vq, struct airq_info *info) | |||
182 | write_unlock_irqrestore(&info->lock, flags); | 182 | write_unlock_irqrestore(&info->lock, flags); |
183 | } | 183 | } |
184 | 184 | ||
185 | static void virtio_airq_handler(struct airq_struct *airq) | 185 | static void virtio_airq_handler(struct airq_struct *airq, bool floating) |
186 | { | 186 | { |
187 | struct airq_info *info = container_of(airq, struct airq_info, airq); | 187 | struct airq_info *info = container_of(airq, struct airq_info, airq); |
188 | unsigned long ai; | 188 | unsigned long ai; |