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

Configure Feed

Select the types of activity you want to include in your feed.

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.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Tested-by: Xifer <xiferdev@gmail.com>
Link: https://patch.msgid.link/20260324165633.4583-3-ilpo.jarvinen@linux.intel.com

authored by

Ilpo Järvinen and committed by
Bjorn Helgaas
f699bcc8 edfaa81d

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