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

Revert "s390/pci: remove bit_lock usage in interrupt handler"

This reverts commit 9594ca6b87d9f11e9f14ac31581e0e5d79a8e839.

With the handle_simple_irq irq_flow_handler it must be ensured to
not call generic_handle_irq with the same IRQ number on 2 CPUs at
the same time (interrupts are floating on s390).
Contrary to my initial investigation the irq_desc's lock usage in
handle_simple_irq does not ensure this. Thus re-introduce the bit-
lock usage in s390's pci handler.

Reported-by: Ursula Braun <ubraun@linux.ibm.com>
Reported-by: Alexander Schmidt <alexs@linux.ibm.com>
Signed-off-by: Sebastian Ott <sebott@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>

authored by

Sebastian Ott and committed by
Martin Schwidefsky
614db269 8f9aca0c

+3 -1
+3 -1
arch/s390/pci/pci.c
··· 382 382 if (ai == -1UL) 383 383 break; 384 384 inc_irq_stat(IRQIO_MSI); 385 + airq_iv_lock(aibv, ai); 385 386 generic_handle_irq(airq_iv_get_data(aibv, ai)); 387 + airq_iv_unlock(aibv, ai); 386 388 } 387 389 } 388 390 } ··· 410 408 zdev->aisb = aisb; 411 409 412 410 /* Create adapter interrupt vector */ 413 - zdev->aibv = airq_iv_create(msi_vecs, AIRQ_IV_DATA); 411 + zdev->aibv = airq_iv_create(msi_vecs, AIRQ_IV_DATA | AIRQ_IV_BITLOCK); 414 412 if (!zdev->aibv) 415 413 return -ENOMEM; 416 414