History

resource: Pass full extent of empty space to resource_alignf callback

__find_resource_space() calculates the full extent of empty space but only passes the aligned space to resource_alignf callback. In some situations, the callback may choose take advantage of the free space before the requested alignment. Pass the full extent of the calculated empty space to resource_alignf callback as an additional parameter.

Ilpo Järvinen committed 7 months ago

Commit f699bcc1 parent edfaa8116 files · +35 −13Browse files

Unified · Split

16 files
  1. arch/alpha/kernel/pci.c +1 −0
  2. arch/arm/kernel/bios32.c +3 −1
  3. arch/m68k/kernel/pcibios.c +3 −1
  4. arch/mips/pci/pci-generic.c +2 −1
  5. arch/mips/pci/pci-legacy.c +1 −0
  6. arch/parisc/kernel/pci.c +3 −1
  7. arch/powerpc/kernel/pci-common.c +3 −1
  8. arch/s390/pci/pci.c +1 −0
  9. arch/sh/drivers/pci/pci.c +3 −1
  10. arch/x86/pci/i386.c +2 −1
  11. arch/xtensa/kernel/pci.c +1 −0
  12. drivers/pci/setup-res.c +2 −1
  13. drivers/pcmcia/rsrc_nonstatic.c +2 −1
  14. include/linux/ioport.h +2 −0
  15. include/linux/pci.h +4 −3
  16. kernel/resource.c +2 −1
