On Mon, Jan 15, 2024 at 03:46:18PM +0100, Philipp Stanner wrote: > managing mwi with devres can easily be done with its own callback, > without the necessity to store any state about it in a device-related > struct. s/managing/Managing/ s/mwi/MWI/ since this is an initialism. Also in subject (but would be even better if it could mention an actual function name). > Remove the mwi state from the devres-struct. > Make the devres-mwi functions set a separate devres-callback. Wrap to fill 75 columns (or add blank lines if you intend multiple paragraphs). s/devres-struct/struct pci_devres/ to make this greppable. s/the devres-mwi functions/pcim_set_mwi()/ similarly. > Signed-off-by: Philipp Stanner <pstanner@xxxxxxxxxx> > --- > drivers/pci/devres.c | 23 +++++++++++------------ > drivers/pci/pci.h | 1 - > 2 files changed, 11 insertions(+), 13 deletions(-) > > diff --git a/drivers/pci/devres.c b/drivers/pci/devres.c > index de8cf6f87dd7..911c2037d9fd 100644 > --- a/drivers/pci/devres.c > +++ b/drivers/pci/devres.c > @@ -378,24 +378,26 @@ void __iomem *devm_pci_remap_cfg_resource(struct device *dev, > } > EXPORT_SYMBOL(devm_pci_remap_cfg_resource); > > +static void __pcim_clear_mwi(void *pdev_raw) > +{ > + struct pci_dev *pdev = pdev_raw; > + > + pci_clear_mwi(pdev); > +} > + > /** > * pcim_set_mwi - a device-managed pci_set_mwi() > - * @dev: the PCI device for which MWI is enabled > + * @pdev: the PCI device for which MWI is enabled > * > * Managed pci_set_mwi(). > * > * RETURNS: An appropriate -ERRNO error value on error, or zero for success. > */ > -int pcim_set_mwi(struct pci_dev *dev) > +int pcim_set_mwi(struct pci_dev *pdev) > { > - struct pci_devres *dr; > - > - dr = find_pci_dr(dev); > - if (!dr) > - return -ENOMEM; > + devm_add_action(&pdev->dev, __pcim_clear_mwi, pdev); > > - dr->mwi = 1; > - return pci_set_mwi(dev); > + return pci_set_mwi(pdev); > } > EXPORT_SYMBOL(pcim_set_mwi); > > @@ -405,9 +407,6 @@ static void pcim_release(struct device *gendev, void *res) > struct pci_dev *dev = to_pci_dev(gendev); > struct pci_devres *this = res; > > - if (this->mwi) > - pci_clear_mwi(dev); > - > if (this->restore_intx) > pci_intx(dev, this->orig_intx); > > diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h > index 3d9908a69ebf..667bfdd61d5e 100644 > --- a/drivers/pci/pci.h > +++ b/drivers/pci/pci.h > @@ -811,7 +811,6 @@ static inline pci_power_t mid_pci_get_power_state(struct pci_dev *pdev) > struct pci_devres { > unsigned int orig_intx:1; > unsigned int restore_intx:1; > - unsigned int mwi:1; > }; > > struct pci_devres *find_pci_dr(struct pci_dev *pdev); > -- > 2.43.0 >