Skip to content

Commit bcfc671

Browse files
Philipp Stannerkwilczynski
authored andcommitted
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 <[email protected]> Signed-off-by: Krzysztof Wilczyński <[email protected]> Reviewed-by: Andy Shevchenko <[email protected]> Reviewed-by: Kuppuswamy Sathyanarayanan <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 85826c1 commit bcfc671

File tree

1 file changed

+5
-105
lines changed

1 file changed

+5
-105
lines changed

drivers/pci/devres.c

Lines changed: 5 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -70,118 +70,18 @@ static inline void pcim_addr_devres_clear(struct pcim_addr_devres *res)
7070
res->bar = -1;
7171
}
7272

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-
17373
static void pcim_addr_resource_release(struct device *dev, void *resource_raw)
17474
{
17575
struct pci_dev *pdev = to_pci_dev(dev);
17676
struct pcim_addr_devres *res = resource_raw;
17777

17878
switch (res->type) {
17979
case PCIM_ADDR_DEVRES_TYPE_REGION:
180-
__pcim_release_region(pdev, res->bar);
80+
pci_release_region(pdev, res->bar);
18181
break;
18282
case PCIM_ADDR_DEVRES_TYPE_REGION_MAPPING:
18383
pci_iounmap(pdev, res->baseaddr);
184-
__pcim_release_region(pdev, res->bar);
84+
pci_release_region(pdev, res->bar);
18585
break;
18686
case PCIM_ADDR_DEVRES_TYPE_MAPPING:
18787
pci_iounmap(pdev, res->baseaddr);
@@ -720,7 +620,7 @@ void __iomem *pcim_iomap_region(struct pci_dev *pdev, int bar,
720620
res->type = PCIM_ADDR_DEVRES_TYPE_REGION_MAPPING;
721621
res->bar = bar;
722622

723-
ret = __pcim_request_region(pdev, bar, name, 0);
623+
ret = pci_request_region(pdev, bar, name);
724624
if (ret != 0)
725625
goto err_region;
726626

@@ -734,7 +634,7 @@ void __iomem *pcim_iomap_region(struct pci_dev *pdev, int bar,
734634
return res->baseaddr;
735635

736636
err_iomap:
737-
__pcim_release_region(pdev, bar);
637+
pci_release_region(pdev, bar);
738638
err_region:
739639
pcim_addr_devres_free(res);
740640

@@ -835,7 +735,7 @@ int pcim_request_region(struct pci_dev *pdev, int bar, const char *name)
835735
res->type = PCIM_ADDR_DEVRES_TYPE_REGION;
836736
res->bar = bar;
837737

838-
ret = __pcim_request_region(pdev, bar, name, 0);
738+
ret = pci_request_region(pdev, bar, name);
839739
if (ret != 0) {
840740
pcim_addr_devres_free(res);
841741
return ret;

0 commit comments

Comments
 (0)