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
125 125
126resource_size_t126resource_size_t
127pcibios_align_resource(void *data, const struct resource *res,127pcibios_align_resource(void *data, const struct resource *res,
128 const struct resource *empty_res,
128 resource_size_t size, resource_size_t align)129 resource_size_t size, resource_size_t align)
129{130{
130 struct pci_dev *dev = data;131 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
560 * which might be mirrored at 0x0100-0x03ff..560 * which might be mirrored at 0x0100-0x03ff..
561 */561 */
562resource_size_t pcibios_align_resource(void *data, const struct resource *res,562resource_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)
564{566{
565 struct pci_dev *dev = data;567 struct pci_dev *dev = data;
566 resource_size_t start = res->start;568 resource_size_t start = res->start;
arch/m68k/kernel/pcibios.c+3−1
@@ -27,7 +27,9 @@ · 26 unmodified lines
27 * which might be mirrored at 0x0100-0x03ff..27 * which might be mirrored at 0x0100-0x03ff..
28 */28 */
29resource_size_t pcibios_align_resource(void *data, const struct resource *res,29resource_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)
31{33{
32 resource_size_t start = res->start;34 resource_size_t start = res->start;
33 35
arch/mips/pci/pci-generic.c+2−1
@@ -22,7 +22,8 @@ · 21 unmodified lines
22 * which might have be mirrored at 0x0100-0x03ff..22 * which might have be mirrored at 0x0100-0x03ff..
23 */23 */
24resource_size_t pcibios_align_resource(void *data, const struct resource *res,24resource_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)
26{27{
27 struct pci_dev *dev = data;28 struct pci_dev *dev = data;
28 resource_size_t start = res->start;29 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
52 */52 */
53resource_size_t53resource_size_t
54pcibios_align_resource(void *data, const struct resource *res,54pcibios_align_resource(void *data, const struct resource *res,
55 const struct resource *empty_res,
55 resource_size_t size, resource_size_t align)56 resource_size_t size, resource_size_t align)
56{57{
57 struct pci_dev *dev = data;58 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
196 * than res->start.196 * than res->start.
197 */197 */
198resource_size_t pcibios_align_resource(void *data, const struct resource *res,198resource_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)
200{202{
201 resource_size_t mask, align, start = res->start;203 resource_size_t mask, align, start = res->start;
202 204
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
1132 * which might have be mirrored at 0x0100-0x03ff..1132 * which might have be mirrored at 0x0100-0x03ff..
1133 */1133 */
1134resource_size_t pcibios_align_resource(void *data, const struct resource *res,1134resource_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)
1136{1138{
1137 struct pci_dev *dev = data;1139 struct pci_dev *dev = data;
1138 resource_size_t start = res->start;1140 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
266}266}
267 267
268resource_size_t pcibios_align_resource(void *data, const struct resource *res,268resource_size_t pcibios_align_resource(void *data, const struct resource *res,
269 const struct resource *empty_res,
269 resource_size_t size,270 resource_size_t size,
270 resource_size_t align)271 resource_size_t align)
271{272{
arch/sh/drivers/pci/pci.c+3−1
@@ -168,7 +168,9 @@ subsys_initcall(pcibios_init); · 167 unmodified lines
168 * modulo 0x400.168 * modulo 0x400.
169 */169 */
170resource_size_t pcibios_align_resource(void *data, const struct resource *res,170resource_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)
172{174{
173 struct pci_dev *dev = data;175 struct pci_dev *dev = data;
174 struct pci_channel *hose = dev->sysdata;176 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
153 */153 */
154resource_size_t154resource_size_t
155pcibios_align_resource(void *data, const struct resource *res,155pcibios_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)
157{158{
158 struct pci_dev *dev = data;159 struct pci_dev *dev = data;
159 resource_size_t start = res->start;160 resource_size_t start = res->start;
arch/xtensa/kernel/pci.c+1−0
@@ -39,6 +39,7 @@ · 38 unmodified lines
39 */39 */
40resource_size_t40resource_size_t
41pcibios_align_resource(void *data, const struct resource *res,41pcibios_align_resource(void *data, const struct resource *res,
42 const struct resource *empty_res,
42 resource_size_t size, resource_size_t align)43 resource_size_t size, resource_size_t align)
43{44{
44 struct pci_dev *dev = data;45 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
251 */251 */
252resource_size_t __weak pcibios_align_resource(void *data,252resource_size_t __weak pcibios_align_resource(void *data,
253 const struct resource *res,253 const struct resource *res,
254 const struct resource *empty_res,
254 resource_size_t size,255 resource_size_t size,
255 resource_size_t align)256 resource_size_t align)
256{257{
257 return res->start;258 return res->start;
258}259}
259 260
260static int __pci_assign_resource(struct pci_bus *bus, struct pci_dev *dev,261static 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
602 602
603static resource_size_t603static resource_size_t
604pcmcia_align(void *align_data, const struct resource *res,604pcmcia_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)
606{607{
607 struct pcmcia_align_data *data = align_data;608 struct pcmcia_align_data *data = align_data;
608 struct resource_map *m;609 struct resource_map *m;
include/linux/ioport.h+2−0
@@ -202,6 +202,7 @@ enum { · 201 unmodified lines
202 * typedef resource_alignf - Resource alignment callback202 * typedef resource_alignf - Resource alignment callback
203 * @data: Private data used by the callback203 * @data: Private data used by the callback
204 * @res: Resource candidate range (an empty resource space)204 * @res: Resource candidate range (an empty resource space)
205 * @empty_res: Empty resource range without alignment applied
205 * @size: The minimum size of the empty space206 * @size: The minimum size of the empty space
206 * @align: Alignment from the constraints207 * @align: Alignment from the constraints
207 *208 *
@@ -212,6 +213,7 @@ enum { · 4 unmodified lines
212 */213 */
213typedef resource_size_t (*resource_alignf)(void *data,214typedef resource_size_t (*resource_alignf)(void *data,
214 const struct resource *res,215 const struct resource *res,
216 const struct resource *empty_res,
215 resource_size_t size,217 resource_size_t size,
216 resource_size_t align);218 resource_size_t align);
217 219
include/linux/pci.h+4−3
@@ -1206,9 +1206,10 @@ int __must_check pcibios_enable_device(struct pci_dev *, int mask); · 1205 unmodified lines
1206char *pcibios_setup(char *str);1206char *pcibios_setup(char *str);
1207 1207
1208/* Used only when drivers/pci/setup.c is used */1208/* Used only when drivers/pci/setup.c is used */
1209resource_size_t pcibios_align_resource(void *, const struct resource *,1209resource_size_t pcibios_align_resource(void *data, const struct resource *res,
1210 resource_size_t,1210 const struct resource *empty_res,
1211 resource_size_t);1211 resource_size_t size,
1212 resource_size_t align);
1212 1213
1213/* Generic PCI functions used internally */1214/* Generic PCI functions used internally */
1214 1215
kernel/resource.c+2−1
@@ -759,7 +759,8 @@ static int __find_resource_space(struct resource *root, struct resource *old, · 758 unmodified lines
759 alloc.flags = avail.flags;759 alloc.flags = avail.flags;
760 if (alignf) {760 if (alignf) {
761 alloc.start = alignf(constraint->alignf_data,761 alloc.start = alignf(constraint->alignf_data,
762 &avail, size, constraint->align);762 &avail, &tmp,
763 size, constraint->align);
763 } else {764 } else {
764 alloc.start = avail.start;765 alloc.start = avail.start;
765 }766 }

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