Re: [PATCH] bus: mhi: host: pci_generic: Fix runtime PM imbalance for no_m3 devices
From: Manivannan Sadhasivam
Date: Sat Aug 15 2026 - 02:23:20 EST
On Fri, Aug 07, 2026 at 02:33:53PM +0000, Alexandra Lu wrote:
> mhi_pci_probe() drops the runtime PM reference taken by local_pci_probe()
> only when the device supports both PME from D3hot and M3, but
> mhi_pci_remove() re-takes it based on PME capability alone, without
> checking no_m3.
>
> For a device that is PME capable and has no_m3 set, probe therefore never
> drops the reference while remove takes an extra one, leaving the runtime
> PM usage count one higher after every bind/unbind cycle. That is benign
> for the device being removed, since the PCI core resumes it to D0 on
> unbind regardless, but the struct device outlives the binding, so the
> count accumulates across repeated cycles and can end up preventing
> runtime suspend altogether.
>
> Cache no_m3 in the driver's private data, as is already done for
> reset_on_remove, and gate the removal side on it as well. Unlike
> reset_on_remove it is cached for virtual functions too, because the probe
> side gate tests info->no_m3 for physical and virtual functions alike.
>
> QDU100 is currently the only device that sets no_m3.
>
> Fixes: 0494cf9793b7 ("bus: mhi: host: pci_generic: Disable runtime PM for QDU100")
> Assisted-by: Cursor:claude-opus-5
> Signed-off-by: Alexandra Lu <alexandra.lu@xxxxxxxxx>
LGTM! But since the MHI tree is closed for v7.3, this patch will get applied
only when v7.3-rc1 is released.
- Mani
--
மணிவண்ணன் சதாசிவம்