Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

s390/airq: pass more TPI info to airq handlers

A subsequent patch will introduce an airq handler that requires additional
TPI information beyond directed vs floating, so pass the entire tpi_info
structure via the handler. Only pci actually uses this information today,
for the other airq handlers this is effectively a no-op.

Reviewed-by: Eric Farman <farman@linux.ibm.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Reviewed-by: Pierre Morel <pmorel@linux.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Acked-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Acked-by: Cornelia Huck <cohuck@redhat.com>
Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com>
Link: https://lore.kernel.org/r/20220606203325.110625-6-mjrosato@linux.ibm.com
Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>

authored by

Matthew Rosato and committed by
Christian Borntraeger
d2197485 b05a870c

+26 -11
+2 -1
arch/s390/include/asm/airq.h
··· 12 12 13 13 #include <linux/bit_spinlock.h> 14 14 #include <linux/dma-mapping.h> 15 + #include <asm/tpi.h> 15 16 16 17 struct airq_struct { 17 18 struct hlist_node list; /* Handler queueing. */ 18 - void (*handler)(struct airq_struct *airq, bool floating); 19 + void (*handler)(struct airq_struct *airq, struct tpi_info *tpi_info); 19 20 u8 *lsi_ptr; /* Local-Summary-Indicator pointer */ 20 21 u8 lsi_mask; /* Local-Summary-Indicator mask */ 21 22 u8 isc; /* Interrupt-subclass */
+3 -1
arch/s390/kvm/interrupt.c
··· 28 28 #include <asm/switch_to.h> 29 29 #include <asm/nmi.h> 30 30 #include <asm/airq.h> 31 + #include <asm/tpi.h> 31 32 #include "kvm-s390.h" 32 33 #include "gaccess.h" 33 34 #include "trace-s390.h" ··· 3312 3311 } 3313 3312 EXPORT_SYMBOL_GPL(kvm_s390_gisc_unregister); 3314 3313 3315 - static void gib_alert_irq_handler(struct airq_struct *airq, bool floating) 3314 + static void gib_alert_irq_handler(struct airq_struct *airq, 3315 + struct tpi_info *tpi_info) 3316 3316 { 3317 3317 inc_irq_stat(IRQIO_GAL); 3318 3318 process_gib_alert_list();
+7 -2
arch/s390/pci/pci_irq.c
··· 11 11 12 12 #include <asm/isc.h> 13 13 #include <asm/airq.h> 14 + #include <asm/tpi.h> 14 15 15 16 static enum {FLOATING, DIRECTED} irq_delivery; 16 17 ··· 217 216 } 218 217 } 219 218 220 - static void zpci_directed_irq_handler(struct airq_struct *airq, bool floating) 219 + static void zpci_directed_irq_handler(struct airq_struct *airq, 220 + struct tpi_info *tpi_info) 221 221 { 222 + bool floating = !tpi_info->directed_irq; 223 + 222 224 if (floating) { 223 225 inc_irq_stat(IRQIO_PCF); 224 226 zpci_handle_fallback_irq(); ··· 231 227 } 232 228 } 233 229 234 - static void zpci_floating_irq_handler(struct airq_struct *airq, bool floating) 230 + static void zpci_floating_irq_handler(struct airq_struct *airq, 231 + struct tpi_info *tpi_info) 235 232 { 236 233 unsigned long si, ai; 237 234 struct airq_iv *aibv;
+1 -1
drivers/s390/cio/airq.c
··· 99 99 rcu_read_lock(); 100 100 hlist_for_each_entry_rcu(airq, head, list) 101 101 if ((*airq->lsi_ptr & airq->lsi_mask) != 0) 102 - airq->handler(airq, !tpi_info->directed_irq); 102 + airq->handler(airq, tpi_info); 103 103 rcu_read_unlock(); 104 104 105 105 return IRQ_HANDLED;
+4 -2
drivers/s390/cio/qdio_thinint.c
··· 15 15 #include <asm/qdio.h> 16 16 #include <asm/airq.h> 17 17 #include <asm/isc.h> 18 + #include <asm/tpi.h> 18 19 19 20 #include "cio.h" 20 21 #include "ioasm.h" ··· 94 93 /** 95 94 * tiqdio_thinint_handler - thin interrupt handler for qdio 96 95 * @airq: pointer to adapter interrupt descriptor 97 - * @floating: flag to recognize floating vs. directed interrupts (unused) 96 + * @tpi_info: interrupt information (e.g. floating vs directed -- unused) 98 97 */ 99 - static void tiqdio_thinint_handler(struct airq_struct *airq, bool floating) 98 + static void tiqdio_thinint_handler(struct airq_struct *airq, 99 + struct tpi_info *tpi_info) 100 100 { 101 101 u64 irq_time = S390_lowcore.int_clock; 102 102 u32 si_used = clear_shared_ind();
+6 -3
drivers/s390/crypto/ap_bus.c
··· 27 27 #include <linux/kthread.h> 28 28 #include <linux/mutex.h> 29 29 #include <asm/airq.h> 30 + #include <asm/tpi.h> 30 31 #include <linux/atomic.h> 31 32 #include <asm/isc.h> 32 33 #include <linux/hrtimer.h> ··· 132 131 static struct bus_type ap_bus_type; 133 132 134 133 /* Adapter interrupt definitions */ 135 - static void ap_interrupt_handler(struct airq_struct *airq, bool floating); 134 + static void ap_interrupt_handler(struct airq_struct *airq, 135 + struct tpi_info *tpi_info); 136 136 137 137 static bool ap_irq_flag; 138 138 ··· 454 452 /** 455 453 * ap_interrupt_handler() - Schedule ap_tasklet on interrupt 456 454 * @airq: pointer to adapter interrupt descriptor 457 - * @floating: ignored 455 + * @tpi_info: ignored 458 456 */ 459 - static void ap_interrupt_handler(struct airq_struct *airq, bool floating) 457 + static void ap_interrupt_handler(struct airq_struct *airq, 458 + struct tpi_info *tpi_info) 460 459 { 461 460 inc_irq_stat(IRQIO_APB); 462 461 tasklet_schedule(&ap_tasklet);
+3 -1
drivers/s390/virtio/virtio_ccw.c
··· 33 33 #include <asm/virtio-ccw.h> 34 34 #include <asm/isc.h> 35 35 #include <asm/airq.h> 36 + #include <asm/tpi.h> 36 37 37 38 /* 38 39 * virtio related functions ··· 205 204 write_unlock_irqrestore(&info->lock, flags); 206 205 } 207 206 208 - static void virtio_airq_handler(struct airq_struct *airq, bool floating) 207 + static void virtio_airq_handler(struct airq_struct *airq, 208 + struct tpi_info *tpi_info) 209 209 { 210 210 struct airq_info *info = container_of(airq, struct airq_info, airq); 211 211 unsigned long ai;