On Wed, May 17, 2023 at 12:53 PM Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx> wrote: > > As hotplug is not the only driver touching LNKCTL, use the RMW > capability accessor which handles concurrent changes correctly. > > Fixes: 7f822999e12a ("PCI: pciehp: Add Disable/enable link functions") > Suggested-by: Lukas Wunner <lukas@xxxxxxxxx> > Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx Acked-by: Rafael J. Wysocki <rafael@xxxxxxxxxx> > --- > drivers/pci/hotplug/pciehp_hpc.c | 12 +++--------- > 1 file changed, 3 insertions(+), 9 deletions(-) > > diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c > index f8c70115b691..26623e2884a3 100644 > --- a/drivers/pci/hotplug/pciehp_hpc.c > +++ b/drivers/pci/hotplug/pciehp_hpc.c > @@ -332,17 +332,11 @@ int pciehp_check_link_status(struct controller *ctrl) > static int __pciehp_link_set(struct controller *ctrl, bool enable) > { > struct pci_dev *pdev = ctrl_dev(ctrl); > - u16 lnk_ctrl; > > - pcie_capability_read_word(pdev, PCI_EXP_LNKCTL, &lnk_ctrl); > + pcie_capability_clear_and_set_word(pdev, PCI_EXP_LNKCTL, > + PCI_EXP_LNKCTL_LD, > + !enable ? PCI_EXP_LNKCTL_LD : 0); > > - if (enable) > - lnk_ctrl &= ~PCI_EXP_LNKCTL_LD; > - else > - lnk_ctrl |= PCI_EXP_LNKCTL_LD; > - > - pcie_capability_write_word(pdev, PCI_EXP_LNKCTL, lnk_ctrl); > - ctrl_dbg(ctrl, "%s: lnk_ctrl = %x\n", __func__, lnk_ctrl); > return 0; > } > > -- > 2.30.2 >