Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/vmwgfx: Use non-hybrid PCI devres API

vmwgfx enables its PCI device with pcim_enable_device(). This,
implicitly, switches the function pci_request_regions() into managed
mode, where it becomes a devres function.

The PCI subsystem wants to remove this hybrid nature from its
interfaces. To do so, users of the aforementioned combination of
functions must be ported to non-hybrid functions.

Moreover, since both functions are already managed in this driver, the
calls to pci_release_regions() are unnecessary.

Remove the calls to pci_release_regions().

Replace the call to sometimes-managed pci_request_regions() with one to
always-managed pcim_request_all_regions().

Signed-off-by: Philipp Stanner <phasta@kernel.org>
Reviewed-by: Zack Rusin <zack.rusin@broadcom.com>
Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
Link: https://lore.kernel.org/r/20250514073126.85443-2-phasta@kernel.org

authored by

Philipp Stanner and committed by
Zack Rusin
9934ab18 217f80ac

+3 -11
+3 -11
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
··· 713 713 714 714 pci_set_master(pdev); 715 715 716 - ret = pci_request_regions(pdev, "vmwgfx probe"); 716 + ret = pcim_request_all_regions(pdev, "vmwgfx probe"); 717 717 if (ret) 718 718 return ret; 719 719 ··· 733 733 if (!dev->rmmio) { 734 734 drm_err(&dev->drm, 735 735 "Failed mapping registers mmio memory.\n"); 736 - pci_release_regions(pdev); 737 736 return -ENOMEM; 738 737 } 739 738 } else if (pci_id == VMWGFX_PCI_ID_SVGA2) { ··· 753 754 if (IS_ERR(dev->fifo_mem)) { 754 755 drm_err(&dev->drm, 755 756 "Failed mapping FIFO memory.\n"); 756 - pci_release_regions(pdev); 757 757 return PTR_ERR(dev->fifo_mem); 758 758 } 759 759 } else { 760 - pci_release_regions(pdev); 761 760 return -EINVAL; 762 761 } 763 762 ··· 833 836 int ret; 834 837 enum vmw_res_type i; 835 838 bool refuse_dma = false; 836 - struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); 837 839 838 840 vmw_sw_context_init(dev_priv); 839 841 ··· 848 852 return ret; 849 853 ret = vmw_detect_version(dev_priv); 850 854 if (ret) 851 - goto out_no_pci_or_version; 855 + return ret; 852 856 853 857 854 858 for (i = vmw_res_context; i < vmw_res_max; ++i) { ··· 1148 1152 1149 1153 if (dev_priv->ctx.staged_bindings) 1150 1154 vmw_binding_state_free(dev_priv->ctx.staged_bindings); 1151 - out_no_pci_or_version: 1152 - pci_release_regions(pdev); 1155 + 1153 1156 return ret; 1154 1157 } 1155 1158 1156 1159 static void vmw_driver_unload(struct drm_device *dev) 1157 1160 { 1158 1161 struct vmw_private *dev_priv = vmw_priv(dev); 1159 - struct pci_dev *pdev = to_pci_dev(dev->dev); 1160 1162 enum vmw_res_type i; 1161 1163 1162 1164 unregister_pm_notifier(&dev_priv->pm_nb); ··· 1190 1196 idr_destroy(&dev_priv->res_idr[i]); 1191 1197 1192 1198 vmw_mksstat_remove_all(dev_priv); 1193 - 1194 - pci_release_regions(pdev); 1195 1199 } 1196 1200 1197 1201 static void vmw_postclose(struct drm_device *dev,