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

PCI: Remove redundant set of request functions

When the demangling of the hybrid devres functions within PCI was
implemented, it was necessary to implement several PCI functions a
second time to avoid cyclic calls, since the hybrid functions in pci.c
call the managed functions in devres.c, which in turn can be directly
used outside of PCI and needed request infrastructure, too.

Therefore, __pcim_request_region_range(), __pci_release_region_range()
and wrappers around them were implemented.

The hybrid nature has recently been removed from all functions in pci.c.
Therefore, the functions in devres.c can now directly use their
counterparts in pci.c without causing a call-cycle.

Remove __pcim_request_region_range(), __pcim_request_region_range() and
the wrappers. Use the corresponding request functions from pci.c in
devres.c

Signed-off-by: Philipp Stanner <phasta@kernel.org>
Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Link: https://lore.kernel.org/r/20250519112959.25487-7-phasta@kernel.org

authored by

Philipp Stanner and committed by
Krzysztof Wilczyński
bcfc6715 85826c11

+5 -105
+5 -105
drivers/pci/devres.c
··· 70 70 res->bar = -1; 71 71 } 72 72 73 - /* 74 - * The following functions, __pcim_*_region*, exist as counterparts to the 75 - * versions from pci.c - which, unfortunately, were in the past in "hybrid 76 - * mode", i.e., sometimes managed, sometimes not. 77 - * 78 - * To separate the APIs cleanly, we defined our own, simplified versions here. 79 - * 80 - * TODO: unify those functions with the counterparts in pci.c 81 - */ 82 - 83 - /** 84 - * __pcim_request_region_range - Request a ranged region 85 - * @pdev: PCI device the region belongs to 86 - * @bar: BAR the range is within 87 - * @offset: offset from the BAR's start address 88 - * @maxlen: length in bytes, beginning at @offset 89 - * @name: name of the driver requesting the resource 90 - * @req_flags: flags for the request, e.g., for kernel-exclusive requests 91 - * 92 - * Returns: 0 on success, a negative error code on failure. 93 - * 94 - * Request a range within a device's PCI BAR. Sanity check the input. 95 - */ 96 - static int __pcim_request_region_range(struct pci_dev *pdev, int bar, 97 - unsigned long offset, 98 - unsigned long maxlen, 99 - const char *name, int req_flags) 100 - { 101 - resource_size_t start = pci_resource_start(pdev, bar); 102 - resource_size_t len = pci_resource_len(pdev, bar); 103 - unsigned long dev_flags = pci_resource_flags(pdev, bar); 104 - 105 - if (start == 0 || len == 0) /* Unused BAR. */ 106 - return 0; 107 - if (len <= offset) 108 - return -EINVAL; 109 - 110 - start += offset; 111 - len -= offset; 112 - 113 - if (len > maxlen && maxlen != 0) 114 - len = maxlen; 115 - 116 - if (dev_flags & IORESOURCE_IO) { 117 - if (!request_region(start, len, name)) 118 - return -EBUSY; 119 - } else if (dev_flags & IORESOURCE_MEM) { 120 - if (!__request_mem_region(start, len, name, req_flags)) 121 - return -EBUSY; 122 - } else { 123 - /* That's not a device we can request anything on. */ 124 - return -ENODEV; 125 - } 126 - 127 - return 0; 128 - } 129 - 130 - static void __pcim_release_region_range(struct pci_dev *pdev, int bar, 131 - unsigned long offset, 132 - unsigned long maxlen) 133 - { 134 - resource_size_t start = pci_resource_start(pdev, bar); 135 - resource_size_t len = pci_resource_len(pdev, bar); 136 - unsigned long flags = pci_resource_flags(pdev, bar); 137 - 138 - if (len <= offset || start == 0) 139 - return; 140 - 141 - if (len == 0 || maxlen == 0) /* This an unused BAR. Do nothing. */ 142 - return; 143 - 144 - start += offset; 145 - len -= offset; 146 - 147 - if (len > maxlen) 148 - len = maxlen; 149 - 150 - if (flags & IORESOURCE_IO) 151 - release_region(start, len); 152 - else if (flags & IORESOURCE_MEM) 153 - release_mem_region(start, len); 154 - } 155 - 156 - static int __pcim_request_region(struct pci_dev *pdev, int bar, 157 - const char *name, int flags) 158 - { 159 - unsigned long offset = 0; 160 - unsigned long len = pci_resource_len(pdev, bar); 161 - 162 - return __pcim_request_region_range(pdev, bar, offset, len, name, flags); 163 - } 164 - 165 - static void __pcim_release_region(struct pci_dev *pdev, int bar) 166 - { 167 - unsigned long offset = 0; 168 - unsigned long len = pci_resource_len(pdev, bar); 169 - 170 - __pcim_release_region_range(pdev, bar, offset, len); 171 - } 172 - 173 73 static void pcim_addr_resource_release(struct device *dev, void *resource_raw) 174 74 { 175 75 struct pci_dev *pdev = to_pci_dev(dev); ··· 77 177 78 178 switch (res->type) { 79 179 case PCIM_ADDR_DEVRES_TYPE_REGION: 80 - __pcim_release_region(pdev, res->bar); 180 + pci_release_region(pdev, res->bar); 81 181 break; 82 182 case PCIM_ADDR_DEVRES_TYPE_REGION_MAPPING: 83 183 pci_iounmap(pdev, res->baseaddr); 84 - __pcim_release_region(pdev, res->bar); 184 + pci_release_region(pdev, res->bar); 85 185 break; 86 186 case PCIM_ADDR_DEVRES_TYPE_MAPPING: 87 187 pci_iounmap(pdev, res->baseaddr); ··· 620 720 res->type = PCIM_ADDR_DEVRES_TYPE_REGION_MAPPING; 621 721 res->bar = bar; 622 722 623 - ret = __pcim_request_region(pdev, bar, name, 0); 723 + ret = pci_request_region(pdev, bar, name); 624 724 if (ret != 0) 625 725 goto err_region; 626 726 ··· 634 734 return res->baseaddr; 635 735 636 736 err_iomap: 637 - __pcim_release_region(pdev, bar); 737 + pci_release_region(pdev, bar); 638 738 err_region: 639 739 pcim_addr_devres_free(res); 640 740 ··· 735 835 res->type = PCIM_ADDR_DEVRES_TYPE_REGION; 736 836 res->bar = bar; 737 837 738 - ret = __pcim_request_region(pdev, bar, name, 0); 838 + ret = pci_request_region(pdev, bar, name); 739 839 if (ret != 0) { 740 840 pcim_addr_devres_free(res); 741 841 return ret;