Patch "cxl: Force context lock during EEH flow" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
cxl: Force context lock during EEH flow
to the 4.9-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:
cxl-force-context-lock-during-eeh-flow.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
ea9a26d117cf0637c71d3e0076f4a124bf5859dfMon Sep 17 00:00:00 2001
From: Vaibhav Jain <[email protected]>
Date: Thu, 27 Apr 2017 10:53:25 +0530
Subject: cxl: Force context lock during EEH flow
From: Vaibhav Jain <[email protected]>
commit ea9a26d117cf0637c71d3e0076f4a124bf5859df upstream.
During an eeh event when the cxl card is fenced and card sysfs attr perst_reloads_same_image is set following warning message is seen in the kernel logs:
Adapter context unlocked with 0 active contexts
------------[ cut here ]------------ WARNING: CPU: 12 PID: 627 at ../drivers/misc/cxl/main.c:325 cxl_adapter_context_unlock+0x60/0x80 [cxl]
Even though this warning is harmless, it clutters the kernel log during an eeh event. This warning is triggered as the EEH callback cxl_pci_error_detected doesn't obtain a context-lock before forcibly detaching all active context and when context-lock is released during call to cxl_configure_adapter from cxl_pci_slot_reset, a warning in cxl_adapter_context_unlock is triggered.
To fix this warning, we acquire the adapter context-lock via cxl_adapter_context_lock() in the eeh callback cxl_pci_error_detected() once all the virtual AFU PHBs are notified and their contexts detached. The context-lock is released in cxl_pci_slot_reset() after the adapter is successfully reconfigured and before the we call the slot_reset callback on slice attached device-drivers.
--- drivers/misc/cxl/pci.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-)
drivers/misc/cxl/pci.c +17 -2
@@ -1496,8 +1496,6 @@ static int cxl_configure_adapter(structif ((rc =cxl_native_register_psl_err_irq (adapter))) goto err; -/* Release the context lock as adapter is configured */ -cxl_adapter_context_unlock (adapter);return 0 ; err:
@@ -1596,6 +1594,9 @@ static struct cxl *cxl_pci_init_adapter(if ((rc =cxl_sysfs_adapter_add (adapter))) goto err_put1; +/* Release the context lock as adapter is configured */ +cxl_adapter_context_unlock (adapter); +return adapter; err_put1:
@@ -1893,6 +1894,13 @@ static pci_ers_result_t cxl_pci_error_de cxl_ops->afu_deactivate_mode (afu, afu->current_mode);pci_deconfigure_afu (afu); } + +/* should take the context lock here */ +if (cxl_adapter_context_lock (adapter) !=0 ) +dev_warn (&adapter->dev, +"Couldn't take context lock with %d active-contexts\n" , +atomic_read (&adapter->contexts_num)); +cxl_deconfigure_adapter (adapter);return result;
@@ -1911,6 +1919,13 @@ static pci_ers_result_t cxl_pci_slot_resif (cxl_configure_adapter (adapter, pdev)) goto err; +/* +* Unlock context activation for the adapter. Ideally this should be +* done in cxl_pci_resume but cxlflash module tries to activate the +* master context as part of slot_reset callback. +*/ +cxl_adapter_context_unlock (adapter); +for (i =0 ; i < adapter->slices; i++) { afu = adapter->afu[i];
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/cxl-force-context-lock-during-eeh-flow.patch queue-4.9/cxl-route-eeh-events-to-all-drivers-in-cxl_pci_error_detected.patch