Patch "PCI: endpoint: Clear secondary (not primary) EPC in pci_epc_remove_epf()" has been added to the 6.1-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

    PCI: endpoint: Clear secondary (not primary) EPC in pci_epc_remove_epf()

to the 6.1-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:
     pci-endpoint-clear-secondary-not-primary-epc-in-pci_.patch
and it can be found in the queue-6.1 subdirectory.

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



commit 67e112068a2bffdbc344d49f8933c872c3689626
Author: Zijun Hu <quic_zijuhu@xxxxxxxxxxx>
Date:   Thu Nov 7 08:53:09 2024 +0800

    PCI: endpoint: Clear secondary (not primary) EPC in pci_epc_remove_epf()
    
    [ Upstream commit 688d2eb4c6fcfdcdaed0592f9df9196573ff5ce2 ]
    
    In addition to a primary endpoint controller, an endpoint function may be
    associated with a secondary endpoint controller, epf->sec_epc, to provide
    NTB (non-transparent bridge) functionality.
    
    Previously, pci_epc_remove_epf() incorrectly cleared epf->epc instead of
    epf->sec_epc when removing from the secondary endpoint controller.
    
    Extend the epc->list_lock coverage and clear either epf->epc or
    epf->sec_epc as indicated.
    
    Link: https://lore.kernel.org/r/20241107-epc_rfc-v2-2-da5b6a99a66f@xxxxxxxxxxx
    Fixes: 63840ff53223 ("PCI: endpoint: Add support to associate secondary EPC with EPF")
    Signed-off-by: Zijun Hu <quic_zijuhu@xxxxxxxxxxx>
    Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx>
    [mani: reworded subject and description]
    Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx>
    [bhelgaas: commit log]
    Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@xxxxxxxxxx>
    Cc: stable@xxxxxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci-epc-core.c
index 6cce430d431b1..f5a5ec80d1943 100644
--- a/drivers/pci/endpoint/pci-epc-core.c
+++ b/drivers/pci/endpoint/pci-epc-core.c
@@ -664,18 +664,18 @@ void pci_epc_remove_epf(struct pci_epc *epc, struct pci_epf *epf,
 	if (!epc || IS_ERR(epc) || !epf)
 		return;
 
+	mutex_lock(&epc->list_lock);
 	if (type == PRIMARY_INTERFACE) {
 		func_no = epf->func_no;
 		list = &epf->list;
+		epf->epc = NULL;
 	} else {
 		func_no = epf->sec_epc_func_no;
 		list = &epf->sec_epc_list;
+		epf->sec_epc = NULL;
 	}
-
-	mutex_lock(&epc->list_lock);
 	clear_bit(func_no, &epc->function_num_map);
 	list_del(list);
-	epf->epc = NULL;
 	mutex_unlock(&epc->list_lock);
 }
 EXPORT_SYMBOL_GPL(pci_epc_remove_epf);




[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