Patch "s390/ap: fix AP bus crash on early config change callback invocation" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    s390/ap: fix AP bus crash on early config change callback invocation

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     s390-ap-fix-ap-bus-crash-on-early-config-change-call.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 41012fc2aa29a3d34c4950dd83774e9fb54e32a4
Author: Harald Freudenberger <freude@xxxxxxxxxxxxx>
Date:   Mon Oct 23 09:57:10 2023 +0200

    s390/ap: fix AP bus crash on early config change callback invocation
    
    commit e14aec23025eeb1f2159ba34dbc1458467c4c347 upstream.
    
    Fix kernel crash in AP bus code caused by very early invocation of the
    config change callback function via SCLP.
    
    After a fresh IML of the machine the crypto cards are still offline and
    will get switched online only with activation of any LPAR which has the
    card in it's configuration. A crypto card coming online is reported
    to the LPAR via SCLP and the AP bus offers a callback function to get
    this kind of information. However, it may happen that the callback is
    invoked before the AP bus init function is complete. As the callback
    triggers a synchronous AP bus scan, the scan may already run but some
    internal states are not initialized by the AP bus init function resulting
    in a crash like this:
    
      [   11.635859] Unable to handle kernel pointer dereference in virtual kernel address space
      [   11.635861] Failing address: 0000000000000000 TEID: 0000000000000887
      [   11.635862] Fault in home space mode while using kernel ASCE.
      [   11.635864] AS:00000000894c4007 R3:00000001fece8007 S:00000001fece7800 P:000000000000013d
      [   11.635879] Oops: 0004 ilc:1 [#1] SMP
      [   11.635882] Modules linked in:
      [   11.635884] CPU: 5 PID: 42 Comm: kworker/5:0 Not tainted 6.6.0-rc3-00003-g4dbf7cdc6b42 #12
      [   11.635886] Hardware name: IBM 3931 A01 751 (LPAR)
      [   11.635887] Workqueue: events_long ap_scan_bus
      [   11.635891] Krnl PSW : 0704c00180000000 0000000000000000 (0x0)
      [   11.635895]            R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:0 PM:0 RI:0 EA:3
      [   11.635897] Krnl GPRS: 0000000001000a00 0000000000000000 0000000000000006 0000000089591940
      [   11.635899]            0000000080000000 0000000000000a00 0000000000000000 0000000000000000
      [   11.635901]            0000000081870c00 0000000089591000 000000008834e4e2 0000000002625a00
      [   11.635903]            0000000081734200 0000038000913c18 000000008834c6d6 0000038000913ac8
      [   11.635906] Krnl Code:>0000000000000000: 0000                illegal
      [   11.635906]            0000000000000002: 0000                illegal
      [   11.635906]            0000000000000004: 0000                illegal
      [   11.635906]            0000000000000006: 0000                illegal
      [   11.635906]            0000000000000008: 0000                illegal
      [   11.635906]            000000000000000a: 0000                illegal
      [   11.635906]            000000000000000c: 0000                illegal
      [   11.635906]            000000000000000e: 0000                illegal
      [   11.635915] Call Trace:
      [   11.635916]  [<0000000000000000>] 0x0
      [   11.635918]  [<000000008834e4e2>] ap_queue_init_state+0x82/0xb8
      [   11.635921]  [<000000008834ba1c>] ap_scan_domains+0x6fc/0x740
      [   11.635923]  [<000000008834c092>] ap_scan_adapter+0x632/0x8b0
      [   11.635925]  [<000000008834c3e4>] ap_scan_bus+0xd4/0x288
      [   11.635927]  [<00000000879a33ba>] process_one_work+0x19a/0x410
      [   11.635930] Discipline DIAG cannot be used without z/VM
      [   11.635930]  [<00000000879a3a2c>] worker_thread+0x3fc/0x560
      [   11.635933]  [<00000000879aea60>] kthread+0x120/0x128
      [   11.635936]  [<000000008792afa4>] __ret_from_fork+0x3c/0x58
      [   11.635938]  [<00000000885ebe62>] ret_from_fork+0xa/0x30
      [   11.635942] Last Breaking-Event-Address:
      [   11.635942]  [<000000008834c6d4>] ap_wait+0xcc/0x148
    
    This patch improves the ap_bus_force_rescan() function which is
    invoked by the config change callback by checking if a first
    initial AP bus scan has been done. If not, the force rescan request
    is simple ignored. Anyhow it does not make sense to trigger AP bus
    re-scans even before the very first bus scan is complete.
    
    Cc: stable@xxxxxxxxxxxxxxx
    Reviewed-by: Holger Dengler <dengler@xxxxxxxxxxxxx>
    Signed-off-by: Harald Freudenberger <freude@xxxxxxxxxxxxx>
    Signed-off-by: Vasily Gorbik <gor@xxxxxxxxxxxxx>
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c
index c00a288a4eca2..602438a8c2a26 100644
--- a/drivers/s390/crypto/ap_bus.c
+++ b/drivers/s390/crypto/ap_bus.c
@@ -787,6 +787,10 @@ EXPORT_SYMBOL(ap_driver_unregister);
 
 void ap_bus_force_rescan(void)
 {
+	/* Only trigger AP bus scans after the initial scan is done */
+	if (atomic64_read(&ap_scan_bus_count) <= 0)
+		return;
+
 	/* processing a asynchronous bus rescan */
 	del_timer(&ap_config_timer);
 	queue_work(system_long_wq, &ap_scan_work);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux