/**
  * struct pcie_bwctrl_data - PCIe bandwidth controller
  * @set_speed_mutex:   Serializes link speed changes
- * @lbms_count:                Count for LBMS (since last reset)
  * @cdev:              Thermal cooling device associated with the port
  */
 struct pcie_bwctrl_data {
        struct mutex set_speed_mutex;
-       atomic_t lbms_count;
        struct thermal_cooling_device *cdev;
 };
 
-/*
- * Prevent port removal during LBMS count accessors and Link Speed changes.
- *
- * These have to be differentiated because pcie_bwctrl_change_speed() calls
- * pcie_retrain_link() which uses LBMS count reset accessor on success
- * (using just one rwsem triggers "possible recursive locking detected"
- * warning).
- */
-static DECLARE_RWSEM(pcie_bwctrl_lbms_rwsem);
+/* Prevent port removal during Link Speed changes. */
 static DECLARE_RWSEM(pcie_bwctrl_setspeed_rwsem);
 
 static bool pcie_valid_speed(enum pci_bus_speed speed)
 
 static void pcie_bwnotif_enable(struct pcie_device *srv)
 {
-       struct pcie_bwctrl_data *data = srv->port->link_bwctrl;
        struct pci_dev *port = srv->port;
        u16 link_status;
        int ret;
 
-       /* Count LBMS seen so far as one */
+       /* Note if LBMS has been seen so far */
        ret = pcie_capability_read_word(port, PCI_EXP_LNKSTA, &link_status);
        if (ret == PCIBIOS_SUCCESSFUL && link_status & PCI_EXP_LNKSTA_LBMS)
-               atomic_inc(&data->lbms_count);
+               set_bit(PCI_LINK_LBMS_SEEN, &port->priv_flags);
 
        pcie_capability_set_word(port, PCI_EXP_LNKCTL,
                                 PCI_EXP_LNKCTL_LBMIE | PCI_EXP_LNKCTL_LABIE);
 static irqreturn_t pcie_bwnotif_irq(int irq, void *context)
 {
        struct pcie_device *srv = context;
-       struct pcie_bwctrl_data *data = srv->port->link_bwctrl;
        struct pci_dev *port = srv->port;
        u16 link_status, events;
        int ret;
                return IRQ_NONE;
 
        if (events & PCI_EXP_LNKSTA_LBMS)
-               atomic_inc(&data->lbms_count);
+               set_bit(PCI_LINK_LBMS_SEEN, &port->priv_flags);
 
        pcie_capability_write_word(port, PCI_EXP_LNKSTA, events);
 
        return IRQ_HANDLED;
 }
 
-void pcie_reset_lbms_count(struct pci_dev *port)
-{
-       struct pcie_bwctrl_data *data;
-
-       guard(rwsem_read)(&pcie_bwctrl_lbms_rwsem);
-       data = port->link_bwctrl;
-       if (data)
-               atomic_set(&data->lbms_count, 0);
-       else
-               pcie_capability_write_word(port, PCI_EXP_LNKSTA,
-                                          PCI_EXP_LNKSTA_LBMS);
-}
-
-int pcie_lbms_count(struct pci_dev *port, unsigned long *val)
+void pcie_reset_lbms(struct pci_dev *port)
 {
-       struct pcie_bwctrl_data *data;
-
-       guard(rwsem_read)(&pcie_bwctrl_lbms_rwsem);
-       data = port->link_bwctrl;
-       if (!data)
-               return -ENOTTY;
-
-       *val = atomic_read(&data->lbms_count);
-
-       return 0;
+       clear_bit(PCI_LINK_LBMS_SEEN, &port->priv_flags);
+       pcie_capability_write_word(port, PCI_EXP_LNKSTA, PCI_EXP_LNKSTA_LBMS);
 }
 
 static int pcie_bwnotif_probe(struct pcie_device *srv)
                return ret;
 
        scoped_guard(rwsem_write, &pcie_bwctrl_setspeed_rwsem) {
-               scoped_guard(rwsem_write, &pcie_bwctrl_lbms_rwsem) {
-                       port->link_bwctrl = data;
-
-                       ret = request_irq(srv->irq, pcie_bwnotif_irq,
-                                         IRQF_SHARED, "PCIe bwctrl", srv);
-                       if (ret) {
-                               port->link_bwctrl = NULL;
-                               return ret;
-                       }
+               port->link_bwctrl = data;
 
-                       pcie_bwnotif_enable(srv);
+               ret = request_irq(srv->irq, pcie_bwnotif_irq,
+                                 IRQF_SHARED, "PCIe bwctrl", srv);
+               if (ret) {
+                       port->link_bwctrl = NULL;
+                       return ret;
                }
+
+               pcie_bwnotif_enable(srv);
        }
 
        pci_dbg(port, "enabled with IRQ %d\n", srv->irq);
        pcie_cooling_device_unregister(data->cdev);
 
        scoped_guard(rwsem_write, &pcie_bwctrl_setspeed_rwsem) {
-               scoped_guard(rwsem_write, &pcie_bwctrl_lbms_rwsem) {
-                       pcie_bwnotif_disable(srv->port);
+               pcie_bwnotif_disable(srv->port);
 
-                       free_irq(srv->irq, srv);
+               free_irq(srv->irq, srv);
 
-                       srv->port->link_bwctrl = NULL;
-               }
+               srv->port->link_bwctrl = NULL;
        }
 }