arch/alpha/kernel/pci.c+1−0
@@ -125,6 +125,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, pcibios_fixup_final); · 124 unmodified lines
125125
126126 resource_size_t
127127 pcibios_align_resource(void *data, const struct resource *res,
128+ const struct resource *empty_res,
128129 resource_size_t size, resource_size_t align)
129130 {
130131 struct pci_dev *dev = data;
arch/arm/kernel/bios32.c+3−1
@@ -560,7 +560,9 @@ char * __init pcibios_setup(char *str) · 559 unmodified lines
560560 * which might be mirrored at 0x0100-0x03ff..
561561 */
562562 resource_size_t pcibios_align_resource(void *data, const struct resource *res,
563− resource_size_t size, resource_size_t align)
563+ const struct resource *empty_res,
564+ resource_size_t size,
565+ resource_size_t align)
564566 {
565567 struct pci_dev *dev = data;
566568 resource_size_t start = res->start;
arch/m68k/kernel/pcibios.c+3−1
@@ -27,7 +27,9 @@ · 26 unmodified lines
2727 * which might be mirrored at 0x0100-0x03ff..
2828 */
2929 resource_size_t pcibios_align_resource(void *data, const struct resource *res,
30− resource_size_t size, resource_size_t align)
30+ const struct resource *empty_res,
31+ resource_size_t size,
32+ resource_size_t align)
3133 {
3234 resource_size_t start = res->start;
3335
arch/mips/pci/pci-generic.c+2−1
@@ -22,7 +22,8 @@ · 21 unmodified lines
2222 * which might have be mirrored at 0x0100-0x03ff..
2323 */
2424 resource_size_t pcibios_align_resource(void *data, const struct resource *res,
25− resource_size_t size, resource_size_t align)
25+ const struct resource *empty_res,
26+ resource_size_t size, resource_size_t align)
2627 {
2728 struct pci_dev *dev = data;
2829 resource_size_t start = res->start;
arch/mips/pci/pci-legacy.c+1−0
@@ -52,6 +52,7 @@ unsigned long pci_address_to_pio(phys_addr_t address) · 51 unmodified lines
5252 */
5353 resource_size_t
5454 pcibios_align_resource(void *data, const struct resource *res,
55+ const struct resource *empty_res,
5556 resource_size_t size, resource_size_t align)
5657 {
5758 struct pci_dev *dev = data;
arch/parisc/kernel/pci.c+3−1
@@ -196,7 +196,9 @@ void __ref pcibios_init_bridge(struct pci_dev *dev) · 195 unmodified lines
196196 * than res->start.
197197 */
198198 resource_size_t pcibios_align_resource(void *data, const struct resource *res,
199− resource_size_t size, resource_size_t alignment)
199+ const struct resource *empty_res,
200+ resource_size_t size,
201+ resource_size_t alignment)
200202 {
201203 resource_size_t mask, align, start = res->start;
202204
arch/powerpc/kernel/pci-common.c+3−1
@@ -1132,7 +1132,9 @@ static int skip_isa_ioresource_align(struct pci_dev *dev) · 1131 unmodified lines
11321132 * which might have be mirrored at 0x0100-0x03ff..
11331133 */
11341134 resource_size_t pcibios_align_resource(void *data, const struct resource *res,
1135− resource_size_t size, resource_size_t align)
1135+ const struct resource *empty_res,
1136+ resource_size_t size,
1137+ resource_size_t align)
11361138 {
11371139 struct pci_dev *dev = data;
11381140 resource_size_t start = res->start;
arch/s390/pci/pci.c+1−0
@@ -266,6 +266,7 @@ static int zpci_cfg_store(struct zpci_dev *zdev, int offset, u32 val, u8 len) · 265 unmodified lines
266266 }
267267
268268 resource_size_t pcibios_align_resource(void *data, const struct resource *res,
269+ const struct resource *empty_res,
269270 resource_size_t size,
270271 resource_size_t align)
271272 {
arch/sh/drivers/pci/pci.c+3−1
@@ -168,7 +168,9 @@ subsys_initcall(pcibios_init); · 167 unmodified lines
168168 * modulo 0x400.
169169 */
170170 resource_size_t pcibios_align_resource(void *data, const struct resource *res,
171− resource_size_t size, resource_size_t align)
171+ const struct resource *empty_res,
172+ resource_size_t size,
173+ resource_size_t align)
172174 {
173175 struct pci_dev *dev = data;
174176 struct pci_channel *hose = dev->sysdata;
arch/x86/pci/i386.c+2−1
@@ -153,7 +153,8 @@ skip_isa_ioresource_align(struct pci_dev *dev) { · 152 unmodified lines
153153 */
154154 resource_size_t
155155 pcibios_align_resource(void *data, const struct resource *res,
156− resource_size_t size, resource_size_t align)
156+ const struct resource *empty_res,
157+ resource_size_t size, resource_size_t align)
157158 {
158159 struct pci_dev *dev = data;
159160 resource_size_t start = res->start;
arch/xtensa/kernel/pci.c+1−0
@@ -39,6 +39,7 @@ · 38 unmodified lines
3939 */
4040 resource_size_t
4141 pcibios_align_resource(void *data, const struct resource *res,
42+ const struct resource *empty_res,
4243 resource_size_t size, resource_size_t align)
4344 {
4445 struct pci_dev *dev = data;
drivers/pci/setup-res.c+2−1
@@ -251,10 +251,11 @@ static int pci_revert_fw_address(struct resource *res, struct pci_dev *dev, · 250 unmodified lines
251251 */
252252 resource_size_t __weak pcibios_align_resource(void *data,
253253 const struct resource *res,
254+ const struct resource *empty_res,
254255 resource_size_t size,
255256 resource_size_t align)
256257 {
257− return res->start;
258+ return res->start;
258259 }
259260
260261 static int __pci_assign_resource(struct pci_bus *bus, struct pci_dev *dev,
drivers/pcmcia/rsrc_nonstatic.c+2−1
@@ -602,7 +602,8 @@ static resource_size_t pcmcia_common_align(struct pcmcia_align_data *align_data, · 601 unmodified lines
602602
603603 static resource_size_t
604604 pcmcia_align(void *align_data, const struct resource *res,
605− resource_size_t size, resource_size_t align)
605+ const struct resource *empty_res,
606+ resource_size_t size, resource_size_t align)
606607 {
607608 struct pcmcia_align_data *data = align_data;
608609 struct resource_map *m;
include/linux/ioport.h+2−0
@@ -202,6 +202,7 @@ enum { · 201 unmodified lines
202202 * typedef resource_alignf - Resource alignment callback
203203 * @data: Private data used by the callback
204204 * @res: Resource candidate range (an empty resource space)
205+ * @empty_res: Empty resource range without alignment applied
205206 * @size: The minimum size of the empty space
206207 * @align: Alignment from the constraints
207208 *
@@ -212,6 +213,7 @@ enum { · 4 unmodified lines
212213 */
213214 typedef resource_size_t (*resource_alignf)(void *data,
214215 const struct resource *res,
216+ const struct resource *empty_res,
215217 resource_size_t size,
216218 resource_size_t align);
217219
include/linux/pci.h+4−3
@@ -1206,9 +1206,10 @@ int __must_check pcibios_enable_device(struct pci_dev *, int mask); · 1205 unmodified lines
12061206 char *pcibios_setup(char *str);
12071207
12081208 /* Used only when drivers/pci/setup.c is used */
1209−resource_size_t pcibios_align_resource(void *, const struct resource *,
1210− resource_size_t,
1211− resource_size_t);
1209+resource_size_t pcibios_align_resource(void *data, const struct resource *res,
1210+ const struct resource *empty_res,
1211+ resource_size_t size,
1212+ resource_size_t align);
12121213
12131214 /* Generic PCI functions used internally */
12141215
kernel/resource.c+2−1
@@ -759,7 +759,8 @@ static int __find_resource_space(struct resource *root, struct resource *old, · 758 unmodified lines
759759 alloc.flags = avail.flags;
760760 if (alignf) {
761761 alloc.start = alignf(constraint->alignf_data,
762− &avail, size, constraint->align);
762+ &avail, &tmp,
763+ size, constraint->align);
763764 } else {
764765 alloc.start = avail.start;
765766 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t